summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Lee <64482439+algojohnlee@users.noreply.github.com>2021-09-27 10:22:22 -0400
committerGitHub <noreply@github.com>2021-09-27 10:22:22 -0400
commitb619b940e56165184c8e94bcbd13b656b773918c (patch)
treee10b8c8450ec3d548ac2547233d9a218135d78b3
parentc1d2eb71b5042dd1da9b23f697cbd1321a66ac1a (diff)
parentd2790079630e316e4ae881c896744e26a1d0c263 (diff)
Merge pull request #2949 from Algo-devops-service/relstable3.0.1v3.0.1-stable
go-algorand 3.0.1-stable
-rw-r--r--.circleci/config.yml253
-rw-r--r--.golangci-warnings.yml5
-rw-r--r--.travis.yml13
-rw-r--r--agreement/agreementtest/simulate_test.go3
-rw-r--r--agreement/fuzzer/tests_test.go8
-rw-r--r--cmd/algofix/deadlock_test.go2
-rw-r--r--cmd/algofix/main_test.go3
-rw-r--r--cmd/algoh/blockWatcher_test.go6
-rw-r--r--cmd/algoh/blockstats_test.go3
-rw-r--r--cmd/algoh/main.go2
-rw-r--r--cmd/catchupsrv/download_test.go7
-rw-r--r--cmd/goal/account.go195
-rw-r--r--cmd/goal/accountsList.go27
-rw-r--r--cmd/goal/application.go6
-rw-r--r--cmd/goal/clerk.go8
-rw-r--r--cmd/goal/commands.go19
-rw-r--r--cmd/goal/commands_test.go2
-rw-r--r--cmd/goal/formatting_test.go2
-rw-r--r--cmd/goal/inspect_test.go2
-rw-r--r--cmd/kmd/main.go2
-rw-r--r--cmd/netgoal/commands.go4
-rw-r--r--cmd/netgoal/generate.go61
-rw-r--r--cmd/opdoc/opdoc.go43
-rw-r--r--cmd/opdoc/tmLanguage.go5
-rw-r--r--cmd/tealdbg/cdtSession_test.go10
-rw-r--r--cmd/tealdbg/cdtdbg_test.go4
-rw-r--r--cmd/tealdbg/debugger_test.go3
-rw-r--r--cmd/tealdbg/local.go16
-rw-r--r--cmd/tealdbg/localLedger.go5
-rw-r--r--cmd/tealdbg/localLedger_test.go2
-rw-r--r--cmd/tealdbg/local_test.go111
-rw-r--r--cmd/tealdbg/remote_test.go2
-rw-r--r--cmd/tealdbg/server_test.go3
-rw-r--r--cmd/tealdbg/util_test.go2
-rw-r--r--cmd/tealdbg/webdbg_test.go2
-rwxr-xr-xcmd/updater/update.sh11
-rw-r--r--cmd/updater/version_test.go2
-rw-r--r--config/consensus.go47
-rw-r--r--config/version.go4
-rw-r--r--crypto/curve25519_test.go7
-rw-r--r--crypto/encoding_test.go3
-rw-r--r--crypto/onetimesig_test.go3
-rw-r--r--crypto/secp256k1/.gitignore24
-rw-r--r--crypto/secp256k1/LICENSE31
-rw-r--r--crypto/secp256k1/curve.go299
-rw-r--r--crypto/secp256k1/dummy.go20
-rw-r--r--crypto/secp256k1/ext.h130
-rw-r--r--crypto/secp256k1/libsecp256k1/.gitignore49
-rw-r--r--crypto/secp256k1/libsecp256k1/.travis.yml69
-rw-r--r--crypto/secp256k1/libsecp256k1/COPYING19
-rw-r--r--crypto/secp256k1/libsecp256k1/Makefile.am177
-rw-r--r--crypto/secp256k1/libsecp256k1/README.md61
-rw-r--r--crypto/secp256k1/libsecp256k1/TODO3
-rw-r--r--crypto/secp256k1/libsecp256k1/autogen.sh3
-rw-r--r--crypto/secp256k1/libsecp256k1/build-aux/m4/ax_jni_include_dir.m4140
-rw-r--r--crypto/secp256k1/libsecp256k1/build-aux/m4/ax_prog_cc_for_build.m4125
-rw-r--r--crypto/secp256k1/libsecp256k1/build-aux/m4/bitcoin_secp.m469
-rw-r--r--crypto/secp256k1/libsecp256k1/configure.ac493
-rw-r--r--crypto/secp256k1/libsecp256k1/contrib/dummy.go7
-rw-r--r--crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.c150
-rw-r--r--crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.h91
-rw-r--r--crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c113
-rw-r--r--crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h90
-rw-r--r--crypto/secp256k1/libsecp256k1/dummy.go7
-rw-r--r--crypto/secp256k1/libsecp256k1/include/dummy.go7
-rw-r--r--crypto/secp256k1/libsecp256k1/include/secp256k1.h577
-rw-r--r--crypto/secp256k1/libsecp256k1/include/secp256k1_ecdh.h31
-rw-r--r--crypto/secp256k1/libsecp256k1/include/secp256k1_recovery.h110
-rw-r--r--crypto/secp256k1/libsecp256k1/libsecp256k1.pc.in13
-rw-r--r--crypto/secp256k1/libsecp256k1/obj/.gitignore0
-rw-r--r--crypto/secp256k1/libsecp256k1/sage/group_prover.sage322
-rw-r--r--crypto/secp256k1/libsecp256k1/sage/secp256k1.sage306
-rw-r--r--crypto/secp256k1/libsecp256k1/sage/weierstrass_prover.sage264
-rw-r--r--crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s919
-rw-r--r--crypto/secp256k1/libsecp256k1/src/basic-config.h32
-rw-r--r--crypto/secp256k1/libsecp256k1/src/bench.h66
-rw-r--r--crypto/secp256k1/libsecp256k1/src/bench_ecdh.c54
-rw-r--r--crypto/secp256k1/libsecp256k1/src/bench_internal.c382
-rw-r--r--crypto/secp256k1/libsecp256k1/src/bench_recover.c60
-rw-r--r--crypto/secp256k1/libsecp256k1/src/bench_schnorr_verify.c73
-rw-r--r--crypto/secp256k1/libsecp256k1/src/bench_sign.c56
-rw-r--r--crypto/secp256k1/libsecp256k1/src/bench_verify.c112
-rw-r--r--crypto/secp256k1/libsecp256k1/src/dummy.go7
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecdsa.h21
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h315
-rw-r--r--crypto/secp256k1/libsecp256k1/src/eckey.h25
-rw-r--r--crypto/secp256k1/libsecp256k1/src/eckey_impl.h99
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecmult.h31
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecmult_const.h15
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecmult_const_impl.h239
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecmult_gen.h43
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecmult_gen_impl.h210
-rw-r--r--crypto/secp256k1/libsecp256k1/src/ecmult_impl.h406
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field.h132
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_10x26.h47
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_10x26_impl.h1140
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_5x52.h47
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_5x52_asm_impl.h502
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_5x52_impl.h451
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_5x52_int128_impl.h277
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_impl.h315
-rw-r--r--crypto/secp256k1/libsecp256k1/src/gen_context.c74
-rw-r--r--crypto/secp256k1/libsecp256k1/src/group.h144
-rw-r--r--crypto/secp256k1/libsecp256k1/src/group_impl.h700
-rw-r--r--crypto/secp256k1/libsecp256k1/src/hash.h41
-rw-r--r--crypto/secp256k1/libsecp256k1/src/hash_impl.h281
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1.java446
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java226
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java45
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/Secp256k1Context.java51
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.c377
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.h119
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c15
-rw-r--r--crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.h22
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/dummy.go7
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/ecdh/Makefile.am.include8
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go7
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/ecdh/main_impl.h54
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/ecdh/tests_impl.h105
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/recovery/Makefile.am.include8
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go7
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h193
-rw-r--r--crypto/secp256k1/libsecp256k1/src/modules/recovery/tests_impl.h393
-rw-r--r--crypto/secp256k1/libsecp256k1/src/num.h74
-rw-r--r--crypto/secp256k1/libsecp256k1/src/num_gmp.h20
-rw-r--r--crypto/secp256k1/libsecp256k1/src/num_gmp_impl.h288
-rw-r--r--crypto/secp256k1/libsecp256k1/src/num_impl.h24
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar.h106
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar_4x64.h19
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar_4x64_impl.h949
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar_8x32.h19
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar_8x32_impl.h721
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar_impl.h370
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar_low.h15
-rw-r--r--crypto/secp256k1/libsecp256k1/src/scalar_low_impl.h114
-rw-r--r--crypto/secp256k1/libsecp256k1/src/secp256k1.c559
-rw-r--r--crypto/secp256k1/libsecp256k1/src/testrand.h38
-rw-r--r--crypto/secp256k1/libsecp256k1/src/testrand_impl.h110
-rw-r--r--crypto/secp256k1/libsecp256k1/src/tests.c4525
-rw-r--r--crypto/secp256k1/libsecp256k1/src/tests_exhaustive.c470
-rw-r--r--crypto/secp256k1/libsecp256k1/src/util.h113
-rw-r--r--crypto/secp256k1/panic_cb.go24
-rw-r--r--crypto/secp256k1/scalar_mult_cgo.go58
-rw-r--r--crypto/secp256k1/scalar_mult_nocgo.go13
-rw-r--r--crypto/secp256k1/secp256.go186
-rw-r--r--crypto/secp256k1/secp256_test.go238
-rw-r--r--crypto/util_test.go3
-rw-r--r--crypto/vrf_test.go3
-rw-r--r--daemon/algod/api/algod.oas2.json159
-rw-r--r--daemon/algod/api/algod.oas3.yml296
-rw-r--r--daemon/algod/api/client/restClient.go10
-rw-r--r--daemon/algod/api/server/lib/middlewares/auth_test.go3
-rw-r--r--daemon/algod/api/server/router_test.go34
-rw-r--r--daemon/algod/api/server/v1/handlers/handlers.go22
-rw-r--r--daemon/algod/api/server/v1/handlers/handlers_test.go2
-rw-r--r--daemon/algod/api/server/v2/account.go2
-rw-r--r--daemon/algod/api/server/v2/account_test.go2
-rw-r--r--daemon/algod/api/server/v2/dryrun.go104
-rw-r--r--daemon/algod/api/server/v2/dryrun_test.go292
-rw-r--r--daemon/algod/api/server/v2/generated/private/routes.go262
-rw-r--r--daemon/algod/api/server/v2/generated/private/types.go96
-rw-r--r--daemon/algod/api/server/v2/generated/routes.go342
-rw-r--r--daemon/algod/api/server/v2/generated/types.go96
-rw-r--r--daemon/algod/api/server/v2/handlers.go48
-rw-r--r--daemon/algod/api/server/v2/test/handlers_test.go57
-rw-r--r--daemon/algod/api/server/v2/utils.go84
-rw-r--r--daemon/algod/server.go2
-rw-r--r--daemon/kmd/wallet/driver/ledger_hid.go13
-rw-r--r--data/basics/msgp_gen.go735
-rw-r--r--data/basics/msgp_gen_test.go120
-rw-r--r--data/basics/teal.go74
-rw-r--r--data/basics/teal_test.go111
-rw-r--r--data/basics/userBalance.go15
-rw-r--r--data/basics/userBalance_test.go19
-rw-r--r--data/bookkeeping/block.go3
-rw-r--r--data/bookkeeping/genesis.go18
-rw-r--r--data/committee/sortition/sortition_test.go2
-rw-r--r--data/pools/transactionPool.go2
-rw-r--r--data/transactions/logic/README.md134
-rw-r--r--data/transactions/logic/README_in.md73
-rw-r--r--data/transactions/logic/TEAL_opcodes.md230
-rw-r--r--data/transactions/logic/assembler.go300
-rw-r--r--data/transactions/logic/assembler_test.go121
-rw-r--r--data/transactions/logic/backwardCompat_test.go157
-rw-r--r--data/transactions/logic/debugger.go14
-rw-r--r--data/transactions/logic/doc.go536
-rw-r--r--data/transactions/logic/doc_test.go24
-rw-r--r--data/transactions/logic/eval.go1341
-rw-r--r--data/transactions/logic/evalAppTxn_test.go436
-rw-r--r--data/transactions/logic/evalCrypto_test.go541
-rw-r--r--data/transactions/logic/evalStateful_test.go930
-rw-r--r--data/transactions/logic/eval_test.go634
-rw-r--r--data/transactions/logic/fields.go231
-rw-r--r--data/transactions/logic/fields_string.go46
-rw-r--r--data/transactions/logic/fields_test.go6
-rw-r--r--data/transactions/logic/opcodes.go35
-rw-r--r--data/transactions/logic/opcodes_test.go3
-rw-r--r--data/transactions/logictest/ledger.go783
-rw-r--r--data/transactions/msgp_gen.go633
-rw-r--r--data/transactions/msgp_gen_test.go60
-rw-r--r--data/transactions/signedtxn.go32
-rw-r--r--data/transactions/sort.go37
-rw-r--r--data/transactions/teal.go111
-rw-r--r--data/transactions/teal_test.go189
-rw-r--r--data/transactions/transaction.go14
-rw-r--r--data/transactions/verify/txn.go16
-rw-r--r--data/transactions/verify/verifiedTxnCache.go19
-rw-r--r--data/transactions/verify/verifiedTxnCache_test.go12
-rw-r--r--data/txntest/txn.go86
-rw-r--r--debug/logfilter/main_test.go2
-rw-r--r--gen/generate_test.go2
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--ledger/accountdb_test.go6
-rw-r--r--ledger/appcow.go35
-rw-r--r--ledger/appcow_test.go66
-rw-r--r--ledger/applications.go81
-rw-r--r--ledger/applications_test.go72
-rw-r--r--ledger/apply/application.go7
-rw-r--r--ledger/apply/application_test.go138
-rw-r--r--ledger/apply/apply.go5
-rw-r--r--ledger/apply/asset.go7
-rw-r--r--ledger/apply/keyreg_test.go4
-rw-r--r--ledger/apply/mockBalances_test.go5
-rw-r--r--ledger/apptxn_test.go914
-rw-r--r--ledger/cow.go21
-rw-r--r--ledger/cow_test.go6
-rw-r--r--ledger/eval.go172
-rw-r--r--ledger/eval_test.go757
-rw-r--r--ledger/ledger_test.go10
-rw-r--r--ledger/perf_test.go5
-rw-r--r--ledger/persistedaccts_list_test.go9
-rw-r--r--ledger/txtail_test.go1
-rw-r--r--libgoal/libgoal.go10
-rw-r--r--libgoal/libgoal_test.go2
-rw-r--r--logging/cyclicWriter_test.go2
-rw-r--r--logging/logBuffer_test.go7
-rw-r--r--logging/log_test.go5
-rw-r--r--logging/telemetryConfig_test.go8
-rw-r--r--logging/telemetry_test.go11
-rw-r--r--logging/telemetryhook_test.go8
-rw-r--r--logging/telemetryspec/metric_test.go2
-rw-r--r--netdeploy/remote/bootstrappedNetwork.go13
-rw-r--r--netdeploy/remote/deployedNetwork.go6
-rw-r--r--network/wsNetwork.go7
-rw-r--r--network/wsNetwork_test.go11
-rw-r--r--protocol/codec_tester.go8
-rw-r--r--protocol/consensus.go8
-rw-r--r--protocol/hash.go4
-rw-r--r--protocol/tags.go1
-rw-r--r--rpcs/blockService.go4
-rw-r--r--rpcs/txSyncer_test.go22
-rwxr-xr-xscripts/buildtools/check_tests.py116
-rwxr-xr-xscripts/check_license.sh2
-rwxr-xr-xscripts/travis/run_tests.sh7
-rw-r--r--shared/pingpong/accounts.go317
-rw-r--r--shared/pingpong/pingpong.go511
-rw-r--r--test/e2e-go/cli/algod/cleanup_test.go1
-rw-r--r--test/e2e-go/cli/algod/expect/algod_expect_test.go4
-rw-r--r--test/e2e-go/cli/algod/stdstreams_test.go1
-rw-r--r--test/e2e-go/cli/algoh/expect/algoh_expect_test.go3
-rw-r--r--test/e2e-go/cli/goal/account_test.go4
-rw-r--r--test/e2e-go/cli/goal/clerk_test.go1
-rw-r--r--test/e2e-go/cli/goal/expect/catchpointCatchupWebProxy/webproxy.go2
-rw-r--r--test/e2e-go/cli/goal/expect/goalAccountInfoTest.exp5
-rw-r--r--test/e2e-go/cli/goal/expect/goalAccountTest.exp2
-rw-r--r--test/e2e-go/cli/goal/expect/goalClerkGroupTest.exp1
-rw-r--r--test/e2e-go/cli/goal/expect/goalCmdFlagsTest.exp2
-rw-r--r--test/e2e-go/cli/goal/expect/goalDryrunRestTest.exp5
-rw-r--r--test/e2e-go/cli/goal/expect/goalExpectCommon.exp6
-rw-r--r--test/e2e-go/cli/goal/expect/goalNodeTest.exp2
-rw-r--r--test/e2e-go/cli/goal/expect/goal_expect_test.go4
-rwxr-xr-xtest/e2e-go/cli/goal/expect/tealConsensusTest.exp3
-rw-r--r--test/e2e-go/cli/goal/node_cleanup_test.go2
-rw-r--r--test/e2e-go/cli/tealdbg/expect/tealdbgTest.exp2
-rw-r--r--test/e2e-go/cli/tealdbg/expect/tealdbg_expect_test.go3
-rw-r--r--test/e2e-go/features/catchup/basicCatchup_test.go3
-rw-r--r--test/e2e-go/features/catchup/catchpointCatchup_test.go1
-rw-r--r--test/e2e-go/features/compactcert/compactcert_test.go1
-rw-r--r--test/e2e-go/features/multisig/multisig_test.go4
-rw-r--r--test/e2e-go/features/participation/onlineOfflineParticipation_test.go3
-rw-r--r--test/e2e-go/features/participation/overlappingParticipationKeys_test.go1
-rw-r--r--test/e2e-go/features/participation/participationRewards_test.go4
-rw-r--r--test/e2e-go/features/partitionRecovery/partitionRecovery_test.go29
-rw-r--r--test/e2e-go/features/teal/compile_test.go1
-rw-r--r--test/e2e-go/features/transactions/accountv2_test.go1
-rw-r--r--test/e2e-go/features/transactions/app_pages_test.go1
-rw-r--r--test/e2e-go/features/transactions/application_test.go13
-rw-r--r--test/e2e-go/features/transactions/asset_test.go7
-rw-r--r--test/e2e-go/features/transactions/close_account_test.go1
-rw-r--r--test/e2e-go/features/transactions/group_test.go3
-rw-r--r--test/e2e-go/features/transactions/lease_test.go6
-rw-r--r--test/e2e-go/features/transactions/onlineStatusChange_test.go2
-rw-r--r--test/e2e-go/features/transactions/proof_test.go1
-rw-r--r--test/e2e-go/features/transactions/sendReceive_test.go3
-rw-r--r--test/e2e-go/kmd/e2e_kmd_server_client_test.go3
-rw-r--r--test/e2e-go/kmd/e2e_kmd_sqlite_test.go2
-rw-r--r--test/e2e-go/kmd/e2e_kmd_wallet_keyops_test.go8
-rw-r--r--test/e2e-go/kmd/e2e_kmd_wallet_multisig_test.go6
-rw-r--r--test/e2e-go/kmd/e2e_kmd_wallet_test.go6
-rw-r--r--test/e2e-go/restAPI/restClient_test.go155
-rw-r--r--test/e2e-go/stress/transactions/createManyAndGoOnline_test.go1
-rw-r--r--test/e2e-go/upgrades/application_support_test.go2
-rw-r--r--test/e2e-go/upgrades/rekey_support_test.go1
-rw-r--r--test/e2e-go/upgrades/send_receive_upgrade_test.go5
-rw-r--r--test/framework/fixtures/expectFixture.go39
-rw-r--r--test/framework/fixtures/fixture.go58
-rw-r--r--test/heapwatch/client_ram_report.py105
-rw-r--r--test/heapwatch/heapWatch.py43
-rw-r--r--test/heapwatch/metrics_delta.py51
-rw-r--r--test/heapwatch/nodeHostTarget.py159
-rw-r--r--test/heapwatch/runNodeHost.py510
-rwxr-xr-xtest/scripts/e2e.sh42
-rwxr-xr-xtest/scripts/e2e_client_runner.py8
-rwxr-xr-xtest/scripts/e2e_go_tests.sh33
-rwxr-xr-xtest/scripts/e2e_subs/app-accounts.sh118
-rwxr-xr-xtest/scripts/e2e_subs/e2e-app-extra-pages.sh14
-rw-r--r--test/scripts/e2e_subs/tealprogs/app-escrow.teal166
-rw-r--r--test/testdata/deployednettemplates/recipes/bootstrappedScenario/Makefile2
-rw-r--r--test/testdata/deployednettemplates/recipes/bootstrappedScenario/boostrappedFile.json14
-rw-r--r--test/testdata/deployednettemplates/recipes/bootstrappedScenario/genesis.json3
-rw-r--r--test/testdata/deployednettemplates/recipes/scenario1/genesis.json471
-rw-r--r--test/testdata/deployednettemplates/recipes/scenario1/net.json360
-rw-r--r--test/testdata/deployednettemplates/recipes/scenario2/genesis.json1956
-rw-r--r--test/testdata/deployednettemplates/recipes/scenario2/net.json1980
-rw-r--r--test/testdata/deployednettemplates/recipes/scenario3/genesis.json49958
-rw-r--r--test/testdata/deployednettemplates/recipes/scenario3/net.json42010
-rw-r--r--util/condvar/timedwait_test.go4
328 files changed, 35613 insertions, 100226 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index c0d1c0181..a5d9637eb 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -62,6 +62,23 @@ workflows:
- /rel\/.*/
- /hotfix\/.*/
context: slack-secrets
+ - amd64_e2e_expect:
+ requires:
+ - amd64_build
+ filters:
+ branches:
+ ignore:
+ - /rel\/.*/
+ - /hotfix\/.*/
+ - amd64_e2e_expect_nightly:
+ requires:
+ - amd64_build
+ filters:
+ branches:
+ only:
+ - /rel\/.*/
+ - /hotfix\/.*/
+ context: slack-secrets
- arm64_build
- arm64_test:
requires:
@@ -114,6 +131,23 @@ workflows:
- /rel\/.*/
- /hotfix\/.*/
context: slack-secrets
+ - arm64_e2e_expect:
+ requires:
+ - arm64_build
+ filters:
+ branches:
+ ignore:
+ - /rel\/.*/
+ - /hotfix\/.*/
+ - arm64_e2e_expect_nightly:
+ requires:
+ - arm64_build
+ filters:
+ branches:
+ only:
+ - /rel\/.*/
+ - /hotfix\/.*/
+ context: slack-secrets
- mac_amd64_build
- mac_amd64_test:
requires:
@@ -166,6 +200,31 @@ workflows:
- /rel\/.*/
- /hotfix\/.*/
context: slack-secrets
+ - mac_amd64_e2e_expect:
+ requires:
+ - mac_amd64_build
+ filters:
+ branches:
+ ignore:
+ - /rel\/.*/
+ - /hotfix\/.*/
+ - mac_amd64_e2e_expect_nightly:
+ requires:
+ - mac_amd64_build
+ filters:
+ branches:
+ only:
+ - /rel\/.*/
+ - /hotfix\/.*/
+ context: slack-secrets
+ - tests_verification_job:
+ name: << matrix.job_type >>_<< matrix.job_version >>_verification
+ matrix:
+ parameters:
+ job_type: ["amd64", "arm64", "mac_amd64"]
+ job_version: ["test", "test_nightly", "integration", "integration_nightly", "e2e_expect", "e2e_expect_nightly"]
+ requires:
+ - << matrix.job_type >>_<< matrix.job_version >>
#- windows_x64_build
commands:
@@ -276,10 +335,13 @@ commands:
short_test_flag:
type: string
default: ""
+ result_path:
+ type: string
+ default: "/tmp/results"
steps:
- attach_workspace:
at: << parameters.circleci_home >>
- - run: mkdir -p /tmp/results/<< parameters.result_subdir >>
+ - run: mkdir -p << parameters.result_path >>/<< parameters.result_subdir >>/$CIRCLE_NODE_INDEX
- restore_cache:
keys:
- 'go-cache-{{ .Environment.CIRCLE_STAGE }}-'
@@ -303,12 +365,16 @@ commands:
export PARTITION_TOTAL=$CIRCLE_NODE_TOTAL
export PARTITION_ID=$CIRCLE_NODE_INDEX
export PARALLEL_FLAG="-p 1"
- gotestsum --format pkgname --junitfile /tmp/results/<< parameters.result_subdir >>/results.xml --jsonfile /tmp/results/<< parameters.result_subdir >>/testresults.json -- --tags "sqlite_unlock_notify sqlite_omit_load_extension" << parameters.short_test_flag >> -race -timeout 1h -coverprofile=coverage.txt -covermode=atomic -p 1 $PACKAGE_NAMES
+ gotestsum --format testname --junitfile << parameters.result_path >>/<< parameters.result_subdir >>/${CIRCLE_NODE_INDEX}/results.xml --jsonfile << parameters.result_path >>/<< parameters.result_subdir >>/${CIRCLE_NODE_INDEX}/testresults.json -- --tags "sqlite_unlock_notify sqlite_omit_load_extension" << parameters.short_test_flag >> -race -timeout 1h -coverprofile=coverage.txt -covermode=atomic -p 1 $PACKAGE_NAMES
- store_artifacts:
- path: /tmp/results
+ path: << parameters.result_path >>
destination: test-results
- store_test_results:
- path: /tmp/results
+ path: << parameters.result_path >>
+ - persist_to_workspace:
+ root: << parameters.result_path >>
+ paths:
+ - << parameters.result_subdir >>
- save_cache:
key: 'go-cache-{{ .Environment.CIRCLE_STAGE }}-{{ .Environment.CIRCLE_BUILD_NUM }}'
paths:
@@ -337,10 +403,13 @@ commands:
short_test_flag:
type: string
default: ""
+ result_path:
+ type: string
+ default: "/tmp/results"
steps:
- attach_workspace:
at: << parameters.circleci_home >>
- - run: mkdir -p /tmp/results/<< parameters.result_subdir >>
+ - run: mkdir -p << parameters.result_path >>/<< parameters.result_subdir >>/$CIRCLE_NODE_INDEX
- run:
name: Run integration tests
no_output_timeout: << parameters.no_output_timeout >>
@@ -358,15 +427,39 @@ commands:
scripts/buildtools/install_buildtools.sh -o "gotest.tools/gotestsum"
export ALGOTEST=1
export SHORTTEST=<< parameters.short_test_flag >>
- export TEST_RESULTS=/tmp/results/<< parameters.result_subdir >>
+ export TEST_RESULTS=<< parameters.result_path >>/<< parameters.result_subdir >>/$CIRCLE_NODE_INDEX
export PARTITION_TOTAL=$CIRCLE_NODE_TOTAL
export PARTITION_ID=$CIRCLE_NODE_INDEX
test/scripts/run_integration_tests.sh
- store_artifacts:
- path: /tmp/results
+ path: << parameters.result_path >>
destination: test-results
- store_test_results:
- path: /tmp/results
+ path: << parameters.result_path >>
+ - persist_to_workspace:
+ root: << parameters.result_path >>
+ paths:
+ - << parameters.result_subdir >>
+
+ tests_verification_command:
+ description: Check if all tests were run at least once and only once across all parallel runs
+ parameters:
+ result_path:
+ type: string
+ default: "/tmp/results"
+ result_subdir:
+ type: string
+ steps:
+ - attach_workspace:
+ at: << parameters.result_path >>
+ - run:
+ name: Check if all tests were run
+ command: |
+ cat << parameters.result_path >>/<< parameters.result_subdir >>/**/testresults.json > << parameters.result_path >>/<< parameters.result_subdir >>/combined_testresults.json
+ python3 scripts/buildtools/check_tests.py << parameters.result_path >>/<< parameters.result_subdir >>/combined_testresults.json
+ - store_artifacts:
+ path: << parameters.result_path >>/<< parameters.result_subdir >>
+ destination: << parameters.result_subdir >>/combined-test-results
jobs:
codegen_verification:
@@ -398,7 +491,7 @@ jobs:
steps:
- prepare_go
- generic_buildtest:
- result_subdir: amd64-short
+ result_subdir: amd64_test
short_test_flag: "-short"
- upload_coverage
@@ -410,7 +503,7 @@ jobs:
steps:
- prepare_go
- generic_buildtest:
- result_subdir: amd64-nightly
+ result_subdir: amd64_test_nightly
no_output_timeout: 45m
- upload_coverage
- slack/notify:
@@ -427,7 +520,7 @@ jobs:
steps:
- prepare_go
- generic_integration:
- result_subdir: amd64-integration
+ result_subdir: amd64_integration
short_test_flag: "-short"
amd64_integration_nightly:
@@ -440,7 +533,7 @@ jobs:
steps:
- prepare_go
- generic_integration:
- result_subdir: amd64-integrationnightly
+ result_subdir: amd64_integration_nightly
no_output_timeout: 45m
- slack/notify:
event: fail
@@ -455,7 +548,7 @@ jobs:
steps:
- prepare_go
- generic_integration:
- result_subdir: amd64-e2e_subs
+ result_subdir: amd64_e2e_subs
short_test_flag: "-short"
amd64_e2e_subs_nightly:
@@ -467,7 +560,36 @@ jobs:
steps:
- prepare_go
- generic_integration:
- result_subdir: amd64-e2e_subs_nightly
+ result_subdir: amd64_e2e_subs_nightly
+ no_output_timeout: 45m
+ - slack/notify:
+ event: fail
+ template: basic_fail_1
+
+ amd64_e2e_expect:
+ machine:
+ image: ubuntu-2004:202104-01
+ resource_class: medium
+ parallelism: 2
+ environment:
+ E2E_TEST_FILTER: "EXPECT"
+ steps:
+ - prepare_go
+ - generic_integration:
+ result_subdir: amd64_e2e_expect
+ short_test_flag: "-short"
+
+ amd64_e2e_expect_nightly:
+ machine:
+ image: ubuntu-2004:202104-01
+ resource_class: medium
+ parallelism: 2
+ environment:
+ E2E_TEST_FILTER: "EXPECT"
+ steps:
+ - prepare_go
+ - generic_integration:
+ result_subdir: amd64_e2e_expect_nightly
no_output_timeout: 45m
- slack/notify:
event: fail
@@ -491,7 +613,7 @@ jobs:
- checkout
- prepare_go
- generic_buildtest:
- result_subdir: arm64-short
+ result_subdir: arm64_test
short_test_flag: "-short"
- upload_coverage
@@ -504,7 +626,7 @@ jobs:
- checkout
- prepare_go
- generic_buildtest:
- result_subdir: arm64-nightly
+ result_subdir: arm64_test_nightly
no_output_timeout: 45m
- upload_coverage
- slack/notify:
@@ -522,7 +644,7 @@ jobs:
- checkout
- prepare_go
- generic_integration:
- result_subdir: arm64-integration
+ result_subdir: arm64_integration
short_test_flag: "-short"
arm64_integration_nightly:
@@ -536,7 +658,7 @@ jobs:
- checkout
- prepare_go
- generic_integration:
- result_subdir: arm64-integration-nightly
+ result_subdir: arm64_integration_nightly
no_output_timeout: 45m
- slack/notify:
event: fail
@@ -552,7 +674,7 @@ jobs:
- checkout
- prepare_go
- generic_integration:
- result_subdir: arm64-e2e_subs
+ result_subdir: arm64_e2e_subs
short_test_flag: "-short"
arm64_e2e_subs_nightly:
@@ -565,7 +687,38 @@ jobs:
- checkout
- prepare_go
- generic_integration:
- result_subdir: arm64-e2e_subs-nightly
+ result_subdir: arm64_e2e_subs_nightly
+ no_output_timeout: 45m
+ - slack/notify:
+ event: fail
+ template: basic_fail_1
+
+ arm64_e2e_expect:
+ machine:
+ image: ubuntu-2004:202101-01
+ resource_class: arm.medium
+ parallelism: 2
+ environment:
+ E2E_TEST_FILTER: "EXPECT"
+ steps:
+ - checkout
+ - prepare_go
+ - generic_integration:
+ result_subdir: arm64_e2e_expect
+ short_test_flag: "-short"
+
+ arm64_e2e_expect_nightly:
+ machine:
+ image: ubuntu-2004:202101-01
+ resource_class: arm.medium
+ parallelism: 2
+ environment:
+ E2E_TEST_FILTER: "EXPECT"
+ steps:
+ - checkout
+ - prepare_go
+ - generic_integration:
+ result_subdir: arm64_e2e_expect_nightly
no_output_timeout: 45m
- slack/notify:
event: fail
@@ -595,7 +748,7 @@ jobs:
#- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
- prepare_go
- generic_buildtest:
- result_subdir: mac-amd64-short
+ result_subdir: mac_amd64_test
circleci_home: /Users/distiller
short_test_flag: "-short"
- upload_coverage
@@ -611,7 +764,7 @@ jobs:
#- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
- prepare_go
- generic_buildtest:
- result_subdir: mac-amd64-short
+ result_subdir: mac_amd64_test_nightly
circleci_home: /Users/distiller
no_output_timeout: 45m
- upload_coverage
@@ -631,7 +784,7 @@ jobs:
#- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
- prepare_go
- generic_integration:
- result_subdir: mac-amd64-integration
+ result_subdir: mac_amd64_integration
circleci_home: /Users/distiller
short_test_flag: "-short"
@@ -647,7 +800,7 @@ jobs:
#- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
- prepare_go
- generic_integration:
- result_subdir: mac-amd64-integration-nightly
+ result_subdir: mac_amd64_integration_nightly
circleci_home: /Users/distiller
no_output_timeout: 45m
- slack/notify:
@@ -665,7 +818,7 @@ jobs:
#- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
- prepare_go
- generic_integration:
- result_subdir: mac-amd64-e2e_subs
+ result_subdir: mac_amd64_e2e_subs
circleci_home: /Users/distiller
short_test_flag: "-short"
@@ -680,7 +833,42 @@ jobs:
#- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
- prepare_go
- generic_integration:
- result_subdir: mac-amd64-e2e_subs-nightly
+ result_subdir: mac_amd64_e2e_subs_nightly
+ circleci_home: /Users/distiller
+ no_output_timeout: 45m
+ - slack/notify:
+ event: fail
+ template: basic_fail_1
+
+ mac_amd64_e2e_expect:
+ macos:
+ xcode: 12.0.1
+ resource_class: medium
+ parallelism: 2
+ environment:
+ E2E_TEST_FILTER: "EXPECT"
+ HOMEBREW_NO_AUTO_UPDATE: "true"
+ steps:
+ #- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
+ - prepare_go
+ - generic_integration:
+ result_subdir: mac_amd64_e2e_expect
+ circleci_home: /Users/distiller
+ short_test_flag: "-short"
+
+ mac_amd64_e2e_expect_nightly:
+ macos:
+ xcode: 12.0.1
+ resource_class: medium
+ parallelism: 2
+ environment:
+ E2E_TEST_FILTER: "EXPECT"
+ HOMEBREW_NO_AUTO_UPDATE: "true"
+ steps:
+ #- run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
+ - prepare_go
+ - generic_integration:
+ result_subdir: mac_amd64_e2e_expect_nightly
circleci_home: /Users/distiller
no_output_timeout: 45m
- slack/notify:
@@ -705,3 +893,16 @@ jobs:
export MAKE=mingw32-make
$msys2 scripts/travis/build_test.sh
shell: bash.exe
+ tests_verification_job:
+ docker:
+ - image: python:3.9.6-alpine
+ resource_class: small
+ parameters:
+ job_type: # job_type: ["amd64", "arm64", "mac_amd64"]
+ type: string
+ job_version: # job_version: ["test", "test_nightly", "integration", "integration_nightly", "e2e_expect", "e2e_expect_nightly"]
+ type: string
+ steps:
+ - checkout
+ - tests_verification_command:
+ result_subdir: << parameters.job_type >>_<< parameters.job_version >>
diff --git a/.golangci-warnings.yml b/.golangci-warnings.yml
index 2ee916a65..c0d9e1e38 100644
--- a/.golangci-warnings.yml
+++ b/.golangci-warnings.yml
@@ -1,7 +1,7 @@
run:
timeout: 5m
tests: true
-
+
linters:
disable-all: true
enable:
@@ -74,3 +74,6 @@ issues:
- gosimple
- unused
- partitiontest
+ - path: crypto/secp256k1/secp256_test\.go
+ linters:
+ - partitiontest
diff --git a/.travis.yml b/.travis.yml
index f36615714..bae9d60a9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -32,11 +32,6 @@ jobs:
- stage: build_pr
os: linux
- name: Ubuntu AMD64 CodeGen Verification
- script:
- - scripts/travis/codegen_verification.sh
- - # same stage, parallel job
- os: linux
name: Ubuntu AMD64 Build
script:
- scripts/travis/build_test.sh
@@ -93,11 +88,6 @@ jobs:
- stage: build_release
os: linux
- name: Ubuntu AMD64 CodeGen Verification
- script:
- - scripts/travis/codegen_verification.sh
- - # same stage, parallel job
- os: linux
name: Ubuntu AMD64 Build
script:
- ./scripts/travis/build_test.sh
@@ -217,9 +207,6 @@ before_cache:
esac
docker save -o $HOME/docker_cache/images.tar $(docker images -a -q)
-#after_success:
-# - scripts/travis/upload_coverage.sh || true
-
addons:
apt:
packages:
diff --git a/agreement/agreementtest/simulate_test.go b/agreement/agreementtest/simulate_test.go
index c4ccb69b1..086349b82 100644
--- a/agreement/agreementtest/simulate_test.go
+++ b/agreement/agreementtest/simulate_test.go
@@ -37,6 +37,7 @@ import (
"github.com/algorand/go-algorand/data/committee"
"github.com/algorand/go-algorand/logging"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/algorand/go-algorand/util/db"
)
@@ -294,6 +295,8 @@ func (l *testLedger) EnsureDigest(c agreement.Certificate, verifier *agreement.A
}
func TestSimulate(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
f, _ := os.Create(t.Name() + ".log")
logging.Base().SetJSONFormatter()
logging.Base().SetOutput(f)
diff --git a/agreement/fuzzer/tests_test.go b/agreement/fuzzer/tests_test.go
index f05852e39..22e1cc049 100644
--- a/agreement/fuzzer/tests_test.go
+++ b/agreement/fuzzer/tests_test.go
@@ -25,6 +25,7 @@ import (
"math"
"math/rand"
"os"
+
//ossignal "os/signal"
"path/filepath"
//"runtime/pprof"
@@ -36,6 +37,7 @@ import (
"github.com/algorand/go-algorand/logging"
"github.com/algorand/go-deadlock"
+
//"github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/test/partitiontest"
)
@@ -105,6 +107,8 @@ func testConfig(t *testing.T, config NetworkConfig) (network *Network) {
*/
func TestCircularNetworkTopology(t *testing.T) {
+ // partitiontest.PartitionTest(t)
+ // Causes double partition, so commented out on purpose
var nodeCounts []int
if testing.Short() {
nodeCounts = []int{4, 6}
@@ -422,6 +426,8 @@ type FuzzerTestFile struct {
}
func TestFuzzer(t *testing.T) {
+ // partitiontest.PartitionTest(t)
+ // Causes double partition, so commented out on purpose
jsonFiles := make(map[string]string) // map json test to full json file name.
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
if strings.HasSuffix(info.Name(), ".json") {
@@ -475,6 +481,8 @@ func TestFuzzer(t *testing.T) {
}
func TestNetworkBandwidth(t *testing.T) {
+ // partitiontest.PartitionTest(t)
+ // Causes double partition, so commented out on purpose
// travis rans out of memory when we get a high nodes count.. so we'll skip it for now.
if testing.Short() {
t.Skip()
diff --git a/cmd/algofix/deadlock_test.go b/cmd/algofix/deadlock_test.go
index f1f3aa1b0..2c2111585 100644
--- a/cmd/algofix/deadlock_test.go
+++ b/cmd/algofix/deadlock_test.go
@@ -25,6 +25,7 @@ import (
"strings"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -130,6 +131,7 @@ func main() {
`
func TestDeadlockRewrite(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Run("simple", func(t *testing.T) { testDeadlock(t, deadlockSimpleSrc, deadlockSimpleDest) })
t.Run("onoff", func(t *testing.T) { testDeadlock(t, deadlockTestSrc, deadlockTestFin) })
}
diff --git a/cmd/algofix/main_test.go b/cmd/algofix/main_test.go
index c2ace28ca..fad46ca7c 100644
--- a/cmd/algofix/main_test.go
+++ b/cmd/algofix/main_test.go
@@ -9,6 +9,8 @@ import (
"go/parser"
"strings"
"testing"
+
+ "github.com/algorand/go-algorand/test/partitiontest"
)
type testCase struct {
@@ -73,6 +75,7 @@ func parseFixPrint(t *testing.T, fn func(*ast.File) bool, desc, in string, mustB
}
func TestRewrite(t *testing.T) {
+ partitiontest.PartitionTest(t)
for _, tt := range testCases {
// Apply fix: should get tt.Out.
out, fixed, ok := parseFixPrint(t, tt.Fn, tt.Name, tt.In, true)
diff --git a/cmd/algoh/blockWatcher_test.go b/cmd/algoh/blockWatcher_test.go
index 5aeec2064..8ed724c20 100644
--- a/cmd/algoh/blockWatcher_test.go
+++ b/cmd/algoh/blockWatcher_test.go
@@ -23,6 +23,7 @@ import (
"time"
"github.com/algorand/go-algorand/daemon/algod/api/spec/v1"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -38,6 +39,7 @@ func bw(client Client) *blockWatcher {
// When the status continues to report block 300
// Then blockIfStalled will block until the next block is reported
func TestBlockIfStalled(t *testing.T) {
+ partitiontest.PartitionTest(t)
client := mockClient{
error: []error{nil, nil, nil},
status: makeNodeStatuses(300, 300, 300, 301),
@@ -59,6 +61,7 @@ func TestBlockIfStalled(t *testing.T) {
// When the status continues to increase quickly
// Then blockIfCatchup will block until a block is reported twice
func TestBlockIfCatchup(t *testing.T) {
+ partitiontest.PartitionTest(t)
client := mockClient{
error: []error{nil, nil, nil},
status: makeNodeStatuses(301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 310),
@@ -80,6 +83,7 @@ func TestBlockIfCatchup(t *testing.T) {
// When the status is not changing quickly
// Then blockIfCatchup will return after the first status call.
func TestBlockIfCaughtUp(t *testing.T) {
+ partitiontest.PartitionTest(t)
client := mockClient{
error: []error{nil, nil, nil},
status: makeNodeStatuses(300),
@@ -111,6 +115,7 @@ func (l *testlistener) onBlock(block v1.Block) {
}
func TestE2E(t *testing.T) {
+ partitiontest.PartitionTest(t)
client := makeMockClient(
[]error{nil, nil, nil},
makeNodeStatuses(300, 301, 302, 302, 302, 302, 302, 302, 310, 320, 321, 321, 321, 322),
@@ -159,6 +164,7 @@ func TestE2E(t *testing.T) {
}
func TestAbortDuringStall(t *testing.T) {
+ partitiontest.PartitionTest(t)
client := makeMockClient(
[]error{},
makeNodeStatuses(300),
diff --git a/cmd/algoh/blockstats_test.go b/cmd/algoh/blockstats_test.go
index e96fffe6b..d1b95003b 100644
--- a/cmd/algoh/blockstats_test.go
+++ b/cmd/algoh/blockstats_test.go
@@ -22,6 +22,7 @@ import (
"github.com/algorand/go-algorand/daemon/algod/api/spec/v1"
"github.com/algorand/go-algorand/logging/telemetryspec"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -42,6 +43,7 @@ func (mes *MockEventSender) EventWithDetails(category telemetryspec.Category, id
}
func TestConsecutiveBlocks(t *testing.T) {
+ partitiontest.PartitionTest(t)
sender := MockEventSender{}
bs := blockstats{log: &sender}
@@ -57,6 +59,7 @@ func TestConsecutiveBlocks(t *testing.T) {
}
func TestAgreementTime(t *testing.T) {
+ partitiontest.PartitionTest(t)
sleepTime := 50 * time.Millisecond
testAttempts := 0
const maxTestAttempts = 10
diff --git a/cmd/algoh/main.go b/cmd/algoh/main.go
index ef4afbb13..5f4869e22 100644
--- a/cmd/algoh/main.go
+++ b/cmd/algoh/main.go
@@ -165,7 +165,7 @@ func main() {
}()
// Handle signals cleanly
- c := make(chan os.Signal)
+ c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
signal.Ignore(syscall.SIGHUP)
go func() {
diff --git a/cmd/catchupsrv/download_test.go b/cmd/catchupsrv/download_test.go
index 1a952cebe..fa65f05fb 100644
--- a/cmd/catchupsrv/download_test.go
+++ b/cmd/catchupsrv/download_test.go
@@ -17,11 +17,14 @@
package main
import (
- "github.com/stretchr/testify/require"
"testing"
+
+ "github.com/algorand/go-algorand/test/partitiontest"
+ "github.com/stretchr/testify/require"
)
func TestBlockToPath(t *testing.T) {
+ partitiontest.PartitionTest(t)
require.Equal(t, "00/00/000000", blockToPath(0))
require.Equal(t, "00/00/0000rs", blockToPath(1000))
require.Equal(t, "05/yc/05ycfo", blockToPath(10000500))
@@ -29,6 +32,7 @@ func TestBlockToPath(t *testing.T) {
}
func TestBlockToFileName(t *testing.T) {
+ partitiontest.PartitionTest(t)
require.Equal(t, "000000", blockToFileName(0))
require.Equal(t, "0000rs", blockToFileName(1000))
require.Equal(t, "05ycfo", blockToFileName(10000500))
@@ -36,6 +40,7 @@ func TestBlockToFileName(t *testing.T) {
}
func TestBlockToString(t *testing.T) {
+ partitiontest.PartitionTest(t)
require.Equal(t, "0", blockToString(0))
require.Equal(t, "rs", blockToString(1000))
require.Equal(t, "5ycfo", blockToString(10000500))
diff --git a/cmd/goal/account.go b/cmd/goal/account.go
index f4c36fcc5..d1bf2f6cf 100644
--- a/cmd/goal/account.go
+++ b/cmd/goal/account.go
@@ -31,7 +31,7 @@ import (
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/crypto/passphrase"
- v1 "github.com/algorand/go-algorand/daemon/algod/api/spec/v1"
+ generatedV2 "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated"
algodAcct "github.com/algorand/go-algorand/data/account"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
@@ -476,7 +476,7 @@ var listCmd = &cobra.Command{
// For each address, request information about it from algod
for _, addr := range addrs {
- response, _ := client.AccountInformation(addr.Addr)
+ response, _ := client.AccountInformationV2(addr.Addr)
// it's okay to proceed without algod info
// Display this information to the user
@@ -512,7 +512,7 @@ var infoCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
dataDir := ensureSingleDataDir()
client := ensureAlgodClient(dataDir)
- response, err := client.AccountInformation(accountAddress)
+ response, err := client.AccountInformationV2(accountAddress)
if err != nil {
reportErrorf(errorRequestFail, err)
}
@@ -524,36 +524,50 @@ var infoCmd = &cobra.Command{
},
}
-func sortUint64Slice(slice []uint64) {
- sort.Slice(slice, func(i, j int) bool {
- return slice[i] < slice[j]
- })
-}
-
-func printAccountInfo(client libgoal.Client, address string, account v1.Account) bool {
- createdAssets := []uint64{}
- for id := range account.AssetParams {
- createdAssets = append(createdAssets, id)
+func printAccountInfo(client libgoal.Client, address string, account generatedV2.Account) bool {
+ var createdAssets []generatedV2.Asset
+ if account.CreatedAssets != nil {
+ createdAssets = make([]generatedV2.Asset, len(*account.CreatedAssets))
+ for i, asset := range *account.CreatedAssets {
+ createdAssets[i] = asset
+ }
+ sort.Slice(createdAssets, func(i, j int) bool {
+ return createdAssets[i].Index < createdAssets[j].Index
+ })
}
- sortUint64Slice(createdAssets)
- heldAssets := []uint64{}
- for id := range account.Assets {
- heldAssets = append(heldAssets, id)
+ var heldAssets []generatedV2.AssetHolding
+ if account.Assets != nil {
+ heldAssets = make([]generatedV2.AssetHolding, len(*account.Assets))
+ for i, assetHolding := range *account.Assets {
+ heldAssets[i] = assetHolding
+ }
+ sort.Slice(heldAssets, func(i, j int) bool {
+ return heldAssets[i].AssetId < heldAssets[j].AssetId
+ })
}
- sortUint64Slice(heldAssets)
- createdApps := []uint64{}
- for id := range account.AppParams {
- createdApps = append(createdApps, id)
+ var createdApps []generatedV2.Application
+ if account.CreatedApps != nil {
+ createdApps = make([]generatedV2.Application, len(*account.CreatedApps))
+ for i, app := range *account.CreatedApps {
+ createdApps[i] = app
+ }
+ sort.Slice(createdApps, func(i, j int) bool {
+ return createdApps[i].Id < createdApps[j].Id
+ })
}
- sortUint64Slice(createdApps)
- optedInApps := []uint64{}
- for id := range account.AppLocalStates {
- optedInApps = append(optedInApps, id)
+ var optedInApps []generatedV2.ApplicationLocalState
+ if account.AppsLocalState != nil {
+ optedInApps = make([]generatedV2.ApplicationLocalState, len(*account.AppsLocalState))
+ for i, appLocalState := range *account.AppsLocalState {
+ optedInApps[i] = appLocalState
+ }
+ sort.Slice(optedInApps, func(i, j int) bool {
+ return optedInApps[i].Id < optedInApps[j].Id
+ })
}
- sortUint64Slice(optedInApps)
report := &strings.Builder{}
errorReport := &strings.Builder{}
@@ -563,103 +577,116 @@ func printAccountInfo(client libgoal.Client, address string, account v1.Account)
if len(createdAssets) == 0 {
fmt.Fprintln(report, "\t<none>")
}
- for _, id := range createdAssets {
- assetParams := account.AssetParams[id]
-
- name := assetParams.AssetName
- if len(name) == 0 {
- name = "<unnamed>"
+ for _, createdAsset := range createdAssets {
+ name := "<unnamed>"
+ if createdAsset.Params.Name != nil {
+ _, name = unicodePrintable(*createdAsset.Params.Name)
}
- _, name = unicodePrintable(name)
- units := assetParams.UnitName
- if len(units) == 0 {
- units = "units"
+
+ units := "units"
+ if createdAsset.Params.UnitName != nil {
+ _, units = unicodePrintable(*createdAsset.Params.UnitName)
}
- _, units = unicodePrintable(units)
- total := assetDecimalsFmt(assetParams.Total, assetParams.Decimals)
+
+ total := assetDecimalsFmt(createdAsset.Params.Total, uint32(createdAsset.Params.Decimals))
+
url := ""
- if len(assetParams.URL) != 0 {
- url = fmt.Sprintf(", %s", assetParams.URL)
+ if createdAsset.Params.Url != nil {
+ _, safeURL := unicodePrintable(*createdAsset.Params.Url)
+ url = fmt.Sprintf(", %s", safeURL)
}
- fmt.Fprintf(report, "\tID %d, %s, supply %s %s%s\n", id, name, total, units, url)
+ fmt.Fprintf(report, "\tID %d, %s, supply %s %s%s\n", createdAsset.Index, name, total, units, url)
}
fmt.Fprintln(report, "Held Assets:")
if len(heldAssets) == 0 {
fmt.Fprintln(report, "\t<none>")
}
- for _, id := range heldAssets {
- assetHolding := account.Assets[id]
- assetParams, err := client.AssetInformationV2(id)
+ for _, assetHolding := range heldAssets {
+ assetParams, err := client.AssetInformationV2(assetHolding.AssetId)
if err != nil {
hasError = true
- fmt.Fprintf(errorReport, "Error: Unable to retrieve asset information for asset %d referred to by account %s: %v\n", id, address, err)
- fmt.Fprintf(report, "\tID %d, error\n", id)
+ fmt.Fprintf(errorReport, "Error: Unable to retrieve asset information for asset %d referred to by account %s: %v\n", assetHolding.AssetId, address, err)
+ fmt.Fprintf(report, "\tID %d, error\n", assetHolding.AssetId)
}
amount := assetDecimalsFmt(assetHolding.Amount, uint32(assetParams.Params.Decimals))
- var assetName string
+ assetName := "<unnamed>"
if assetParams.Params.Name != nil {
- assetName = *assetParams.Params.Name
- }
- if len(assetName) == 0 {
- assetName = "<unnamed>"
+ _, assetName = unicodePrintable(*assetParams.Params.Name)
}
- _, assetName = unicodePrintable(assetName)
- var unitName string
+ unitName := "units"
if assetParams.Params.UnitName != nil {
- unitName = *assetParams.Params.UnitName
+ _, unitName = unicodePrintable(*assetParams.Params.UnitName)
}
- if len(unitName) == 0 {
- unitName = "units"
- }
- _, unitName = unicodePrintable(unitName)
frozen := ""
- if assetHolding.Frozen {
+ if assetHolding.IsFrozen {
frozen = " (frozen)"
}
- fmt.Fprintf(report, "\tID %d, %s, balance %s %s%s\n", id, assetName, amount, unitName, frozen)
+ fmt.Fprintf(report, "\tID %d, %s, balance %s %s%s\n", assetHolding.AssetId, assetName, amount, unitName, frozen)
}
fmt.Fprintln(report, "Created Apps:")
if len(createdApps) == 0 {
fmt.Fprintln(report, "\t<none>")
}
- for _, id := range createdApps {
- appParams := account.AppParams[id]
- usedInts := 0
- usedBytes := 0
- for _, value := range appParams.GlobalState {
- if value.Type == "u" {
- usedInts++
- } else {
- usedBytes++
+ for _, app := range createdApps {
+ allocatedInts := uint64(0)
+ allocatedBytes := uint64(0)
+ if app.Params.GlobalStateSchema != nil {
+ allocatedInts = app.Params.GlobalStateSchema.NumUint
+ allocatedBytes = app.Params.GlobalStateSchema.NumByteSlice
+ }
+
+ usedInts := uint64(0)
+ usedBytes := uint64(0)
+ if app.Params.GlobalState != nil {
+ for _, value := range *app.Params.GlobalState {
+ if basics.TealType(value.Value.Type) == basics.TealUintType {
+ usedInts++
+ } else {
+ usedBytes++
+ }
}
}
- fmt.Fprintf(report, "\tID %d, global state used %d/%d uints, %d/%d byte slices\n", id, usedInts, appParams.GlobalStateSchema.NumUint, usedBytes, appParams.GlobalStateSchema.NumByteSlice)
+
+ extraPages := ""
+ if app.Params.ExtraProgramPages != nil && *app.Params.ExtraProgramPages != 0 {
+ plural := ""
+ if *app.Params.ExtraProgramPages != 1 {
+ plural = "s"
+ }
+ extraPages = fmt.Sprintf(", %d extra page%s", *app.Params.ExtraProgramPages, plural)
+ }
+
+ fmt.Fprintf(report, "\tID %d%s, global state used %d/%d uints, %d/%d byte slices\n", app.Id, extraPages, usedInts, allocatedInts, usedBytes, allocatedBytes)
}
fmt.Fprintln(report, "Opted In Apps:")
if len(optedInApps) == 0 {
fmt.Fprintln(report, "\t<none>")
}
- for _, id := range optedInApps {
- localState := account.AppLocalStates[id]
- usedInts := 0
- usedBytes := 0
- for _, value := range localState.KeyValue {
- if value.Type == "u" {
- usedInts++
- } else {
- usedBytes++
+ for _, localState := range optedInApps {
+ allocatedInts := localState.Schema.NumUint
+ allocatedBytes := localState.Schema.NumByteSlice
+
+ usedInts := uint64(0)
+ usedBytes := uint64(0)
+ if localState.KeyValue != nil {
+ for _, value := range *localState.KeyValue {
+ if basics.TealType(value.Value.Type) == basics.TealUintType {
+ usedInts++
+ } else {
+ usedBytes++
+ }
}
}
- fmt.Fprintf(report, "\tID %d, local state used %d/%d uints, %d/%d byte slices\n", id, usedInts, localState.Schema.NumUint, usedBytes, localState.Schema.NumByteSlice)
+ fmt.Fprintf(report, "\tID %d, local state used %d/%d uints, %d/%d byte slices\n", localState.Id, usedInts, allocatedInts, usedBytes, allocatedBytes)
}
if hasError {
@@ -750,7 +777,13 @@ var changeOnlineCmd = &cobra.Command{
}
dataDir := ensureSingleDataDir()
- client := ensureFullClient(dataDir)
+ var client libgoal.Client
+ if statusChangeTxFile != "" {
+ // writing out a txn, don't need kmd
+ client = ensureAlgodClient(dataDir)
+ } else {
+ client = ensureFullClient(dataDir)
+ }
var part *algodAcct.Participation
if partKeyFile != "" {
diff --git a/cmd/goal/accountsList.go b/cmd/goal/accountsList.go
index bf58c6f8e..0fa2f4bff 100644
--- a/cmd/goal/accountsList.go
+++ b/cmd/goal/accountsList.go
@@ -25,7 +25,7 @@ import (
"path/filepath"
"strings"
- "github.com/algorand/go-algorand/daemon/algod/api/spec/v1"
+ generatedV2 "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/libgoal"
)
@@ -205,7 +205,7 @@ func (accountList *AccountsList) loadList() {
}
}
-func (accountList *AccountsList) outputAccount(addr string, acctInfo v1.Account, multisigInfo *libgoal.MultisigInfo) {
+func (accountList *AccountsList) outputAccount(addr string, acctInfo generatedV2.Account, multisigInfo *libgoal.MultisigInfo) {
if acctInfo.Address == "" {
fmt.Printf("[n/a]\t%s\t%s\t[n/a] microAlgos", accountList.getNameByAddress(addr), addr)
} else {
@@ -225,25 +225,28 @@ func (accountList *AccountsList) outputAccount(addr string, acctInfo v1.Account,
if multisigInfo != nil {
fmt.Printf("\t[%d/%d multisig]", multisigInfo.Threshold, len(multisigInfo.PKs))
}
- if len(acctInfo.AssetParams) > 0 {
+ if acctInfo.CreatedAssets != nil && len(*acctInfo.CreatedAssets) > 0 {
var out []string
- for curid, params := range acctInfo.AssetParams {
- _, unitName := unicodePrintable(params.UnitName)
- out = append(out, fmt.Sprintf("%d (%d %s)", curid, params.Total, unitName))
+ for _, asset := range *acctInfo.CreatedAssets {
+ var unitName string
+ if asset.Params.UnitName != nil {
+ _, unitName = unicodePrintable(*asset.Params.UnitName)
+ }
+ out = append(out, fmt.Sprintf("%d (%d %s)", asset.Index, asset.Params.Total, unitName))
}
fmt.Printf("\t[created asset IDs: %s]", strings.Join(out, ", "))
}
- if len(acctInfo.AppParams) > 0 {
+ if acctInfo.CreatedApps != nil && len(*acctInfo.CreatedApps) > 0 {
var out []string
- for aid := range acctInfo.AppParams {
- out = append(out, fmt.Sprintf("%d", aid))
+ for _, app := range *acctInfo.CreatedApps {
+ out = append(out, fmt.Sprintf("%d", app.Id))
}
fmt.Printf("\t[created app IDs: %s]", strings.Join(out, ", "))
}
- if len(acctInfo.AppLocalStates) > 0 {
+ if acctInfo.AppsLocalState != nil && len(*acctInfo.AppsLocalState) > 0 {
var out []string
- for aid := range acctInfo.AppLocalStates {
- out = append(out, fmt.Sprintf("%d", aid))
+ for _, app := range *acctInfo.AppsLocalState {
+ out = append(out, fmt.Sprintf("%d", app.Id))
}
fmt.Printf("\t[opted in app IDs: %s]", strings.Join(out, ", "))
}
diff --git a/cmd/goal/application.go b/cmd/goal/application.go
index a3204020a..5a1bed482 100644
--- a/cmd/goal/application.go
+++ b/cmd/goal/application.go
@@ -1014,12 +1014,18 @@ var infoAppCmd = &cobra.Command{
gsch := params.GlobalStateSchema
lsch := params.LocalStateSchema
+ epp := params.ExtraProgramPages
fmt.Printf("Application ID: %d\n", appIdx)
+ fmt.Printf("Application account: %v\n", basics.AppIndex(appIdx).Address())
fmt.Printf("Creator: %v\n", params.Creator)
fmt.Printf("Approval hash: %v\n", basics.Address(logic.HashProgram(params.ApprovalProgram)))
fmt.Printf("Clear hash: %v\n", basics.Address(logic.HashProgram(params.ClearStateProgram)))
+ if epp != nil {
+ fmt.Printf("Extra program pages: %d\n", *epp)
+ }
+
if gsch != nil {
fmt.Printf("Max global byteslices: %d\n", gsch.NumByteSlice)
fmt.Printf("Max global integers: %d\n", gsch.NumUint)
diff --git a/cmd/goal/clerk.go b/cmd/goal/clerk.go
index cb41ff4e7..571c4d1a4 100644
--- a/cmd/goal/clerk.go
+++ b/cmd/goal/clerk.go
@@ -1087,7 +1087,7 @@ var dryrunCmd = &cobra.Command{
if uint64(txn.Lsig.Len()) > params.LogicSigMaxSize {
reportErrorf("program size too large: %d > %d", len(txn.Lsig.Logic), params.LogicSigMaxSize)
}
- ep := logic.EvalParams{Txn: &txn, Proto: &params, GroupIndex: i, TxnGroup: txgroup}
+ ep := logic.EvalParams{Txn: &txn, Proto: &params, GroupIndex: uint64(i), TxnGroup: txgroup}
err := logic.Check(txn.Lsig.Logic, ep)
if err != nil {
reportErrorf("program failed Check: %s", err)
@@ -1095,7 +1095,7 @@ var dryrunCmd = &cobra.Command{
sb := strings.Builder{}
ep = logic.EvalParams{
Txn: &txn,
- GroupIndex: i,
+ GroupIndex: uint64(i),
Proto: &params,
Trace: &sb,
TxnGroup: txgroup,
@@ -1163,6 +1163,10 @@ var dryrunRemoteCmd = &cobra.Command{
trace = *txnResult.LogicSigTrace
}
}
+ if txnResult.Cost != nil {
+ fmt.Fprintf(os.Stdout, "tx[%d] cost: %d\n", i, *txnResult.Cost)
+ }
+
fmt.Fprintf(os.Stdout, "tx[%d] messages:\n", i)
for _, msg := range msgs {
fmt.Fprintf(os.Stdout, "%s\n", msg)
diff --git a/cmd/goal/commands.go b/cmd/goal/commands.go
index 80977a4fb..bede5a309 100644
--- a/cmd/goal/commands.go
+++ b/cmd/goal/commands.go
@@ -371,17 +371,25 @@ func ensureFullClient(dataDir string) libgoal.Client {
return ensureGoalClient(dataDir, libgoal.FullClient)
}
-func ensureGoalClient(dataDir string, clientType libgoal.ClientType) libgoal.Client {
+func getGoalClient(dataDir string, clientType libgoal.ClientType) (client libgoal.Client, err error) {
clientConfig := libgoal.ClientConfig{
AlgodDataDir: dataDir,
KMDDataDir: resolveKmdDataDir(dataDir),
CacheDir: ensureCacheDir(dataDir),
}
- client, err := libgoal.MakeClientFromConfig(clientConfig, clientType)
+ client, err = libgoal.MakeClientFromConfig(clientConfig, clientType)
if err != nil {
- reportErrorf(errorNodeStatus, err)
+ return
}
client.SetAPIVersionAffinity(algodclient.APIVersionV2, kmdclient.APIVersionV1)
+ return
+}
+
+func ensureGoalClient(dataDir string, clientType libgoal.ClientType) libgoal.Client {
+ client, err := getGoalClient(dataDir, clientType)
+ if err != nil {
+ reportErrorf(errorNodeStatus, err)
+ }
return client
}
@@ -404,7 +412,10 @@ func getWalletHandleMaybePassword(dataDir string, walletName string, getPassword
var dup bool
accountList := makeAccountsList(dataDir)
- kmd := ensureKmdClient(dataDir)
+ kmd, err := getGoalClient(dataDir, libgoal.KmdClient)
+ if err != nil {
+ return nil, nil, fmt.Errorf("kmd client init error: %w", err)
+ }
// If the user didn't manually specify a wallet, use the default wallet ID
if walletName == "" {
diff --git a/cmd/goal/commands_test.go b/cmd/goal/commands_test.go
index e99760592..26a621ea2 100644
--- a/cmd/goal/commands_test.go
+++ b/cmd/goal/commands_test.go
@@ -20,10 +20,12 @@ import (
"os"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestEnsureDataDirReturnsWhenDataDirIsProvided(t *testing.T) {
+ partitiontest.PartitionTest(t)
expectedDir := "~/.algorand"
os.Setenv("ALGORAND_DATA", expectedDir)
actualDir := ensureFirstDataDir()
diff --git a/cmd/goal/formatting_test.go b/cmd/goal/formatting_test.go
index e1fe731dc..d5f216fd0 100644
--- a/cmd/goal/formatting_test.go
+++ b/cmd/goal/formatting_test.go
@@ -19,10 +19,12 @@ package main
import (
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestUnicodePrintable(t *testing.T) {
+ partitiontest.PartitionTest(t)
testUnicodePrintableStrings := []struct {
testString string
isPrintable bool
diff --git a/cmd/goal/inspect_test.go b/cmd/goal/inspect_test.go
index 2068a3a92..564f7611b 100644
--- a/cmd/goal/inspect_test.go
+++ b/cmd/goal/inspect_test.go
@@ -25,9 +25,11 @@ import (
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func TestInspect(t *testing.T) {
+ partitiontest.PartitionTest(t)
var err error
var empty transactions.SignedTxn
diff --git a/cmd/kmd/main.go b/cmd/kmd/main.go
index 4d30c9303..34315094f 100644
--- a/cmd/kmd/main.go
+++ b/cmd/kmd/main.go
@@ -88,7 +88,7 @@ func runKmd(dataDir string, timeoutSecs uint64) {
tryMlockall(log)
// Create a "kill" channel to allow the server to shut down gracefully
- kill := make(chan os.Signal)
+ kill := make(chan os.Signal, 1)
// Timeouts can also send on the kill channel; because signal.Notify
// will not block, this shouldn't cause an issue. From docs: "Package
diff --git a/cmd/netgoal/commands.go b/cmd/netgoal/commands.go
index 5fc2dcdbe..5ae90dedf 100644
--- a/cmd/netgoal/commands.go
+++ b/cmd/netgoal/commands.go
@@ -20,6 +20,8 @@ import (
"fmt"
"os"
+ "github.com/algorand/go-deadlock"
+
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
@@ -32,6 +34,8 @@ func init() {
log.Out = os.Stdout
log.SetLevel(logrus.DebugLevel)
+ // disable the deadlock detection for this tool.
+ deadlock.Opts.Disable = true
}
var rootCmd = &cobra.Command{
diff --git a/cmd/netgoal/generate.go b/cmd/netgoal/generate.go
index 015fb4207..7cd417621 100644
--- a/cmd/netgoal/generate.go
+++ b/cmd/netgoal/generate.go
@@ -50,6 +50,7 @@ var roundTxnCount uint64
var accountsCount uint64
var assetsCount uint64
var applicationCount uint64
+var balRange []string
func init() {
rootCmd.AddCommand(generateCmd)
@@ -73,6 +74,7 @@ func init() {
generateCmd.Flags().Uint64VarP(&accountsCount, "naccounts", "", 31, "Account count")
generateCmd.Flags().Uint64VarP(&assetsCount, "nassets", "", 5, "Asset count")
generateCmd.Flags().Uint64VarP(&applicationCount, "napps", "", 7, "Application Count")
+ generateCmd.Flags().StringArrayVar(&balRange, "bal", []string{}, "Application Count")
longParts := make([]string, len(generateTemplateLines)+1)
longParts[0] = generateCmd.Long
@@ -174,8 +176,10 @@ template modes for -t:`,
if sourceWallet == "" {
reportErrorf("must specify source wallet name with -wname.")
}
-
- err = generateAccountsLoadingFileTemplate(outputFilename, sourceWallet, rounds, roundTxnCount, accountsCount, assetsCount, applicationCount)
+ if len(balRange) < 2 {
+ reportErrorf("must specify account balance range with --bal.")
+ }
+ err = generateAccountsLoadingFileTemplate(outputFilename, sourceWallet, rounds, roundTxnCount, accountsCount, assetsCount, applicationCount, balRange)
default:
reportInfoln("Please specify a valid template name.\nSupported templates are:")
for _, line := range generateTemplateLines {
@@ -281,7 +285,7 @@ func generateNetworkGoalTemplate(templateFilename string, wallets, relays, nodes
}
if npnHosts > 0 {
- for walletIndex < wallets {
+ for walletIndex < npnHosts {
for nodei, node := range template.Nodes {
if node.Name[0:4] != "nonP" {
continue
@@ -292,11 +296,11 @@ func generateNetworkGoalTemplate(templateFilename string, wallets, relays, nodes
}
template.Nodes[nodei].Wallets = append(template.Nodes[nodei].Wallets, wallet)
walletIndex++
- if walletIndex >= wallets {
+ if walletIndex >= npnHosts {
break
}
}
- if walletIndex >= wallets {
+ if walletIndex >= npnHosts {
break
}
}
@@ -395,9 +399,10 @@ func generateNetworkTemplate(templateFilename string, wallets, relays, nodeHosts
}
}
+ // one wallet per NPN host to concentrate stake
if npnHosts > 0 {
walletIndex := 0
- for walletIndex < wallets {
+ for walletIndex < npnHosts {
for hosti := range network.Hosts {
for nodei, node := range network.Hosts[hosti].Nodes {
if node.Name[0:4] != "nonP" {
@@ -409,11 +414,11 @@ func generateNetworkTemplate(templateFilename string, wallets, relays, nodeHosts
}
network.Hosts[hosti].Nodes[nodei].Wallets = append(network.Hosts[hosti].Nodes[nodei].Wallets, wallet)
walletIndex++
- if walletIndex >= wallets {
+ if walletIndex >= npnHosts {
break
}
}
- if walletIndex >= wallets {
+ if walletIndex >= npnHosts {
break
}
}
@@ -461,19 +466,29 @@ func saveGoalTemplateToDisk(template netdeploy.NetworkTemplate, filename string)
}
func generateWalletGenesisData(wallets, npnHosts int) gen.GenesisData {
+ ratZero := big.NewRat(int64(0), int64(1))
+ ratHundred := big.NewRat(int64(100), int64(1))
data := gen.DefaultGenesis
+ totalWallets := wallets + npnHosts
+ data.Wallets = make([]gen.WalletData, totalWallets)
+ participatingNodeStake := big.NewRat(int64(100), int64(wallets))
+ nonParticipatingNodeStake := ratZero
if npnHosts > 0 {
- wallets = 2 * wallets
+ // split participating an non participating stake evenly
+ participatingNodeStake = big.NewRat(int64(50), int64(wallets))
+ nonParticipatingNodeStake = big.NewRat(int64(50), int64(npnHosts))
}
- data.Wallets = make([]gen.WalletData, wallets)
- stake := big.NewRat(int64(100), int64(wallets))
-
- ratZero := big.NewRat(int64(0), int64(1))
- ratHundred := big.NewRat(int64(100), int64(1))
+ stake := ratZero
stakeSum := new(big.Rat).Set(ratZero)
- for i := 0; i < wallets; i++ {
- if i == (wallets - 1) {
+ for i := 0; i < totalWallets; i++ {
+
+ if i < wallets {
+ stake = participatingNodeStake
+ } else {
+ stake = nonParticipatingNodeStake
+ }
+ if i == (totalWallets - 1) {
// use the last wallet to workaround roundoff and get back to 1.0
stake = stake.Sub(new(big.Rat).Set(ratHundred), stakeSum)
}
@@ -482,7 +497,7 @@ func generateWalletGenesisData(wallets, npnHosts int) gen.GenesisData {
Name: "Wallet" + strconv.Itoa(i+1), // Wallet names are 1-based for this template
Stake: floatStake,
}
- if (i < (wallets / 2)) || (npnHosts == 0) {
+ if i < wallets {
w.Online = true
}
stakeSum = stakeSum.Add(stakeSum, stake)
@@ -507,7 +522,16 @@ func saveGenesisDataToDisk(genesisData gen.GenesisData, filename string) error {
return err
}
-func generateAccountsLoadingFileTemplate(templateFilename, sourceWallet string, rounds, roundTxnCount, accountsCount, assetsCount, applicationCount uint64) error {
+func generateAccountsLoadingFileTemplate(templateFilename, sourceWallet string, rounds, roundTxnCount, accountsCount, assetsCount, applicationCount uint64, balRange []string) error {
+
+ min, err := strconv.ParseInt(balRange[0], 0, 64)
+ if err != nil {
+ return err
+ }
+ max, err := strconv.ParseInt(balRange[1], 0, 64)
+ if err != nil {
+ return err
+ }
var data = remote.BootstrappedNetwork{
NumRounds: rounds,
@@ -516,6 +540,7 @@ func generateAccountsLoadingFileTemplate(templateFilename, sourceWallet string,
GeneratedAssetsCount: assetsCount,
GeneratedApplicationCount: applicationCount,
SourceWalletName: sourceWallet,
+ BalanceRange: []int64{min, max},
}
return saveLoadingFileDataToDisk(data, templateFilename)
}
diff --git a/cmd/opdoc/opdoc.go b/cmd/opdoc/opdoc.go
index 334942a32..8f59960f5 100644
--- a/cmd/opdoc/opdoc.go
+++ b/cmd/opdoc/opdoc.go
@@ -75,12 +75,20 @@ func integerConstantsTableMarkdown(out io.Writer) {
}
func fieldTableMarkdown(out io.Writer, names []string, types []logic.StackType, extra map[string]string) {
- fmt.Fprintf(out, "| Index | Name | Type | Notes |\n")
- fmt.Fprintf(out, "| --- | --- | --- | --- |\n")
+ if types != nil {
+ fmt.Fprintf(out, "| Index | Name | Type | Notes |\n")
+ fmt.Fprintf(out, "| --- | --- | --- | --- |\n")
+ } else {
+ fmt.Fprintf(out, "| Index | Name | Notes |\n")
+ fmt.Fprintf(out, "| --- | --- | --- |\n")
+ }
for i, name := range names {
- gfType := types[i]
- estr := extra[name]
- fmt.Fprintf(out, "| %d | %s | %s | %s |\n", i, markdownTableEscape(name), markdownTableEscape(gfType.String()), estr)
+ str := fmt.Sprintf("| %d | %s", i, markdownTableEscape(name))
+ if types != nil {
+ gfType := types[i]
+ str = fmt.Sprintf("%s | %s", str, markdownTableEscape(gfType.String()))
+ }
+ fmt.Fprintf(out, "%s | %s |\n", str, extra[name])
}
out.Write([]byte("\n"))
}
@@ -102,12 +110,17 @@ func assetHoldingFieldsMarkdown(out io.Writer) {
func assetParamsFieldsMarkdown(out io.Writer) {
fmt.Fprintf(out, "\n`asset_params_get` Fields:\n\n")
- fieldTableMarkdown(out, logic.AssetParamsFieldNames, logic.AssetParamsFieldTypes, logic.AssetParamsFieldDocs)
+ fieldTableMarkdown(out, logic.AssetParamsFieldNames, logic.AssetParamsFieldTypes, logic.AssetParamsFieldDocs())
}
func appParamsFieldsMarkdown(out io.Writer) {
fmt.Fprintf(out, "\n`app_params_get` Fields:\n\n")
- fieldTableMarkdown(out, logic.AppParamsFieldNames, logic.AppParamsFieldTypes, logic.AppParamsFieldDocs)
+ fieldTableMarkdown(out, logic.AppParamsFieldNames, logic.AppParamsFieldTypes, logic.AppParamsFieldDocs())
+}
+
+func ecDsaCurvesMarkdown(out io.Writer) {
+ fmt.Fprintf(out, "\n`ECDSA` Curves:\n\n")
+ fieldTableMarkdown(out, logic.EcdsaCurveNames, nil, logic.EcdsaCurveDocs)
}
func immediateMarkdown(op *logic.OpSpec) string {
@@ -159,7 +172,11 @@ func opToMarkdown(out io.Writer, op *logic.OpSpec) (err error) {
if cost.From == cost.To {
fmt.Fprintf(out, " - %d (LogicSigVersion = %d)\n", cost.Cost, cost.To)
} else {
- fmt.Fprintf(out, " - %d (%d <= LogicSigVersion <= %d)\n", cost.Cost, cost.From, cost.To)
+ if cost.To < logic.LogicVersion {
+ fmt.Fprintf(out, " - %d (%d <= LogicSigVersion <= %d)\n", cost.Cost, cost.From, cost.To)
+ } else {
+ fmt.Fprintf(out, " - %d (LogicSigVersion >= %d)\n", cost.Cost, cost.From)
+ }
}
}
} else {
@@ -186,6 +203,8 @@ func opToMarkdown(out io.Writer, op *logic.OpSpec) (err error) {
assetParamsFieldsMarkdown(out)
} else if op.Name == "app_params_get" {
appParamsFieldsMarkdown(out)
+ } else if strings.HasPrefix(op.Name, "ecdsa") {
+ ecDsaCurvesMarkdown(out)
}
ode := logic.OpDocExtra(op.Name)
if ode != "" {
@@ -238,7 +257,7 @@ func argEnum(name string) []string {
if name == "global" {
return logic.GlobalFieldNames
}
- if name == "txna" || name == "gtxna" || name == "gtxnsa" {
+ if name == "txna" || name == "gtxna" || name == "gtxnsa" || name == "txnas" || name == "gtxnas" || name == "gtxnsas" {
return logic.TxnaFieldNames
}
if name == "asset_holding_get" {
@@ -282,7 +301,7 @@ func argEnumTypes(name string) string {
if name == "global" {
return typeString(logic.GlobalFieldTypes)
}
- if name == "txna" || name == "gtxna" || name == "gtxnsa" {
+ if name == "txna" || name == "gtxna" || name == "gtxnsa" || name == "txnas" || name == "gtxnas" || name == "gtxnsas" {
return typeString(logic.TxnaFieldTypes)
}
if name == "asset_holding_get" {
@@ -354,11 +373,11 @@ func main() {
assetholding.Close()
assetparams, _ := os.Create("asset_params_fields.md")
- fieldTableMarkdown(assetparams, logic.AssetParamsFieldNames, logic.AssetParamsFieldTypes, logic.AssetParamsFieldDocs)
+ fieldTableMarkdown(assetparams, logic.AssetParamsFieldNames, logic.AssetParamsFieldTypes, logic.AssetParamsFieldDocs())
assetparams.Close()
appparams, _ := os.Create("app_params_fields.md")
- fieldTableMarkdown(appparams, logic.AppParamsFieldNames, logic.AppParamsFieldTypes, logic.AppParamsFieldDocs)
+ fieldTableMarkdown(appparams, logic.AppParamsFieldNames, logic.AppParamsFieldTypes, logic.AppParamsFieldDocs())
appparams.Close()
langspecjs, _ := os.Create("langspec.json")
diff --git a/cmd/opdoc/tmLanguage.go b/cmd/opdoc/tmLanguage.go
index dda9a7976..3f5aa8503 100644
--- a/cmd/opdoc/tmLanguage.go
+++ b/cmd/opdoc/tmLanguage.go
@@ -172,10 +172,11 @@ func buildSyntaxHighlight() *tmLanguage {
Name: "keyword.other.unit.teal",
Match: fmt.Sprintf("^(%s)\\b", strings.Join(names, "|")),
})
- // For these four, accumulate into allArithmetics,
+ // For these, accumulate into allArithmetics,
// and only add to keyword.Patterns later, when all
// have been collected.
- case "Arithmetic", "Byte Array Slicing", "Byteslice Arithmetic", "Byteslice Logic":
+ case "Arithmetic", "Byte Array Slicing", "Byte Array Arithmetic",
+ "Byte Array Logic", "Inner Transactions":
escape := map[rune]bool{
'*': true,
'+': true,
diff --git a/cmd/tealdbg/cdtSession_test.go b/cmd/tealdbg/cdtSession_test.go
index 1eb669126..8ee0107be 100644
--- a/cmd/tealdbg/cdtSession_test.go
+++ b/cmd/tealdbg/cdtSession_test.go
@@ -28,9 +28,11 @@ import (
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func TestCdtSessionProto11Common(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -94,6 +96,7 @@ func TestCdtSessionProto11Common(t *testing.T) {
}
func TestCdtSessionProto11Breakpoints(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -178,6 +181,7 @@ func TestCdtSessionProto11Breakpoints(t *testing.T) {
}
func TestCdtSessionProto11Events(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -211,6 +215,7 @@ func TestCdtSessionProto11Events(t *testing.T) {
}
func TestCdtSessionProto11Controls(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -254,6 +259,7 @@ func TestCdtSessionProto11Controls(t *testing.T) {
}
func TestCdtSessionProto11Evaluate(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -292,6 +298,7 @@ func TestCdtSessionProto11Evaluate(t *testing.T) {
}
func TestCdtSessionProto11CallOnFunc(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -380,6 +387,7 @@ func TestCdtSessionProto11CallOnFunc(t *testing.T) {
}
func TestCdtSessionProto11GetProps(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -413,6 +421,7 @@ func TestCdtSessionProto11GetProps(t *testing.T) {
}
func TestCdtSessionStateToEvent(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
@@ -451,6 +460,7 @@ func TestCdtSessionStateToEvent(t *testing.T) {
}
func TestCdtSessionGetObjects(t *testing.T) {
+ partitiontest.PartitionTest(t)
sid := "test"
dbg := MockDebugControl{}
ch := make(chan Notification)
diff --git a/cmd/tealdbg/cdtdbg_test.go b/cmd/tealdbg/cdtdbg_test.go
index 28c2417c3..fb6b4c0a6 100644
--- a/cmd/tealdbg/cdtdbg_test.go
+++ b/cmd/tealdbg/cdtdbg_test.go
@@ -29,9 +29,11 @@ import (
"github.com/algorand/go-algorand/cmd/tealdbg/cdt"
"github.com/algorand/go-algorand/data/transactions/logic"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func TestCdtHandlers(t *testing.T) {
+ partitiontest.PartitionTest(t)
params := CdtFrontendParams{
router: mux.NewRouter(),
apiAddress: "127.0.0.1:12345",
@@ -142,6 +144,7 @@ func (c *MockDebugControl) GetStates(s *logic.DebugState) AppState {
}
func TestCdtFrontendSessionStarted(t *testing.T) {
+ partitiontest.PartitionTest(t)
params := CdtFrontendParams{
router: mux.NewRouter(),
apiAddress: "127.0.0.1:12345",
@@ -178,6 +181,7 @@ func TestCdtFrontendSessionStarted(t *testing.T) {
}
func TestCdtAdapterSessionEnded(t *testing.T) {
+ partitiontest.PartitionTest(t)
params := CdtFrontendParams{
router: mux.NewRouter(),
apiAddress: "127.0.0.1:12345",
diff --git a/cmd/tealdbg/debugger_test.go b/cmd/tealdbg/debugger_test.go
index be517d5b4..d1d815b1a 100644
--- a/cmd/tealdbg/debugger_test.go
+++ b/cmd/tealdbg/debugger_test.go
@@ -26,6 +26,7 @@ import (
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
type testDbgAdapter struct {
@@ -91,6 +92,7 @@ func (d *testDbgAdapter) eventLoop() {
}
func TestDebuggerSimple(t *testing.T) {
+ partitiontest.PartitionTest(t)
proto := config.Consensus[protocol.ConsensusV18]
require.Greater(t, proto.LogicSigVersion, uint64(0))
debugger := MakeDebugger()
@@ -122,6 +124,7 @@ int 1
}
func TestSession(t *testing.T) {
+ partitiontest.PartitionTest(t)
source := fmt.Sprintf("#pragma version %d\nint 1\ndup\n+\n", logic.LogicVersion)
ops, err := logic.AssembleStringWithVersion(source, logic.LogicVersion)
require.NoError(t, err)
diff --git a/cmd/tealdbg/local.go b/cmd/tealdbg/local.go
index baebcea04..6fe2d006a 100644
--- a/cmd/tealdbg/local.go
+++ b/cmd/tealdbg/local.go
@@ -38,7 +38,7 @@ func protoFromString(protoString string) (name string, proto config.ConsensusPar
var ok bool
proto, ok = config.Consensus[protocol.ConsensusVersion(protoString)]
if !ok {
- err = fmt.Errorf("Unknown protocol %s", protoString)
+ err = fmt.Errorf("unknown protocol %s", protoString)
return
}
name = protoString
@@ -209,7 +209,7 @@ type evaluation struct {
source string
offsetToLine map[int]int
name string
- groupIndex int
+ groupIndex uint64
pastSideEffects []logic.EvalSideEffects
mode modeType
aidx basics.AppIndex
@@ -369,7 +369,7 @@ func (r *LocalRunner) Setup(dp *DebugParams) (err error) {
source := string(data)
ops, err := logic.AssembleString(source)
if ops.Version > r.proto.LogicSigVersion {
- return fmt.Errorf("Program version (%d) is beyond the maximum supported protocol version (%d)", ops.Version, r.proto.LogicSigVersion)
+ return fmt.Errorf("program version (%d) is beyond the maximum supported protocol version (%d)", ops.Version, r.proto.LogicSigVersion)
}
if err != nil {
errorLines := ""
@@ -387,7 +387,7 @@ func (r *LocalRunner) Setup(dp *DebugParams) (err error) {
r.runs[i].source = source
}
}
- r.runs[i].groupIndex = dp.GroupIndex
+ r.runs[i].groupIndex = uint64(dp.GroupIndex)
r.runs[i].pastSideEffects = dp.PastSideEffects
r.runs[i].name = dp.ProgramNames[i]
@@ -431,7 +431,7 @@ func (r *LocalRunner) Setup(dp *DebugParams) (err error) {
if len(stxn.Lsig.Logic) > 0 {
run := evaluation{
program: stxn.Lsig.Logic,
- groupIndex: gi,
+ groupIndex: uint64(gi),
mode: modeLogicsig,
}
r.runs = append(r.runs, run)
@@ -452,7 +452,7 @@ func (r *LocalRunner) Setup(dp *DebugParams) (err error) {
}
run := evaluation{
program: stxn.Txn.ApprovalProgram,
- groupIndex: gi,
+ groupIndex: uint64(gi),
pastSideEffects: dp.PastSideEffects,
mode: modeStateful,
aidx: appIdx,
@@ -488,7 +488,7 @@ func (r *LocalRunner) Setup(dp *DebugParams) (err error) {
}
run := evaluation{
program: program,
- groupIndex: gi,
+ groupIndex: uint64(gi),
pastSideEffects: dp.PastSideEffects,
mode: modeStateful,
aidx: appIdx,
@@ -534,6 +534,7 @@ func (r *LocalRunner) RunAll() error {
TxnGroup: r.txnGroup,
GroupIndex: run.groupIndex,
PastSideEffects: run.pastSideEffects,
+ Specials: &transactions.SpecialAddresses{},
}
run.result.pass, run.result.err = run.eval(ep)
@@ -562,6 +563,7 @@ func (r *LocalRunner) Run() (bool, error) {
TxnGroup: r.txnGroup,
GroupIndex: run.groupIndex,
PastSideEffects: run.pastSideEffects,
+ Specials: &transactions.SpecialAddresses{},
}
// Workaround for Go's nil/empty interfaces nil check after nil assignment, i.e.
diff --git a/cmd/tealdbg/localLedger.go b/cmd/tealdbg/localLedger.go
index 6f4dcfeaa..23e58e3f3 100644
--- a/cmd/tealdbg/localLedger.go
+++ b/cmd/tealdbg/localLedger.go
@@ -285,7 +285,10 @@ func (l *localLedger) CheckDup(config.ConsensusParams, basics.Round, basics.Roun
}
func (l *localLedger) LookupWithoutRewards(rnd basics.Round, addr basics.Address) (basics.AccountData, basics.Round, error) {
- return l.balances[addr], rnd, nil
+ ad := l.balances[addr]
+ // Clear RewardsBase since tealdbg has no idea about rewards level so the underlying calculation with reward will fail.
+ ad.RewardsBase = 0
+ return ad, rnd, nil
}
func (l *localLedger) GetCreatorForRound(rnd basics.Round, cidx basics.CreatableIndex, ctype basics.CreatableType) (basics.Address, bool, error) {
diff --git a/cmd/tealdbg/localLedger_test.go b/cmd/tealdbg/localLedger_test.go
index ae941723a..be2ef8189 100644
--- a/cmd/tealdbg/localLedger_test.go
+++ b/cmd/tealdbg/localLedger_test.go
@@ -26,6 +26,7 @@ import (
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
// Current implementation uses LegderForCowBase interface to plug into evaluator.
@@ -34,6 +35,7 @@ import (
// This test ensures TEAL program sees data provided by LegderForCowBase, and sees all
// intermediate changes.
func TestBalanceAdapterStateChanges(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
source := `#pragma version 2
diff --git a/cmd/tealdbg/local_test.go b/cmd/tealdbg/local_test.go
index 6a844963e..d4d917a40 100644
--- a/cmd/tealdbg/local_test.go
+++ b/cmd/tealdbg/local_test.go
@@ -31,6 +31,7 @@ import (
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/ledger/apply"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -53,6 +54,7 @@ var txnSample string = `{
`
func TestTxnJSONInput(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
dp := DebugParams{
@@ -73,6 +75,7 @@ func TestTxnJSONInput(t *testing.T) {
}
func TestTxnMessagePackInput(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
var txn transactions.SignedTxn
@@ -232,6 +235,7 @@ func makeSampleSerializedBalanceRecord(addr basics.Address, toJSON bool) []byte
}
func TestBalanceJSONInput(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
addr, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
@@ -254,6 +258,7 @@ func TestBalanceJSONInput(t *testing.T) {
}
func TestBalanceMessagePackInput(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
addr, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
a.NoError(err)
@@ -281,6 +286,7 @@ func TestBalanceMessagePackInput(t *testing.T) {
}
func TestDebugEnvironment(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
sender, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
@@ -521,6 +527,7 @@ byte 0x676c6f62616c // global
}
func TestDebugFromPrograms(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
txnBlob := []byte("[" + strings.Join([]string{string(txnSample), txnSample}, ",") + "]")
@@ -571,7 +578,7 @@ func TestDebugFromPrograms(t *testing.T) {
err = l.Setup(&dp)
a.NoError(err)
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.Nil(l.runs[0].ba)
a.Equal(modeLogicsig, l.runs[0].mode)
a.Empty(l.runs[0].aidx)
@@ -587,8 +594,8 @@ func TestDebugFromPrograms(t *testing.T) {
err = l.Setup(&dp)
a.NoError(err)
a.Equal(2, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
- a.Equal(0, l.runs[1].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[1].groupIndex)
a.Nil(l.runs[0].ba)
a.Equal(modeLogicsig, l.runs[0].mode)
a.Empty(l.runs[0].aidx)
@@ -599,6 +606,7 @@ func TestDebugFromPrograms(t *testing.T) {
}
func TestRunMode(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
txnBlob := []byte("[" + strings.Join([]string{string(txnSample), txnSample}, ",") + "]")
@@ -617,7 +625,7 @@ func TestRunMode(t *testing.T) {
err := l.Setup(&dp)
a.NoError(err)
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.NotNil(l.runs[0].ba)
a.Equal(modeStateful, l.runs[0].mode)
@@ -640,7 +648,7 @@ func TestRunMode(t *testing.T) {
err = l.Setup(&dp)
a.NoError(err)
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Nil(l.runs[0].ba)
a.Equal(modeLogicsig, l.runs[0].mode)
@@ -659,7 +667,7 @@ func TestRunMode(t *testing.T) {
err = l.Setup(&dp)
a.NoError(err)
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.NotNil(l.runs[0].ba)
a.Equal(modeStateful, l.runs[0].mode)
@@ -677,7 +685,7 @@ func TestRunMode(t *testing.T) {
err = l.Setup(&dp)
a.NoError(err)
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Nil(l.runs[0].ba)
a.Equal(modeLogicsig, l.runs[0].mode)
@@ -685,6 +693,7 @@ func TestRunMode(t *testing.T) {
}
func TestDebugFromTxn(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
sender, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
@@ -738,7 +747,7 @@ func TestDebugFromTxn(t *testing.T) {
err = l.Setup(&dp)
a.NoError(err)
a.Equal(1, len(l.runs))
- a.Equal(1, l.runs[0].groupIndex)
+ a.Equal(uint64(1), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Equal([]byte{3}, l.runs[0].program)
a.Nil(l.runs[0].ba)
@@ -764,7 +773,7 @@ func TestDebugFromTxn(t *testing.T) {
a.NoError(err)
a.Equal(2, len(l.txnGroup))
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Equal([]byte{1}, l.runs[0].program)
a.NotNil(l.runs[0].ba)
@@ -787,7 +796,7 @@ func TestDebugFromTxn(t *testing.T) {
a.NoError(err)
a.Equal(2, len(l.txnGroup))
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Equal([]byte{1, 1}, l.runs[0].program)
a.NotNil(l.runs[0].ba)
@@ -812,7 +821,7 @@ func TestDebugFromTxn(t *testing.T) {
a.NoError(err)
a.Equal(1, len(l.txnGroup))
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Equal([]byte{4}, l.runs[0].program)
a.NotNil(l.runs[0].ba)
@@ -904,6 +913,7 @@ func checkBalanceAdapter(
}
func TestLocalBalanceAdapter(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
sender, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
@@ -949,7 +959,7 @@ func TestLocalBalanceAdapter(t *testing.T) {
a.NoError(err)
a.Equal(2, len(l.txnGroup))
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Equal([]byte{1}, l.runs[0].program)
a.NotNil(l.runs[0].ba)
@@ -964,6 +974,7 @@ func TestLocalBalanceAdapter(t *testing.T) {
}
func TestLocalBalanceAdapterIndexer(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
sender, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
@@ -1039,7 +1050,7 @@ func TestLocalBalanceAdapterIndexer(t *testing.T) {
a.NoError(err)
a.Equal(2, len(l.txnGroup))
a.Equal(1, len(l.runs))
- a.Equal(0, l.runs[0].groupIndex)
+ a.Equal(uint64(0), l.runs[0].groupIndex)
a.NotNil(l.runs[0].eval)
a.Equal([]byte{1}, l.runs[0].program)
a.NotNil(l.runs[0].ba)
@@ -1053,3 +1064,77 @@ func TestLocalBalanceAdapterIndexer(t *testing.T) {
ba := l.runs[0].ba
checkBalanceAdapter(a, ba, sender, payTxn.Txn.Receiver, assetIdx, appIdx)
}
+
+func TestDebugTxSubmit(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ a := require.New(t)
+
+ sender, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
+ a.NoError(err)
+ app, err := basics.UnmarshalChecksumAddress("6BPQU5WNZMTO4X72A2THZCGNJNTTE7YL6AWCYSUUTZEIYMJSEPJCQQ6DQI")
+ a.NoError(err)
+
+ // make balance records
+ assetIdx := basics.AssetIndex(50)
+ appIdx := basics.AppIndex(100)
+ brs := makeSampleBalanceRecord(sender, assetIdx, appIdx)
+ bra := makeSampleBalanceRecord(app, assetIdx, appIdx)
+ balanceBlob := protocol.EncodeMsgp(&brs)
+ balanceBlob = append(balanceBlob, protocol.EncodeMsgp(&bra)...)
+
+ txn := transactions.SignedTxn{
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: transactions.Header{
+ Sender: sender,
+ Fee: basics.MicroAlgos{Raw: 100},
+ Note: []byte{1, 2, 3},
+ },
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: appIdx,
+ },
+ },
+ }
+
+ txnEnc := protocol.EncodeJSON(&txn)
+ txnBlob := []byte("[" + strings.Join([]string{string(txnEnc), txnSample}, ",") + "]")
+
+ source := `#pragma version 5
+itxn_begin
+int acfg
+itxn_field TypeEnum
+int 1000000
+itxn_field ConfigAssetTotal
+int 3
+itxn_field ConfigAssetDecimals
+byte "oz"
+itxn_field ConfigAssetUnitName
+byte "Gold"
+itxn_field ConfigAssetName
+byte "https://gold.rush/"
+itxn_field ConfigAssetURL
+byte 0x67f0cd61653bd34316160bc3f5cd3763c85b114d50d38e1f4e72c3b994411e7b
+itxn_field ConfigAssetMetadataHash
+itxn_submit
+int 1`
+
+ ds := DebugParams{
+ ProgramNames: []string{"test"},
+ ProgramBlobs: [][]byte{[]byte(source)},
+ BalanceBlob: balanceBlob,
+ TxnBlob: txnBlob,
+ Proto: string(protocol.ConsensusCurrentVersion),
+ Round: 222,
+ LatestTimestamp: 333,
+ GroupIndex: 0,
+ RunMode: "application",
+ }
+
+ local := MakeLocalRunner(nil) // no debugger
+ err = local.Setup(&ds)
+ a.NoError(err)
+
+ pass, err := local.Run()
+ a.NoError(err)
+ a.True(pass)
+}
diff --git a/cmd/tealdbg/remote_test.go b/cmd/tealdbg/remote_test.go
index 863e30369..553bc4c56 100644
--- a/cmd/tealdbg/remote_test.go
+++ b/cmd/tealdbg/remote_test.go
@@ -28,9 +28,11 @@ import (
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func TestRemoteAdapterHandlers(t *testing.T) {
+ partitiontest.PartitionTest(t)
d := MakeDebugger()
a := MakeRemoteHook(d)
router := mux.NewRouter()
diff --git a/cmd/tealdbg/server_test.go b/cmd/tealdbg/server_test.go
index aa138b30b..232c6a6f4 100644
--- a/cmd/tealdbg/server_test.go
+++ b/cmd/tealdbg/server_test.go
@@ -23,6 +23,7 @@ import (
"testing"
"time"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/gorilla/mux"
"github.com/stretchr/testify/require"
)
@@ -124,10 +125,12 @@ func serverTestImpl(t *testing.T, run func(t *testing.T, ds *DebugServer) bool,
}
func TestServerRemote(t *testing.T) {
+ partitiontest.PartitionTest(t)
serverTestImpl(t, tryStartingServerRemote, &DebugParams{})
}
func TestServerLocal(t *testing.T) {
+ partitiontest.PartitionTest(t)
txnBlob := []byte("[" + strings.Join([]string{string(txnSample), txnSample}, ",") + "]")
dp := DebugParams{
ProgramNames: []string{"test"},
diff --git a/cmd/tealdbg/util_test.go b/cmd/tealdbg/util_test.go
index 459bd3a29..8613a398b 100644
--- a/cmd/tealdbg/util_test.go
+++ b/cmd/tealdbg/util_test.go
@@ -19,10 +19,12 @@ package main
import (
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestVLQ(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
a.Equal("AAAA", MakeSourceMapLine(0, 0, 0, 0))
diff --git a/cmd/tealdbg/webdbg_test.go b/cmd/tealdbg/webdbg_test.go
index 76620a82f..5f340ff6a 100644
--- a/cmd/tealdbg/webdbg_test.go
+++ b/cmd/tealdbg/webdbg_test.go
@@ -23,11 +23,13 @@ import (
"net/http/httptest"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/gorilla/mux"
"github.com/stretchr/testify/require"
)
func TestWebPageFrontendHandlers(t *testing.T) {
+ partitiontest.PartitionTest(t)
params := WebPageFrontendParams{
router: mux.NewRouter(),
apiAddress: "127.0.0.1:12345",
diff --git a/cmd/updater/update.sh b/cmd/updater/update.sh
index 136ce67d5..60fbe0561 100755
--- a/cmd/updater/update.sh
+++ b/cmd/updater/update.sh
@@ -196,8 +196,8 @@ function get_updater_url() {
# check to see if the binary updater exists. if not, it will automatically the correct updater binary for the current platform
function check_for_updater() {
- # check if the updater binary exist.
- if [ -f "${SCRIPTPATH}/updater" ]; then
+ # check if the updater binary exist and is not empty.
+ if [[ -s "${SCRIPTPATH}/updater" && -f "${SCRIPTPATH}/updater" ]]; then
return 0
fi
get_updater_url
@@ -245,7 +245,12 @@ function check_for_update() {
return 1
fi
- echo Latest Version = ${LATEST}
+ if [ -z ${LATEST} ]; then
+ echo "Failed to lookup latest release"
+ return 1
+ fi
+
+ echo "Latest Version = ${LATEST}"
if [ ${CURRENTVER} -ge ${LATEST} ]; then
if [ "${UPDATETYPE}" = "install" ]; then
diff --git a/cmd/updater/version_test.go b/cmd/updater/version_test.go
index 9921161b0..286946165 100644
--- a/cmd/updater/version_test.go
+++ b/cmd/updater/version_test.go
@@ -21,10 +21,12 @@ import (
"github.com/stretchr/testify/require"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/algorand/go-algorand/util/s3"
)
func TestGetVersion(t *testing.T) {
+ partitiontest.PartitionTest(t)
testValidVersion(t, "algonode_update_0.1.0.log", uint64(0x00010000))
testValidVersion(t, "algo_update_0.1.0", uint64(0x00010000))
testValidVersion(t, "algo_update_65535.1.0", uint64(0xFFFF00010000))
diff --git a/config/consensus.go b/config/consensus.go
index 7c485c36d..c9589006e 100644
--- a/config/consensus.go
+++ b/config/consensus.go
@@ -283,6 +283,9 @@ type ConsensusParams struct {
// maximum sum of the lengths of the key and value of one app state entry
MaxAppSumKeyValueLens int
+ // maximum number of inner transactions that can be created by an app call
+ MaxInnerTransactions int
+
// maximum number of applications a single account can create and store
// AppParams for at once
MaxAppsCreated int
@@ -428,8 +431,11 @@ var MaxEvalDeltaAccounts int
var MaxStateDeltaKeys int
// MaxLogCalls is the highest allowable log messages that may appear in
-// any version, used for decoding purposes. Never decrease this value.
-const MaxLogCalls = 32
+// any version, used only for decoding purposes. Never decrease this value.
+var MaxLogCalls int
+
+// MaxInnerTransactions is the maximum number of inner transactions that may be created in an app call.
+var MaxInnerTransactions int
// MaxLogicSigMaxSize is the largest logical signature appear in any of the supported
// protocols, used for decoding purposes.
@@ -491,6 +497,10 @@ func checkSetAllocBounds(p ConsensusParams) {
checkSetMax(p.MaxExtraAppProgramPages, &MaxExtraAppProgramLen)
// MaxAvailableAppProgramLen is the max of supported app program size
MaxAvailableAppProgramLen = MaxAppProgramLen * (1 + MaxExtraAppProgramLen)
+ // There is no consensus parameter for MaxLogCalls and MaxAppProgramLen as an approximation
+ // Its value is much larger than any possible reasonable MaxLogCalls value in future
+ checkSetMax(p.MaxAppProgramLen, &MaxLogCalls)
+ checkSetMax(p.MaxInnerTransactions, &MaxInnerTransactions)
}
// SaveConfigurableConsensus saves the configurable protocols file to the provided data directory.
@@ -992,9 +1002,34 @@ func initConsensusProtocols() {
// v28 can be upgraded to v29, with an update delay of 3 days ( see calculation above )
v28.ApprovedUpgrades[protocol.ConsensusV29] = 60000
+ // v30 introduces AVM 1.0 and TEAL 5, increases the app opt in limit to 50,
+ // and allows costs to be pooled in grouped stateful transactions.
+ v30 := v29
+ v30.ApprovedUpgrades = map[protocol.ConsensusVersion]uint64{}
+
+ // Enable TEAL 5 / AVM 1.0
+ v30.LogicSigVersion = 5
+
+ // Enable App calls to pool budget in grouped transactions
+ v30.EnableAppCostPooling = true
+
+ // Enable Inner Transactions, and set maximum number. 0 value is
+ // disabled. Value > 0 also activates storage of creatable IDs in
+ // ApplyData, as that is required to support REST API when inner
+ // transactions are activated.
+ v30.MaxInnerTransactions = 16
+
+ // Allow 50 app opt ins
+ v30.MaxAppsOptedIn = 50
+
+ Consensus[protocol.ConsensusV30] = v30
+
+ // v29 can be upgraded to v30, with an update delay of 7 days ( see calculation above )
+ v29.ApprovedUpgrades[protocol.ConsensusV30] = 140000
+
// ConsensusFuture is used to test features that are implemented
// but not yet released in a production protocol version.
- vFuture := v29
+ vFuture := v30
vFuture.ApprovedUpgrades = map[protocol.ConsensusVersion]uint64{}
// FilterTimeout for period 0 should take a new optimized, configured value, need to revisit this later
@@ -1007,12 +1042,6 @@ func initConsensusProtocols() {
vFuture.CompactCertWeightThreshold = (1 << 32) * 30 / 100
vFuture.CompactCertSecKQ = 128
- // Enable TEAL 5 / AVM 1.0
- vFuture.LogicSigVersion = 5
-
- // Enable App calls to pool budget in grouped transactions
- vFuture.EnableAppCostPooling = true
-
Consensus[protocol.ConsensusFuture] = vFuture
}
diff --git a/config/version.go b/config/version.go
index 39a80b6b8..1980378d9 100644
--- a/config/version.go
+++ b/config/version.go
@@ -29,11 +29,11 @@ import (
// VersionMajor is the Major semantic version number (#.y.z) - changed when first public release (0.y.z -> 1.y.z)
// and when backwards compatibility is broken.
-const VersionMajor = 2
+const VersionMajor = 3
// VersionMinor is the Minor semantic version number (x.#.z) - changed when backwards-compatible features are introduced.
// Not enforced until after initial public release (x > 0).
-const VersionMinor = 10
+const VersionMinor = 0
// Version is the type holding our full version information.
type Version struct {
diff --git a/crypto/curve25519_test.go b/crypto/curve25519_test.go
index ea155e070..785004861 100644
--- a/crypto/curve25519_test.go
+++ b/crypto/curve25519_test.go
@@ -19,6 +19,8 @@ package crypto
import (
"bytes"
"testing"
+
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func makeCurve25519Secret() *SignatureSecrets {
@@ -28,6 +30,7 @@ func makeCurve25519Secret() *SignatureSecrets {
}
func TestSignVerifyEmptyMessage(t *testing.T) {
+ partitiontest.PartitionTest(t)
pk, sk := ed25519GenerateKey()
sig := ed25519Sign(sk, []byte{})
if !ed25519Verify(pk, []byte{}, sig) {
@@ -36,6 +39,7 @@ func TestSignVerifyEmptyMessage(t *testing.T) {
}
func TestVerifyZeros(t *testing.T) {
+ partitiontest.PartitionTest(t)
var pk SignatureVerifier
var sig Signature
for x := byte(0); x < 255; x++ {
@@ -46,6 +50,7 @@ func TestVerifyZeros(t *testing.T) {
}
func TestGenerateSignatureSecrets(t *testing.T) {
+ partitiontest.PartitionTest(t)
var s Seed
RandBytes(s[:])
ref := GenerateSignatureSecrets(s)
@@ -63,10 +68,12 @@ func TestGenerateSignatureSecrets(t *testing.T) {
}
func TestCurve25519SignVerify(t *testing.T) {
+ partitiontest.PartitionTest(t)
signVerify(t, makeCurve25519Secret(), makeCurve25519Secret())
}
func TestVRFProveVerify(t *testing.T) {
+ partitiontest.PartitionTest(t)
proveVerifyVrf(t, GenerateVRFSecrets(), GenerateVRFSecrets())
}
diff --git a/crypto/encoding_test.go b/crypto/encoding_test.go
index 17e83b71f..e5df42c9e 100644
--- a/crypto/encoding_test.go
+++ b/crypto/encoding_test.go
@@ -18,11 +18,14 @@ package crypto
import (
"testing"
+
+ "github.com/algorand/go-algorand/test/partitiontest"
// "github.com/stretchr/testify/require"
// "github.com/algorand/go-algorand/protocol"
)
func TestEmptyEncoding(t *testing.T) {
+ partitiontest.PartitionTest(t)
// TODO systematically add checks for empty encodings
// var s SignatureSecrets
diff --git a/crypto/onetimesig_test.go b/crypto/onetimesig_test.go
index ad9a109e1..9f1b85f06 100644
--- a/crypto/onetimesig_test.go
+++ b/crypto/onetimesig_test.go
@@ -18,6 +18,8 @@ package crypto
import (
"testing"
+
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func randID() OneTimeSignatureIdentifier {
@@ -30,6 +32,7 @@ func randID() OneTimeSignatureIdentifier {
}
func TestOneTimeSignVerifyNewStyle(t *testing.T) {
+ partitiontest.PartitionTest(t)
c := GenerateOneTimeSignatureSecrets(0, 1000)
c2 := GenerateOneTimeSignatureSecrets(0, 1000)
testOneTimeSignVerifyNewStyle(t, c, c2)
diff --git a/crypto/secp256k1/.gitignore b/crypto/secp256k1/.gitignore
new file mode 100644
index 000000000..802b6744a
--- /dev/null
+++ b/crypto/secp256k1/.gitignore
@@ -0,0 +1,24 @@
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+
+*~
diff --git a/crypto/secp256k1/LICENSE b/crypto/secp256k1/LICENSE
new file mode 100644
index 000000000..f9090e142
--- /dev/null
+++ b/crypto/secp256k1/LICENSE
@@ -0,0 +1,31 @@
+Copyright (c) 2010 The Go Authors. All rights reserved.
+Copyright (c) 2011 ThePiachu. All rights reserved.
+Copyright (c) 2015 Jeffrey Wilcke. All rights reserved.
+Copyright (c) 2015 Felix Lange. All rights reserved.
+Copyright (c) 2015 Gustav Simonsson. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of the copyright holder. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/crypto/secp256k1/curve.go b/crypto/secp256k1/curve.go
new file mode 100644
index 000000000..59e7100c5
--- /dev/null
+++ b/crypto/secp256k1/curve.go
@@ -0,0 +1,299 @@
+// Copyright 2010 The Go Authors. All rights reserved.
+// Copyright 2011 ThePiachu. All rights reserved.
+// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+// * The name of ThePiachu may not be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package secp256k1
+
+import (
+ "crypto/elliptic"
+ "math/big"
+)
+
+const (
+ // number of bits in a big.Word
+ wordBits = 32 << (uint64(^big.Word(0)) >> 63)
+ // number of bytes in a big.Word
+ wordBytes = wordBits / 8
+)
+
+// readBits encodes the absolute value of bigint as big-endian bytes. Callers
+// must ensure that buf has enough space. If buf is too short the result will
+// be incomplete.
+func readBits(bigint *big.Int, buf []byte) {
+ i := len(buf)
+ for _, d := range bigint.Bits() {
+ for j := 0; j < wordBytes && i > 0; j++ {
+ i--
+ buf[i] = byte(d)
+ d >>= 8
+ }
+ }
+}
+
+// This code is from https://github.com/ThePiachu/GoBit and implements
+// several Koblitz elliptic curves over prime fields.
+//
+// The curve methods, internally, on Jacobian coordinates. For a given
+// (x, y) position on the curve, the Jacobian coordinates are (x1, y1,
+// z1) where x = x1/z1² and y = y1/z1³. The greatest speedups come
+// when the whole calculation can be performed within the transform
+// (as in ScalarMult and ScalarBaseMult). But even for Add and Double,
+// it's faster to apply and reverse the transform than to operate in
+// affine coordinates.
+
+// A BitCurve represents a Koblitz Curve with a=0.
+// See http://www.hyperelliptic.org/EFD/g1p/auto-shortw.html
+type BitCurve struct {
+ P *big.Int // the order of the underlying field
+ N *big.Int // the order of the base point
+ B *big.Int // the constant of the BitCurve equation
+ Gx, Gy *big.Int // (x,y) of the base point
+ BitSize int // the size of the underlying field
+}
+
+// Params returns param
+func (BitCurve *BitCurve) Params() *elliptic.CurveParams {
+ return &elliptic.CurveParams{
+ P: BitCurve.P,
+ N: BitCurve.N,
+ B: BitCurve.B,
+ Gx: BitCurve.Gx,
+ Gy: BitCurve.Gy,
+ BitSize: BitCurve.BitSize,
+ }
+}
+
+// IsOnCurve returns true if the given (x,y) lies on the BitCurve.
+func (BitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool {
+ // y² = x³ + b
+ y2 := new(big.Int).Mul(y, y) //y²
+ y2.Mod(y2, BitCurve.P) //y²%P
+
+ x3 := new(big.Int).Mul(x, x) //x²
+ x3.Mul(x3, x) //x³
+
+ x3.Add(x3, BitCurve.B) //x³+B
+ x3.Mod(x3, BitCurve.P) //(x³+B)%P
+
+ return x3.Cmp(y2) == 0
+}
+
+//TODO: double check if the function is okay
+// affineFromJacobian reverses the Jacobian transform. See the comment at the
+// top of the file.
+func (BitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) {
+ if z.Sign() == 0 {
+ return new(big.Int), new(big.Int)
+ }
+
+ zinv := new(big.Int).ModInverse(z, BitCurve.P)
+ zinvsq := new(big.Int).Mul(zinv, zinv)
+
+ xOut = new(big.Int).Mul(x, zinvsq)
+ xOut.Mod(xOut, BitCurve.P)
+ zinvsq.Mul(zinvsq, zinv)
+ yOut = new(big.Int).Mul(y, zinvsq)
+ yOut.Mod(yOut, BitCurve.P)
+ return
+}
+
+// Add returns the sum of (x1,y1) and (x2,y2)
+func (BitCurve *BitCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) {
+ // If one point is at infinity, return the other point.
+ // Adding the point at infinity to any point will preserve the other point.
+ if x1.Sign() == 0 && y1.Sign() == 0 {
+ return x2, y2
+ }
+ if x2.Sign() == 0 && y2.Sign() == 0 {
+ return x1, y1
+ }
+ z := new(big.Int).SetInt64(1)
+ if x1.Cmp(x2) == 0 && y1.Cmp(y2) == 0 {
+ return BitCurve.affineFromJacobian(BitCurve.doubleJacobian(x1, y1, z))
+ }
+ return BitCurve.affineFromJacobian(BitCurve.addJacobian(x1, y1, z, x2, y2, z))
+}
+
+// addJacobian takes two points in Jacobian coordinates, (x1, y1, z1) and
+// (x2, y2, z2) and returns their sum, also in Jacobian form.
+func (BitCurve *BitCurve) addJacobian(x1, y1, z1, x2, y2, z2 *big.Int) (*big.Int, *big.Int, *big.Int) {
+ // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl
+ z1z1 := new(big.Int).Mul(z1, z1)
+ z1z1.Mod(z1z1, BitCurve.P)
+ z2z2 := new(big.Int).Mul(z2, z2)
+ z2z2.Mod(z2z2, BitCurve.P)
+
+ u1 := new(big.Int).Mul(x1, z2z2)
+ u1.Mod(u1, BitCurve.P)
+ u2 := new(big.Int).Mul(x2, z1z1)
+ u2.Mod(u2, BitCurve.P)
+ h := new(big.Int).Sub(u2, u1)
+ if h.Sign() == -1 {
+ h.Add(h, BitCurve.P)
+ }
+ i := new(big.Int).Lsh(h, 1)
+ i.Mul(i, i)
+ j := new(big.Int).Mul(h, i)
+
+ s1 := new(big.Int).Mul(y1, z2)
+ s1.Mul(s1, z2z2)
+ s1.Mod(s1, BitCurve.P)
+ s2 := new(big.Int).Mul(y2, z1)
+ s2.Mul(s2, z1z1)
+ s2.Mod(s2, BitCurve.P)
+ r := new(big.Int).Sub(s2, s1)
+ if r.Sign() == -1 {
+ r.Add(r, BitCurve.P)
+ }
+ r.Lsh(r, 1)
+ v := new(big.Int).Mul(u1, i)
+
+ x3 := new(big.Int).Set(r)
+ x3.Mul(x3, x3)
+ x3.Sub(x3, j)
+ x3.Sub(x3, v)
+ x3.Sub(x3, v)
+ x3.Mod(x3, BitCurve.P)
+
+ y3 := new(big.Int).Set(r)
+ v.Sub(v, x3)
+ y3.Mul(y3, v)
+ s1.Mul(s1, j)
+ s1.Lsh(s1, 1)
+ y3.Sub(y3, s1)
+ y3.Mod(y3, BitCurve.P)
+
+ z3 := new(big.Int).Add(z1, z2)
+ z3.Mul(z3, z3)
+ z3.Sub(z3, z1z1)
+ if z3.Sign() == -1 {
+ z3.Add(z3, BitCurve.P)
+ }
+ z3.Sub(z3, z2z2)
+ if z3.Sign() == -1 {
+ z3.Add(z3, BitCurve.P)
+ }
+ z3.Mul(z3, h)
+ z3.Mod(z3, BitCurve.P)
+
+ return x3, y3, z3
+}
+
+// Double returns 2*(x,y)
+func (BitCurve *BitCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) {
+ z1 := new(big.Int).SetInt64(1)
+ return BitCurve.affineFromJacobian(BitCurve.doubleJacobian(x1, y1, z1))
+}
+
+// doubleJacobian takes a point in Jacobian coordinates, (x, y, z), and
+// returns its double, also in Jacobian form.
+func (BitCurve *BitCurve) doubleJacobian(x, y, z *big.Int) (*big.Int, *big.Int, *big.Int) {
+ // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
+
+ a := new(big.Int).Mul(x, x) //X1²
+ b := new(big.Int).Mul(y, y) //Y1²
+ c := new(big.Int).Mul(b, b) //B²
+
+ d := new(big.Int).Add(x, b) //X1+B
+ d.Mul(d, d) //(X1+B)²
+ d.Sub(d, a) //(X1+B)²-A
+ d.Sub(d, c) //(X1+B)²-A-C
+ d.Mul(d, big.NewInt(2)) //2*((X1+B)²-A-C)
+
+ e := new(big.Int).Mul(big.NewInt(3), a) //3*A
+ f := new(big.Int).Mul(e, e) //E²
+
+ x3 := new(big.Int).Mul(big.NewInt(2), d) //2*D
+ x3.Sub(f, x3) //F-2*D
+ x3.Mod(x3, BitCurve.P)
+
+ y3 := new(big.Int).Sub(d, x3) //D-X3
+ y3.Mul(e, y3) //E*(D-X3)
+ y3.Sub(y3, new(big.Int).Mul(big.NewInt(8), c)) //E*(D-X3)-8*C
+ y3.Mod(y3, BitCurve.P)
+
+ z3 := new(big.Int).Mul(y, z) //Y1*Z1
+ z3.Mul(big.NewInt(2), z3) //3*Y1*Z1
+ z3.Mod(z3, BitCurve.P)
+
+ return x3, y3, z3
+}
+
+// ScalarBaseMult returns k*G, where G is the base point of the group and k is
+// an integer in big-endian form.
+func (BitCurve *BitCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) {
+ return BitCurve.ScalarMult(BitCurve.Gx, BitCurve.Gy, k)
+}
+
+// Marshal converts a point into the form specified in section 4.3.6 of ANSI
+// X9.62.
+func (BitCurve *BitCurve) Marshal(x, y *big.Int) []byte {
+ byteLen := (BitCurve.BitSize + 7) >> 3
+ ret := make([]byte, 1+2*byteLen)
+ ret[0] = 4 // uncompressed point flag
+ readBits(x, ret[1:1+byteLen])
+ readBits(y, ret[1+byteLen:])
+ return ret
+}
+
+// Unmarshal converts a point, serialised by Marshal, into an x, y pair. On
+// error, x = nil.
+func (BitCurve *BitCurve) Unmarshal(data []byte) (x, y *big.Int) {
+ byteLen := (BitCurve.BitSize + 7) >> 3
+ if len(data) != 1+2*byteLen {
+ return
+ }
+ if data[0] != 4 { // uncompressed form
+ return
+ }
+ x = new(big.Int).SetBytes(data[1 : 1+byteLen])
+ y = new(big.Int).SetBytes(data[1+byteLen:])
+ return
+}
+
+var theCurve = new(BitCurve)
+
+func init() {
+ // See SEC 2 section 2.7.1
+ // curve parameters taken from:
+ // http://www.secg.org/sec2-v2.pdf
+ theCurve.P, _ = new(big.Int).SetString("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 0)
+ theCurve.N, _ = new(big.Int).SetString("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 0)
+ theCurve.B, _ = new(big.Int).SetString("0x0000000000000000000000000000000000000000000000000000000000000007", 0)
+ theCurve.Gx, _ = new(big.Int).SetString("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 0)
+ theCurve.Gy, _ = new(big.Int).SetString("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 0)
+ theCurve.BitSize = 256
+}
+
+// S256 returns a BitCurve which implements secp256k1.
+func S256() *BitCurve {
+ return theCurve
+}
diff --git a/crypto/secp256k1/dummy.go b/crypto/secp256k1/dummy.go
new file mode 100644
index 000000000..7c86a7f42
--- /dev/null
+++ b/crypto/secp256k1/dummy.go
@@ -0,0 +1,20 @@
+// +build dummy
+
+// This file is part of a workaround for `go mod vendor` which won't vendor
+// C files if there's no Go file in the same directory.
+// This would prevent the crypto/secp256k1/libsecp256k1/include/secp256k1.h file to be vendored.
+//
+// This Go file imports the c directory where there is another dummy.go file which
+// is the second part of this workaround.
+//
+// These two files combined make it so `go mod vendor` behaves correctly.
+//
+// See this issue for reference: https://github.com/golang/go/issues/26366
+
+package secp256k1
+
+import (
+ _ "github.com/algorand/go-algorand/crypto/secp256k1/libsecp256k1/include"
+ _ "github.com/algorand/go-algorand/crypto/secp256k1/libsecp256k1/src"
+ _ "github.com/algorand/go-algorand/crypto/secp256k1/libsecp256k1/src/modules/recovery"
+)
diff --git a/crypto/secp256k1/ext.h b/crypto/secp256k1/ext.h
new file mode 100644
index 000000000..e422fe4b4
--- /dev/null
+++ b/crypto/secp256k1/ext.h
@@ -0,0 +1,130 @@
+// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+
+// secp256k1_context_create_sign_verify creates a context for signing and signature verification.
+static secp256k1_context* secp256k1_context_create_sign_verify() {
+ return secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+}
+
+// secp256k1_ext_ecdsa_recover recovers the public key of an encoded compact signature.
+//
+// Returns: 1: recovery was successful
+// 0: recovery was not successful
+// Args: ctx: pointer to a context object (cannot be NULL)
+// Out: pubkey_out: the serialized 65-byte public key of the signer (cannot be NULL)
+// In: sigdata: pointer to a 65-byte signature with the recovery id at the end (cannot be NULL)
+// msgdata: pointer to a 32-byte message (cannot be NULL)
+static int secp256k1_ext_ecdsa_recover(
+ const secp256k1_context* ctx,
+ unsigned char *pubkey_out,
+ const unsigned char *sigdata,
+ const unsigned char *msgdata
+) {
+ secp256k1_ecdsa_recoverable_signature sig;
+ secp256k1_pubkey pubkey;
+
+ if (!secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &sig, sigdata, (int)sigdata[64])) {
+ return 0;
+ }
+ if (!secp256k1_ecdsa_recover(ctx, &pubkey, &sig, msgdata)) {
+ return 0;
+ }
+ size_t outputlen = 65;
+ return secp256k1_ec_pubkey_serialize(ctx, pubkey_out, &outputlen, &pubkey, SECP256K1_EC_UNCOMPRESSED);
+}
+
+// secp256k1_ext_ecdsa_verify verifies an encoded compact signature.
+//
+// Returns: 1: signature is valid
+// 0: signature is invalid
+// Args: ctx: pointer to a context object (cannot be NULL)
+// In: sigdata: pointer to a 64-byte signature (cannot be NULL)
+// msgdata: pointer to a 32-byte message (cannot be NULL)
+// pubkeydata: pointer to public key data (cannot be NULL)
+// pubkeylen: length of pubkeydata
+static int secp256k1_ext_ecdsa_verify(
+ const secp256k1_context* ctx,
+ const unsigned char *sigdata,
+ const unsigned char *msgdata,
+ const unsigned char *pubkeydata,
+ size_t pubkeylen
+) {
+ secp256k1_ecdsa_signature sig;
+ secp256k1_pubkey pubkey;
+
+ if (!secp256k1_ecdsa_signature_parse_compact(ctx, &sig, sigdata)) {
+ return 0;
+ }
+ if (!secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeydata, pubkeylen)) {
+ return 0;
+ }
+ return secp256k1_ecdsa_verify(ctx, &sig, msgdata, &pubkey);
+}
+
+// secp256k1_ext_reencode_pubkey decodes then encodes a public key. It can be used to
+// convert between public key formats. The input/output formats are chosen depending on the
+// length of the input/output buffers.
+//
+// Returns: 1: conversion successful
+// 0: conversion unsuccessful
+// Args: ctx: pointer to a context object (cannot be NULL)
+// Out: out: output buffer that will contain the reencoded key (cannot be NULL)
+// In: outlen: length of out (33 for compressed keys, 65 for uncompressed keys)
+// pubkeydata: the input public key (cannot be NULL)
+// pubkeylen: length of pubkeydata
+static int secp256k1_ext_reencode_pubkey(
+ const secp256k1_context* ctx,
+ unsigned char *out,
+ size_t outlen,
+ const unsigned char *pubkeydata,
+ size_t pubkeylen
+) {
+ secp256k1_pubkey pubkey;
+
+ if (!secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeydata, pubkeylen)) {
+ return 0;
+ }
+ unsigned int flag = (outlen == 33) ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED;
+ return secp256k1_ec_pubkey_serialize(ctx, out, &outlen, &pubkey, flag);
+}
+
+// secp256k1_ext_scalar_mul multiplies a point by a scalar in constant time.
+//
+// Returns: 1: multiplication was successful
+// 0: scalar was invalid (zero or overflow)
+// Args: ctx: pointer to a context object (cannot be NULL)
+// Out: point: the multiplied point (usually secret)
+// In: point: pointer to a 64-byte public point,
+// encoded as two 256bit big-endian numbers.
+// scalar: a 32-byte scalar with which to multiply the point
+int secp256k1_ext_scalar_mul(const secp256k1_context* ctx, unsigned char *point, const unsigned char *scalar) {
+ int ret = 0;
+ int overflow = 0;
+ secp256k1_fe feX, feY;
+ secp256k1_gej res;
+ secp256k1_ge ge;
+ secp256k1_scalar s;
+ ARG_CHECK(point != NULL);
+ ARG_CHECK(scalar != NULL);
+ (void)ctx;
+
+ secp256k1_fe_set_b32(&feX, point);
+ secp256k1_fe_set_b32(&feY, point+32);
+ secp256k1_ge_set_xy(&ge, &feX, &feY);
+ secp256k1_scalar_set_b32(&s, scalar, &overflow);
+ if (overflow || secp256k1_scalar_is_zero(&s)) {
+ ret = 0;
+ } else {
+ secp256k1_ecmult_const(&res, &ge, &s);
+ secp256k1_ge_set_gej(&ge, &res);
+ /* Note: can't use secp256k1_pubkey_save here because it is not constant time. */
+ secp256k1_fe_normalize(&ge.x);
+ secp256k1_fe_normalize(&ge.y);
+ secp256k1_fe_get_b32(point, &ge.x);
+ secp256k1_fe_get_b32(point+32, &ge.y);
+ ret = 1;
+ }
+ secp256k1_scalar_clear(&s);
+ return ret;
+}
diff --git a/crypto/secp256k1/libsecp256k1/.gitignore b/crypto/secp256k1/libsecp256k1/.gitignore
new file mode 100644
index 000000000..87fea161b
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/.gitignore
@@ -0,0 +1,49 @@
+bench_inv
+bench_ecdh
+bench_sign
+bench_verify
+bench_schnorr_verify
+bench_recover
+bench_internal
+tests
+exhaustive_tests
+gen_context
+*.exe
+*.so
+*.a
+!.gitignore
+
+Makefile
+configure
+.libs/
+Makefile.in
+aclocal.m4
+autom4te.cache/
+config.log
+config.status
+*.tar.gz
+*.la
+libtool
+.deps/
+.dirstamp
+*.lo
+*.o
+*~
+src/libsecp256k1-config.h
+src/libsecp256k1-config.h.in
+src/ecmult_static_context.h
+build-aux/config.guess
+build-aux/config.sub
+build-aux/depcomp
+build-aux/install-sh
+build-aux/ltmain.sh
+build-aux/m4/libtool.m4
+build-aux/m4/lt~obsolete.m4
+build-aux/m4/ltoptions.m4
+build-aux/m4/ltsugar.m4
+build-aux/m4/ltversion.m4
+build-aux/missing
+build-aux/compile
+build-aux/test-driver
+src/stamp-h1
+libsecp256k1.pc
diff --git a/crypto/secp256k1/libsecp256k1/.travis.yml b/crypto/secp256k1/libsecp256k1/.travis.yml
new file mode 100644
index 000000000..243952924
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/.travis.yml
@@ -0,0 +1,69 @@
+language: c
+sudo: false
+addons:
+ apt:
+ packages: libgmp-dev
+compiler:
+ - clang
+ - gcc
+cache:
+ directories:
+ - src/java/guava/
+env:
+ global:
+ - FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no EXPERIMENTAL=no
+ - GUAVA_URL=https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar GUAVA_JAR=src/java/guava/guava-18.0.jar
+ matrix:
+ - SCALAR=32bit RECOVERY=yes
+ - SCALAR=32bit FIELD=32bit ECDH=yes EXPERIMENTAL=yes
+ - SCALAR=64bit
+ - FIELD=64bit RECOVERY=yes
+ - FIELD=64bit ENDOMORPHISM=yes
+ - FIELD=64bit ENDOMORPHISM=yes ECDH=yes EXPERIMENTAL=yes
+ - FIELD=64bit ASM=x86_64
+ - FIELD=64bit ENDOMORPHISM=yes ASM=x86_64
+ - FIELD=32bit ENDOMORPHISM=yes
+ - BIGNUM=no
+ - BIGNUM=no ENDOMORPHISM=yes RECOVERY=yes EXPERIMENTAL=yes
+ - BIGNUM=no STATICPRECOMPUTATION=no
+ - BUILD=distcheck
+ - EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC
+ - EXTRAFLAGS=CFLAGS=-O0
+ - BUILD=check-java ECDH=yes EXPERIMENTAL=yes
+matrix:
+ fast_finish: true
+ include:
+ - compiler: clang
+ env: HOST=i686-linux-gnu ENDOMORPHISM=yes
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - libgmp-dev:i386
+ - compiler: clang
+ env: HOST=i686-linux-gnu
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - compiler: gcc
+ env: HOST=i686-linux-gnu ENDOMORPHISM=yes
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - compiler: gcc
+ env: HOST=i686-linux-gnu
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - libgmp-dev:i386
+before_install: mkdir -p `dirname $GUAVA_JAR`
+install: if [ ! -f $GUAVA_JAR ]; then wget $GUAVA_URL -O $GUAVA_JAR; fi
+before_script: ./autogen.sh
+script:
+ - if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi
+ - if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi
+ - ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY $EXTRAFLAGS $USE_HOST && make -j2 $BUILD
+os: linux
diff --git a/crypto/secp256k1/libsecp256k1/COPYING b/crypto/secp256k1/libsecp256k1/COPYING
new file mode 100644
index 000000000..4522a5990
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/COPYING
@@ -0,0 +1,19 @@
+Copyright (c) 2013 Pieter Wuille
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/crypto/secp256k1/libsecp256k1/Makefile.am b/crypto/secp256k1/libsecp256k1/Makefile.am
new file mode 100644
index 000000000..c071fbe27
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/Makefile.am
@@ -0,0 +1,177 @@
+ACLOCAL_AMFLAGS = -I build-aux/m4
+
+lib_LTLIBRARIES = libsecp256k1.la
+if USE_JNI
+JNI_LIB = libsecp256k1_jni.la
+noinst_LTLIBRARIES = $(JNI_LIB)
+else
+JNI_LIB =
+endif
+include_HEADERS = include/secp256k1.h
+noinst_HEADERS =
+noinst_HEADERS += src/scalar.h
+noinst_HEADERS += src/scalar_4x64.h
+noinst_HEADERS += src/scalar_8x32.h
+noinst_HEADERS += src/scalar_low.h
+noinst_HEADERS += src/scalar_impl.h
+noinst_HEADERS += src/scalar_4x64_impl.h
+noinst_HEADERS += src/scalar_8x32_impl.h
+noinst_HEADERS += src/scalar_low_impl.h
+noinst_HEADERS += src/group.h
+noinst_HEADERS += src/group_impl.h
+noinst_HEADERS += src/num_gmp.h
+noinst_HEADERS += src/num_gmp_impl.h
+noinst_HEADERS += src/ecdsa.h
+noinst_HEADERS += src/ecdsa_impl.h
+noinst_HEADERS += src/eckey.h
+noinst_HEADERS += src/eckey_impl.h
+noinst_HEADERS += src/ecmult.h
+noinst_HEADERS += src/ecmult_impl.h
+noinst_HEADERS += src/ecmult_const.h
+noinst_HEADERS += src/ecmult_const_impl.h
+noinst_HEADERS += src/ecmult_gen.h
+noinst_HEADERS += src/ecmult_gen_impl.h
+noinst_HEADERS += src/num.h
+noinst_HEADERS += src/num_impl.h
+noinst_HEADERS += src/field_10x26.h
+noinst_HEADERS += src/field_10x26_impl.h
+noinst_HEADERS += src/field_5x52.h
+noinst_HEADERS += src/field_5x52_impl.h
+noinst_HEADERS += src/field_5x52_int128_impl.h
+noinst_HEADERS += src/field_5x52_asm_impl.h
+noinst_HEADERS += src/java/org_bitcoin_NativeSecp256k1.h
+noinst_HEADERS += src/java/org_bitcoin_Secp256k1Context.h
+noinst_HEADERS += src/util.h
+noinst_HEADERS += src/testrand.h
+noinst_HEADERS += src/testrand_impl.h
+noinst_HEADERS += src/hash.h
+noinst_HEADERS += src/hash_impl.h
+noinst_HEADERS += src/field.h
+noinst_HEADERS += src/field_impl.h
+noinst_HEADERS += src/bench.h
+noinst_HEADERS += contrib/lax_der_parsing.h
+noinst_HEADERS += contrib/lax_der_parsing.c
+noinst_HEADERS += contrib/lax_der_privatekey_parsing.h
+noinst_HEADERS += contrib/lax_der_privatekey_parsing.c
+
+if USE_EXTERNAL_ASM
+COMMON_LIB = libsecp256k1_common.la
+noinst_LTLIBRARIES = $(COMMON_LIB)
+else
+COMMON_LIB =
+endif
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libsecp256k1.pc
+
+if USE_EXTERNAL_ASM
+if USE_ASM_ARM
+libsecp256k1_common_la_SOURCES = src/asm/field_10x26_arm.s
+endif
+endif
+
+libsecp256k1_la_SOURCES = src/secp256k1.c
+libsecp256k1_la_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/include -I$(top_srcdir)/src $(SECP_INCLUDES)
+libsecp256k1_la_LIBADD = $(JNI_LIB) $(SECP_LIBS) $(COMMON_LIB)
+
+libsecp256k1_jni_la_SOURCES = src/java/org_bitcoin_NativeSecp256k1.c src/java/org_bitcoin_Secp256k1Context.c
+libsecp256k1_jni_la_CPPFLAGS = -DSECP256K1_BUILD $(JNI_INCLUDES)
+
+noinst_PROGRAMS =
+if USE_BENCHMARK
+noinst_PROGRAMS += bench_verify bench_sign bench_internal
+bench_verify_SOURCES = src/bench_verify.c
+bench_verify_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB)
+bench_sign_SOURCES = src/bench_sign.c
+bench_sign_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB)
+bench_internal_SOURCES = src/bench_internal.c
+bench_internal_LDADD = $(SECP_LIBS) $(COMMON_LIB)
+bench_internal_CPPFLAGS = -DSECP256K1_BUILD $(SECP_INCLUDES)
+endif
+
+TESTS =
+if USE_TESTS
+noinst_PROGRAMS += tests
+tests_SOURCES = src/tests.c
+tests_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/src -I$(top_srcdir)/include $(SECP_INCLUDES) $(SECP_TEST_INCLUDES)
+if !ENABLE_COVERAGE
+tests_CPPFLAGS += -DVERIFY
+endif
+tests_LDADD = $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB)
+tests_LDFLAGS = -static
+TESTS += tests
+endif
+
+if USE_EXHAUSTIVE_TESTS
+noinst_PROGRAMS += exhaustive_tests
+exhaustive_tests_SOURCES = src/tests_exhaustive.c
+exhaustive_tests_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/src $(SECP_INCLUDES)
+if !ENABLE_COVERAGE
+exhaustive_tests_CPPFLAGS += -DVERIFY
+endif
+exhaustive_tests_LDADD = $(SECP_LIBS)
+exhaustive_tests_LDFLAGS = -static
+TESTS += exhaustive_tests
+endif
+
+JAVAROOT=src/java
+JAVAORG=org/bitcoin
+JAVA_GUAVA=$(srcdir)/$(JAVAROOT)/guava/guava-18.0.jar
+CLASSPATH_ENV=CLASSPATH=$(JAVA_GUAVA)
+JAVA_FILES= \
+ $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1.java \
+ $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Test.java \
+ $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Util.java \
+ $(JAVAROOT)/$(JAVAORG)/Secp256k1Context.java
+
+if USE_JNI
+
+$(JAVA_GUAVA):
+ @echo Guava is missing. Fetch it via: \
+ wget https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar -O $(@)
+ @false
+
+.stamp-java: $(JAVA_FILES)
+ @echo Compiling $^
+ $(AM_V_at)$(CLASSPATH_ENV) javac $^
+ @touch $@
+
+if USE_TESTS
+
+check-java: libsecp256k1.la $(JAVA_GUAVA) .stamp-java
+ $(AM_V_at)java -Djava.library.path="./:./src:./src/.libs:.libs/" -cp "$(JAVA_GUAVA):$(JAVAROOT)" $(JAVAORG)/NativeSecp256k1Test
+
+endif
+endif
+
+if USE_ECMULT_STATIC_PRECOMPUTATION
+CPPFLAGS_FOR_BUILD +=-I$(top_srcdir)
+CFLAGS_FOR_BUILD += -Wall -Wextra -Wno-unused-function
+
+gen_context_OBJECTS = gen_context.o
+gen_context_BIN = gen_context$(BUILD_EXEEXT)
+gen_%.o: src/gen_%.c
+ $(CC_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -c $< -o $@
+
+$(gen_context_BIN): $(gen_context_OBJECTS)
+ $(CC_FOR_BUILD) $^ -o $@
+
+$(libsecp256k1_la_OBJECTS): src/ecmult_static_context.h
+$(tests_OBJECTS): src/ecmult_static_context.h
+$(bench_internal_OBJECTS): src/ecmult_static_context.h
+
+src/ecmult_static_context.h: $(gen_context_BIN)
+ ./$(gen_context_BIN)
+
+CLEANFILES = $(gen_context_BIN) src/ecmult_static_context.h $(JAVAROOT)/$(JAVAORG)/*.class .stamp-java
+endif
+
+EXTRA_DIST = autogen.sh src/gen_context.c src/basic-config.h $(JAVA_FILES)
+
+if ENABLE_MODULE_ECDH
+include src/modules/ecdh/Makefile.am.include
+endif
+
+if ENABLE_MODULE_RECOVERY
+include src/modules/recovery/Makefile.am.include
+endif
diff --git a/crypto/secp256k1/libsecp256k1/README.md b/crypto/secp256k1/libsecp256k1/README.md
new file mode 100644
index 000000000..8cd344ea8
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/README.md
@@ -0,0 +1,61 @@
+libsecp256k1
+============
+
+[![Build Status](https://travis-ci.org/bitcoin-core/secp256k1.svg?branch=master)](https://travis-ci.org/bitcoin-core/secp256k1)
+
+Optimized C library for EC operations on curve secp256k1.
+
+This library is a work in progress and is being used to research best practices. Use at your own risk.
+
+Features:
+* secp256k1 ECDSA signing/verification and key generation.
+* Adding/multiplying private/public keys.
+* Serialization/parsing of private keys, public keys, signatures.
+* Constant time, constant memory access signing and pubkey generation.
+* Derandomized DSA (via RFC6979 or with a caller provided function.)
+* Very efficient implementation.
+
+Implementation details
+----------------------
+
+* General
+ * No runtime heap allocation.
+ * Extensive testing infrastructure.
+ * Structured to facilitate review and analysis.
+ * Intended to be portable to any system with a C89 compiler and uint64_t support.
+ * Expose only higher level interfaces to minimize the API surface and improve application security. ("Be difficult to use insecurely.")
+* Field operations
+ * Optimized implementation of arithmetic modulo the curve's field size (2^256 - 0x1000003D1).
+ * Using 5 52-bit limbs (including hand-optimized assembly for x86_64, by Diederik Huys).
+ * Using 10 26-bit limbs.
+ * Field inverses and square roots using a sliding window over blocks of 1s (by Peter Dettman).
+* Scalar operations
+ * Optimized implementation without data-dependent branches of arithmetic modulo the curve's order.
+ * Using 4 64-bit limbs (relying on __int128 support in the compiler).
+ * Using 8 32-bit limbs.
+* Group operations
+ * Point addition formula specifically simplified for the curve equation (y^2 = x^3 + 7).
+ * Use addition between points in Jacobian and affine coordinates where possible.
+ * Use a unified addition/doubling formula where necessary to avoid data-dependent branches.
+ * Point/x comparison without a field inversion by comparison in the Jacobian coordinate space.
+* Point multiplication for verification (a*P + b*G).
+ * Use wNAF notation for point multiplicands.
+ * Use a much larger window for multiples of G, using precomputed multiples.
+ * Use Shamir's trick to do the multiplication with the public key and the generator simultaneously.
+ * Optionally (off by default) use secp256k1's efficiently-computable endomorphism to split the P multiplicand into 2 half-sized ones.
+* Point multiplication for signing
+ * Use a precomputed table of multiples of powers of 16 multiplied with the generator, so general multiplication becomes a series of additions.
+ * Access the table with branch-free conditional moves so memory access is uniform.
+ * No data-dependent branches
+ * The precomputed tables add and eventually subtract points for which no known scalar (private key) is known, preventing even an attacker with control over the private key used to control the data internally.
+
+Build steps
+-----------
+
+libsecp256k1 is built using autotools:
+
+ $ ./autogen.sh
+ $ ./configure
+ $ make
+ $ ./tests
+ $ sudo make install # optional
diff --git a/crypto/secp256k1/libsecp256k1/TODO b/crypto/secp256k1/libsecp256k1/TODO
new file mode 100644
index 000000000..a300e1c5e
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/TODO
@@ -0,0 +1,3 @@
+* Unit tests for fieldelem/groupelem, including ones intended to
+ trigger fieldelem's boundary cases.
+* Complete constant-time operations for signing/keygen
diff --git a/crypto/secp256k1/libsecp256k1/autogen.sh b/crypto/secp256k1/libsecp256k1/autogen.sh
new file mode 100644
index 000000000..65286b935
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/autogen.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+set -e
+autoreconf -if --warnings=all
diff --git a/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_jni_include_dir.m4 b/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_jni_include_dir.m4
new file mode 100644
index 000000000..1fc362761
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_jni_include_dir.m4
@@ -0,0 +1,140 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_JNI_INCLUDE_DIR
+#
+# DESCRIPTION
+#
+# AX_JNI_INCLUDE_DIR finds include directories needed for compiling
+# programs using the JNI interface.
+#
+# JNI include directories are usually in the Java distribution. This is
+# deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in
+# that order. When this macro completes, a list of directories is left in
+# the variable JNI_INCLUDE_DIRS.
+#
+# Example usage follows:
+#
+# AX_JNI_INCLUDE_DIR
+#
+# for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
+# do
+# CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
+# done
+#
+# If you want to force a specific compiler:
+#
+# - at the configure.in level, set JAVAC=yourcompiler before calling
+# AX_JNI_INCLUDE_DIR
+#
+# - at the configure level, setenv JAVAC
+#
+# Note: This macro can work with the autoconf M4 macros for Java programs.
+# This particular macro is not part of the original set of macros.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Don Anderson <dda@sleepycat.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 10
+
+AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR])
+AC_DEFUN([AX_JNI_INCLUDE_DIR],[
+
+JNI_INCLUDE_DIRS=""
+
+if test "x$JAVA_HOME" != x; then
+ _JTOPDIR="$JAVA_HOME"
+else
+ if test "x$JAVAC" = x; then
+ JAVAC=javac
+ fi
+ AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no])
+ if test "x$_ACJNI_JAVAC" = xno; then
+ AC_MSG_WARN([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME])
+ fi
+ _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC")
+ _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'`
+fi
+
+case "$host_os" in
+ darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
+ _JINC="$_JTOPDIR/Headers";;
+ *) _JINC="$_JTOPDIR/include";;
+esac
+_AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR])
+_AS_ECHO_LOG([_JINC=$_JINC])
+
+# On Mac OS X 10.6.4, jni.h is a symlink:
+# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h
+# -> ../../CurrentJDK/Headers/jni.h.
+
+AC_CACHE_CHECK(jni headers, ac_cv_jni_header_path,
+[
+if test -f "$_JINC/jni.h"; then
+ ac_cv_jni_header_path="$_JINC"
+ JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path"
+else
+ _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
+ if test -f "$_JTOPDIR/include/jni.h"; then
+ ac_cv_jni_header_path="$_JTOPDIR/include"
+ JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path"
+ else
+ ac_cv_jni_header_path=none
+ fi
+fi
+])
+
+
+
+# get the likely subdirectories for system specific java includes
+case "$host_os" in
+bsdi*) _JNI_INC_SUBDIRS="bsdos";;
+darwin*) _JNI_INC_SUBDIRS="darwin";;
+freebsd*) _JNI_INC_SUBDIRS="freebsd";;
+linux*) _JNI_INC_SUBDIRS="linux genunix";;
+osf*) _JNI_INC_SUBDIRS="alpha";;
+solaris*) _JNI_INC_SUBDIRS="solaris";;
+mingw*) _JNI_INC_SUBDIRS="win32";;
+cygwin*) _JNI_INC_SUBDIRS="win32";;
+*) _JNI_INC_SUBDIRS="genunix";;
+esac
+
+if test "x$ac_cv_jni_header_path" != "xnone"; then
+ # add any subdirectories that are present
+ for JINCSUBDIR in $_JNI_INC_SUBDIRS
+ do
+ if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
+ JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
+ fi
+ done
+fi
+])
+
+# _ACJNI_FOLLOW_SYMLINKS <path>
+# Follows symbolic links on <path>,
+# finally setting variable _ACJNI_FOLLOWED
+# ----------------------------------------
+AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[
+# find the include directory relative to the javac executable
+_cur="$1"
+while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
+ AC_MSG_CHECKING([symlink for $_cur])
+ _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
+ case "$_slink" in
+ /*) _cur="$_slink";;
+ # 'X' avoids triggering unwanted echo options.
+ *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
+ esac
+ AC_MSG_RESULT([$_cur])
+done
+_ACJNI_FOLLOWED="$_cur"
+])# _ACJNI
diff --git a/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_prog_cc_for_build.m4 b/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_prog_cc_for_build.m4
new file mode 100644
index 000000000..77fd346a7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_prog_cc_for_build.m4
@@ -0,0 +1,125 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PROG_CC_FOR_BUILD
+#
+# DESCRIPTION
+#
+# This macro searches for a C compiler that generates native executables,
+# that is a C compiler that surely is not a cross-compiler. This can be
+# useful if you have to generate source code at compile-time like for
+# example GCC does.
+#
+# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything
+# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD).
+# The value of these variables can be overridden by the user by specifying
+# a compiler with an environment variable (like you do for standard CC).
+#
+# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object
+# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if
+# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are
+# substituted in the Makefile.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 8
+
+AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
+AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_CPP])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+dnl Use the standard macros, but make them use other variable names
+dnl
+pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
+pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
+pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
+pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
+pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl
+pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl
+pushdef([ac_cv_objext], ac_cv_build_objext)dnl
+pushdef([ac_exeext], ac_build_exeext)dnl
+pushdef([ac_objext], ac_build_objext)dnl
+pushdef([CC], CC_FOR_BUILD)dnl
+pushdef([CPP], CPP_FOR_BUILD)dnl
+pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl
+pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
+pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl
+pushdef([host], build)dnl
+pushdef([host_alias], build_alias)dnl
+pushdef([host_cpu], build_cpu)dnl
+pushdef([host_vendor], build_vendor)dnl
+pushdef([host_os], build_os)dnl
+pushdef([ac_cv_host], ac_cv_build)dnl
+pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
+pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
+pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
+pushdef([ac_cv_host_os], ac_cv_build_os)dnl
+pushdef([ac_cpp], ac_build_cpp)dnl
+pushdef([ac_compile], ac_build_compile)dnl
+pushdef([ac_link], ac_build_link)dnl
+
+save_cross_compiling=$cross_compiling
+save_ac_tool_prefix=$ac_tool_prefix
+cross_compiling=no
+ac_tool_prefix=
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_EXEEXT
+
+ac_tool_prefix=$save_ac_tool_prefix
+cross_compiling=$save_cross_compiling
+
+dnl Restore the old definitions
+dnl
+popdef([ac_link])dnl
+popdef([ac_compile])dnl
+popdef([ac_cpp])dnl
+popdef([ac_cv_host_os])dnl
+popdef([ac_cv_host_vendor])dnl
+popdef([ac_cv_host_cpu])dnl
+popdef([ac_cv_host_alias])dnl
+popdef([ac_cv_host])dnl
+popdef([host_os])dnl
+popdef([host_vendor])dnl
+popdef([host_cpu])dnl
+popdef([host_alias])dnl
+popdef([host])dnl
+popdef([LDFLAGS])dnl
+popdef([CPPFLAGS])dnl
+popdef([CFLAGS])dnl
+popdef([CPP])dnl
+popdef([CC])dnl
+popdef([ac_objext])dnl
+popdef([ac_exeext])dnl
+popdef([ac_cv_objext])dnl
+popdef([ac_cv_exeext])dnl
+popdef([ac_cv_prog_cc_g])dnl
+popdef([ac_cv_prog_cc_cross])dnl
+popdef([ac_cv_prog_cc_works])dnl
+popdef([ac_cv_prog_gcc])dnl
+popdef([ac_cv_prog_CPP])dnl
+
+dnl Finally, set Makefile variables
+dnl
+BUILD_EXEEXT=$ac_build_exeext
+BUILD_OBJEXT=$ac_build_objext
+AC_SUBST(BUILD_EXEEXT)dnl
+AC_SUBST(BUILD_OBJEXT)dnl
+AC_SUBST([CFLAGS_FOR_BUILD])dnl
+AC_SUBST([CPPFLAGS_FOR_BUILD])dnl
+AC_SUBST([LDFLAGS_FOR_BUILD])dnl
+])
diff --git a/crypto/secp256k1/libsecp256k1/build-aux/m4/bitcoin_secp.m4 b/crypto/secp256k1/libsecp256k1/build-aux/m4/bitcoin_secp.m4
new file mode 100644
index 000000000..b74acb8c1
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/build-aux/m4/bitcoin_secp.m4
@@ -0,0 +1,69 @@
+dnl libsecp25k1 helper checks
+AC_DEFUN([SECP_INT128_CHECK],[
+has_int128=$ac_cv_type___int128
+])
+
+dnl escape "$0x" below using the m4 quadrigaph @S|@, and escape it again with a \ for the shell.
+AC_DEFUN([SECP_64BIT_ASM_CHECK],[
+AC_MSG_CHECKING(for x86_64 assembly availability)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdint.h>]],[[
+ uint64_t a = 11, tmp;
+ __asm__ __volatile__("movq \@S|@0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx");
+ ]])],[has_64bit_asm=yes],[has_64bit_asm=no])
+AC_MSG_RESULT([$has_64bit_asm])
+])
+
+dnl
+AC_DEFUN([SECP_OPENSSL_CHECK],[
+ has_libcrypto=no
+ m4_ifdef([PKG_CHECK_MODULES],[
+ PKG_CHECK_MODULES([CRYPTO], [libcrypto], [has_libcrypto=yes],[has_libcrypto=no])
+ if test x"$has_libcrypto" = x"yes"; then
+ TEMP_LIBS="$LIBS"
+ LIBS="$LIBS $CRYPTO_LIBS"
+ AC_CHECK_LIB(crypto, main,[AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed])],[has_libcrypto=no])
+ LIBS="$TEMP_LIBS"
+ fi
+ ])
+ if test x$has_libcrypto = xno; then
+ AC_CHECK_HEADER(openssl/crypto.h,[
+ AC_CHECK_LIB(crypto, main,[
+ has_libcrypto=yes
+ CRYPTO_LIBS=-lcrypto
+ AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed])
+ ])
+ ])
+ LIBS=
+ fi
+if test x"$has_libcrypto" = x"yes" && test x"$has_openssl_ec" = x; then
+ AC_MSG_CHECKING(for EC functions in libcrypto)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <openssl/ec.h>
+ #include <openssl/ecdsa.h>
+ #include <openssl/obj_mac.h>]],[[
+ EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1);
+ ECDSA_sign(0, NULL, 0, NULL, NULL, eckey);
+ ECDSA_verify(0, NULL, 0, NULL, 0, eckey);
+ EC_KEY_free(eckey);
+ ECDSA_SIG *sig_openssl;
+ sig_openssl = ECDSA_SIG_new();
+ (void)sig_openssl->r;
+ ECDSA_SIG_free(sig_openssl);
+ ]])],[has_openssl_ec=yes],[has_openssl_ec=no])
+ AC_MSG_RESULT([$has_openssl_ec])
+fi
+])
+
+dnl
+AC_DEFUN([SECP_GMP_CHECK],[
+if test x"$has_gmp" != x"yes"; then
+ CPPFLAGS_TEMP="$CPPFLAGS"
+ CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS"
+ LIBS_TEMP="$LIBS"
+ LIBS="$GMP_LIBS $LIBS"
+ AC_CHECK_HEADER(gmp.h,[AC_CHECK_LIB(gmp, __gmpz_init,[has_gmp=yes; GMP_LIBS="$GMP_LIBS -lgmp"; AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])])])
+ CPPFLAGS="$CPPFLAGS_TEMP"
+ LIBS="$LIBS_TEMP"
+fi
+])
diff --git a/crypto/secp256k1/libsecp256k1/configure.ac b/crypto/secp256k1/libsecp256k1/configure.ac
new file mode 100644
index 000000000..e5fcbcb4e
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/configure.ac
@@ -0,0 +1,493 @@
+AC_PREREQ([2.60])
+AC_INIT([libsecp256k1],[0.1])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([build-aux/m4])
+AC_CANONICAL_HOST
+AH_TOP([#ifndef LIBSECP256K1_CONFIG_H])
+AH_TOP([#define LIBSECP256K1_CONFIG_H])
+AH_BOTTOM([#endif /*LIBSECP256K1_CONFIG_H*/])
+AM_INIT_AUTOMAKE([foreign subdir-objects])
+LT_INIT
+
+dnl make the compilation flags quiet unless V=1 is used
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+PKG_PROG_PKG_CONFIG
+
+AC_PATH_TOOL(AR, ar)
+AC_PATH_TOOL(RANLIB, ranlib)
+AC_PATH_TOOL(STRIP, strip)
+AX_PROG_CC_FOR_BUILD
+
+if test "x$CFLAGS" = "x"; then
+ CFLAGS="-g"
+fi
+
+AM_PROG_CC_C_O
+
+AC_PROG_CC_C89
+if test x"$ac_cv_prog_cc_c89" = x"no"; then
+ AC_MSG_ERROR([c89 compiler support required])
+fi
+AM_PROG_AS
+
+case $host_os in
+ *darwin*)
+ if test x$cross_compiling != xyes; then
+ AC_PATH_PROG([BREW],brew,)
+ if test x$BREW != x; then
+ dnl These Homebrew packages may be keg-only, meaning that they won't be found
+ dnl in expected paths because they may conflict with system files. Ask
+ dnl Homebrew where each one is located, then adjust paths accordingly.
+
+ openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
+ gmp_prefix=`$BREW --prefix gmp 2>/dev/null`
+ if test x$openssl_prefix != x; then
+ PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
+ export PKG_CONFIG_PATH
+ fi
+ if test x$gmp_prefix != x; then
+ GMP_CPPFLAGS="-I$gmp_prefix/include"
+ GMP_LIBS="-L$gmp_prefix/lib"
+ fi
+ else
+ AC_PATH_PROG([PORT],port,)
+ dnl if homebrew isn't installed and macports is, add the macports default paths
+ dnl as a last resort.
+ if test x$PORT != x; then
+ CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
+ LDFLAGS="$LDFLAGS -L/opt/local/lib"
+ fi
+ fi
+ fi
+ ;;
+esac
+
+CFLAGS="$CFLAGS -W"
+
+warn_CFLAGS="-std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long -Wno-overlength-strings"
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $warn_CFLAGS"
+AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
+ [ AC_MSG_RESULT([yes]) ],
+ [ AC_MSG_RESULT([no])
+ CFLAGS="$saved_CFLAGS"
+ ])
+
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fvisibility=hidden"
+AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
+ [ AC_MSG_RESULT([yes]) ],
+ [ AC_MSG_RESULT([no])
+ CFLAGS="$saved_CFLAGS"
+ ])
+
+AC_ARG_ENABLE(benchmark,
+ AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is no)]),
+ [use_benchmark=$enableval],
+ [use_benchmark=no])
+
+AC_ARG_ENABLE(coverage,
+ AS_HELP_STRING([--enable-coverage],[enable compiler flags to support kcov coverage analysis]),
+ [enable_coverage=$enableval],
+ [enable_coverage=no])
+
+AC_ARG_ENABLE(tests,
+ AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
+ [use_tests=$enableval],
+ [use_tests=yes])
+
+AC_ARG_ENABLE(openssl_tests,
+ AS_HELP_STRING([--enable-openssl-tests],[enable OpenSSL tests, if OpenSSL is available (default is auto)]),
+ [enable_openssl_tests=$enableval],
+ [enable_openssl_tests=auto])
+
+AC_ARG_ENABLE(experimental,
+ AS_HELP_STRING([--enable-experimental],[allow experimental configure options (default is no)]),
+ [use_experimental=$enableval],
+ [use_experimental=no])
+
+AC_ARG_ENABLE(exhaustive_tests,
+ AS_HELP_STRING([--enable-exhaustive-tests],[compile exhaustive tests (default is yes)]),
+ [use_exhaustive_tests=$enableval],
+ [use_exhaustive_tests=yes])
+
+AC_ARG_ENABLE(endomorphism,
+ AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]),
+ [use_endomorphism=$enableval],
+ [use_endomorphism=no])
+
+AC_ARG_ENABLE(ecmult_static_precomputation,
+ AS_HELP_STRING([--enable-ecmult-static-precomputation],[enable precomputed ecmult table for signing (default is yes)]),
+ [use_ecmult_static_precomputation=$enableval],
+ [use_ecmult_static_precomputation=auto])
+
+AC_ARG_ENABLE(module_ecdh,
+ AS_HELP_STRING([--enable-module-ecdh],[enable ECDH shared secret computation (experimental)]),
+ [enable_module_ecdh=$enableval],
+ [enable_module_ecdh=no])
+
+AC_ARG_ENABLE(module_recovery,
+ AS_HELP_STRING([--enable-module-recovery],[enable ECDSA pubkey recovery module (default is no)]),
+ [enable_module_recovery=$enableval],
+ [enable_module_recovery=no])
+
+AC_ARG_ENABLE(jni,
+ AS_HELP_STRING([--enable-jni],[enable libsecp256k1_jni (default is auto)]),
+ [use_jni=$enableval],
+ [use_jni=auto])
+
+AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=64bit|32bit|auto],
+[Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto])
+
+AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|no|auto],
+[Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto])
+
+AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto],
+[Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto])
+
+AC_ARG_WITH([asm], [AS_HELP_STRING([--with-asm=x86_64|arm|no|auto]
+[Specify assembly optimizations to use. Default is auto (experimental: arm)])],[req_asm=$withval], [req_asm=auto])
+
+AC_CHECK_TYPES([__int128])
+
+AC_MSG_CHECKING([for __builtin_expect])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])],
+ [ AC_MSG_RESULT([yes]);AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]) ],
+ [ AC_MSG_RESULT([no])
+ ])
+
+if test x"$enable_coverage" = x"yes"; then
+ AC_DEFINE(COVERAGE, 1, [Define this symbol to compile out all VERIFY code])
+ CFLAGS="$CFLAGS -O0 --coverage"
+ LDFLAGS="--coverage"
+else
+ CFLAGS="$CFLAGS -O3"
+fi
+
+if test x"$use_ecmult_static_precomputation" != x"no"; then
+ save_cross_compiling=$cross_compiling
+ cross_compiling=no
+ TEMP_CC="$CC"
+ CC="$CC_FOR_BUILD"
+ AC_MSG_CHECKING([native compiler: ${CC_FOR_BUILD}])
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([], [return 0])],
+ [working_native_cc=yes],
+ [working_native_cc=no],[dnl])
+ CC="$TEMP_CC"
+ cross_compiling=$save_cross_compiling
+
+ if test x"$working_native_cc" = x"no"; then
+ set_precomp=no
+ if test x"$use_ecmult_static_precomputation" = x"yes"; then
+ AC_MSG_ERROR([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD])
+ else
+ AC_MSG_RESULT([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD])
+ fi
+ else
+ AC_MSG_RESULT([ok])
+ set_precomp=yes
+ fi
+else
+ set_precomp=no
+fi
+
+if test x"$req_asm" = x"auto"; then
+ SECP_64BIT_ASM_CHECK
+ if test x"$has_64bit_asm" = x"yes"; then
+ set_asm=x86_64
+ fi
+ if test x"$set_asm" = x; then
+ set_asm=no
+ fi
+else
+ set_asm=$req_asm
+ case $set_asm in
+ x86_64)
+ SECP_64BIT_ASM_CHECK
+ if test x"$has_64bit_asm" != x"yes"; then
+ AC_MSG_ERROR([x86_64 assembly optimization requested but not available])
+ fi
+ ;;
+ arm)
+ ;;
+ no)
+ ;;
+ *)
+ AC_MSG_ERROR([invalid assembly optimization selection])
+ ;;
+ esac
+fi
+
+if test x"$req_field" = x"auto"; then
+ if test x"set_asm" = x"x86_64"; then
+ set_field=64bit
+ fi
+ if test x"$set_field" = x; then
+ SECP_INT128_CHECK
+ if test x"$has_int128" = x"yes"; then
+ set_field=64bit
+ fi
+ fi
+ if test x"$set_field" = x; then
+ set_field=32bit
+ fi
+else
+ set_field=$req_field
+ case $set_field in
+ 64bit)
+ if test x"$set_asm" != x"x86_64"; then
+ SECP_INT128_CHECK
+ if test x"$has_int128" != x"yes"; then
+ AC_MSG_ERROR([64bit field explicitly requested but neither __int128 support or x86_64 assembly available])
+ fi
+ fi
+ ;;
+ 32bit)
+ ;;
+ *)
+ AC_MSG_ERROR([invalid field implementation selection])
+ ;;
+ esac
+fi
+
+if test x"$req_scalar" = x"auto"; then
+ SECP_INT128_CHECK
+ if test x"$has_int128" = x"yes"; then
+ set_scalar=64bit
+ fi
+ if test x"$set_scalar" = x; then
+ set_scalar=32bit
+ fi
+else
+ set_scalar=$req_scalar
+ case $set_scalar in
+ 64bit)
+ SECP_INT128_CHECK
+ if test x"$has_int128" != x"yes"; then
+ AC_MSG_ERROR([64bit scalar explicitly requested but __int128 support not available])
+ fi
+ ;;
+ 32bit)
+ ;;
+ *)
+ AC_MSG_ERROR([invalid scalar implementation selected])
+ ;;
+ esac
+fi
+
+if test x"$req_bignum" = x"auto"; then
+ SECP_GMP_CHECK
+ if test x"$has_gmp" = x"yes"; then
+ set_bignum=gmp
+ fi
+
+ if test x"$set_bignum" = x; then
+ set_bignum=no
+ fi
+else
+ set_bignum=$req_bignum
+ case $set_bignum in
+ gmp)
+ SECP_GMP_CHECK
+ if test x"$has_gmp" != x"yes"; then
+ AC_MSG_ERROR([gmp bignum explicitly requested but libgmp not available])
+ fi
+ ;;
+ no)
+ ;;
+ *)
+ AC_MSG_ERROR([invalid bignum implementation selection])
+ ;;
+ esac
+fi
+
+# select assembly optimization
+use_external_asm=no
+
+case $set_asm in
+x86_64)
+ AC_DEFINE(USE_ASM_X86_64, 1, [Define this symbol to enable x86_64 assembly optimizations])
+ ;;
+arm)
+ use_external_asm=yes
+ ;;
+no)
+ ;;
+*)
+ AC_MSG_ERROR([invalid assembly optimizations])
+ ;;
+esac
+
+# select field implementation
+case $set_field in
+64bit)
+ AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
+ ;;
+32bit)
+ AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation])
+ ;;
+*)
+ AC_MSG_ERROR([invalid field implementation])
+ ;;
+esac
+
+# select bignum implementation
+case $set_bignum in
+gmp)
+ AC_DEFINE(HAVE_LIBGMP, 1, [Define this symbol if libgmp is installed])
+ AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation for num])
+ AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation])
+ AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation])
+ ;;
+no)
+ AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation])
+ AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation])
+ AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation])
+ ;;
+*)
+ AC_MSG_ERROR([invalid bignum implementation])
+ ;;
+esac
+
+#select scalar implementation
+case $set_scalar in
+64bit)
+ AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation])
+ ;;
+32bit)
+ AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation])
+ ;;
+*)
+ AC_MSG_ERROR([invalid scalar implementation])
+ ;;
+esac
+
+if test x"$use_tests" = x"yes"; then
+ SECP_OPENSSL_CHECK
+ if test x"$has_openssl_ec" = x"yes"; then
+ if test x"$enable_openssl_tests" != x"no"; then
+ AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available])
+ SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS"
+ SECP_TEST_LIBS="$CRYPTO_LIBS"
+
+ case $host in
+ *mingw*)
+ SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32"
+ ;;
+ esac
+ fi
+ else
+ if test x"$enable_openssl_tests" = x"yes"; then
+ AC_MSG_ERROR([OpenSSL tests requested but OpenSSL with EC support is not available])
+ fi
+ fi
+else
+ if test x"$enable_openssl_tests" = x"yes"; then
+ AC_MSG_ERROR([OpenSSL tests requested but tests are not enabled])
+ fi
+fi
+
+if test x"$use_jni" != x"no"; then
+ AX_JNI_INCLUDE_DIR
+ have_jni_dependencies=yes
+ if test x"$enable_module_ecdh" = x"no"; then
+ have_jni_dependencies=no
+ fi
+ if test "x$JNI_INCLUDE_DIRS" = "x"; then
+ have_jni_dependencies=no
+ fi
+ if test "x$have_jni_dependencies" = "xno"; then
+ if test x"$use_jni" = x"yes"; then
+ AC_MSG_ERROR([jni support explicitly requested but headers/dependencies were not found. Enable ECDH and try again.])
+ fi
+ AC_MSG_WARN([jni headers/dependencies not found. jni support disabled])
+ use_jni=no
+ else
+ use_jni=yes
+ for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS; do
+ JNI_INCLUDES="$JNI_INCLUDES -I$JNI_INCLUDE_DIR"
+ done
+ fi
+fi
+
+if test x"$set_bignum" = x"gmp"; then
+ SECP_LIBS="$SECP_LIBS $GMP_LIBS"
+ SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS"
+fi
+
+if test x"$use_endomorphism" = x"yes"; then
+ AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization])
+fi
+
+if test x"$set_precomp" = x"yes"; then
+ AC_DEFINE(USE_ECMULT_STATIC_PRECOMPUTATION, 1, [Define this symbol to use a statically generated ecmult table])
+fi
+
+if test x"$enable_module_ecdh" = x"yes"; then
+ AC_DEFINE(ENABLE_MODULE_ECDH, 1, [Define this symbol to enable the ECDH module])
+fi
+
+if test x"$enable_module_recovery" = x"yes"; then
+ AC_DEFINE(ENABLE_MODULE_RECOVERY, 1, [Define this symbol to enable the ECDSA pubkey recovery module])
+fi
+
+AC_C_BIGENDIAN()
+
+if test x"$use_external_asm" = x"yes"; then
+ AC_DEFINE(USE_EXTERNAL_ASM, 1, [Define this symbol if an external (non-inline) assembly implementation is used])
+fi
+
+AC_MSG_NOTICE([Using static precomputation: $set_precomp])
+AC_MSG_NOTICE([Using assembly optimizations: $set_asm])
+AC_MSG_NOTICE([Using field implementation: $set_field])
+AC_MSG_NOTICE([Using bignum implementation: $set_bignum])
+AC_MSG_NOTICE([Using scalar implementation: $set_scalar])
+AC_MSG_NOTICE([Using endomorphism optimizations: $use_endomorphism])
+AC_MSG_NOTICE([Building for coverage analysis: $enable_coverage])
+AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh])
+AC_MSG_NOTICE([Building ECDSA pubkey recovery module: $enable_module_recovery])
+AC_MSG_NOTICE([Using jni: $use_jni])
+
+if test x"$enable_experimental" = x"yes"; then
+ AC_MSG_NOTICE([******])
+ AC_MSG_NOTICE([WARNING: experimental build])
+ AC_MSG_NOTICE([Experimental features do not have stable APIs or properties, and may not be safe for production use.])
+ AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh])
+ AC_MSG_NOTICE([******])
+else
+ if test x"$enable_module_ecdh" = x"yes"; then
+ AC_MSG_ERROR([ECDH module is experimental. Use --enable-experimental to allow.])
+ fi
+ if test x"$set_asm" = x"arm"; then
+ AC_MSG_ERROR([ARM assembly optimization is experimental. Use --enable-experimental to allow.])
+ fi
+fi
+
+AC_CONFIG_HEADERS([src/libsecp256k1-config.h])
+AC_CONFIG_FILES([Makefile libsecp256k1.pc])
+AC_SUBST(JNI_INCLUDES)
+AC_SUBST(SECP_INCLUDES)
+AC_SUBST(SECP_LIBS)
+AC_SUBST(SECP_TEST_LIBS)
+AC_SUBST(SECP_TEST_INCLUDES)
+AM_CONDITIONAL([ENABLE_COVERAGE], [test x"$enable_coverage" = x"yes"])
+AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"])
+AM_CONDITIONAL([USE_EXHAUSTIVE_TESTS], [test x"$use_exhaustive_tests" != x"no"])
+AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"])
+AM_CONDITIONAL([USE_ECMULT_STATIC_PRECOMPUTATION], [test x"$set_precomp" = x"yes"])
+AM_CONDITIONAL([ENABLE_MODULE_ECDH], [test x"$enable_module_ecdh" = x"yes"])
+AM_CONDITIONAL([ENABLE_MODULE_RECOVERY], [test x"$enable_module_recovery" = x"yes"])
+AM_CONDITIONAL([USE_JNI], [test x"$use_jni" == x"yes"])
+AM_CONDITIONAL([USE_EXTERNAL_ASM], [test x"$use_external_asm" = x"yes"])
+AM_CONDITIONAL([USE_ASM_ARM], [test x"$set_asm" = x"arm"])
+
+dnl make sure nothing new is exported so that we don't break the cache
+PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
+unset PKG_CONFIG_PATH
+PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
+
+AC_OUTPUT
diff --git a/crypto/secp256k1/libsecp256k1/contrib/dummy.go b/crypto/secp256k1/libsecp256k1/contrib/dummy.go
new file mode 100644
index 000000000..fda594be9
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/contrib/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package contrib
diff --git a/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.c b/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.c
new file mode 100644
index 000000000..5b141a994
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.c
@@ -0,0 +1,150 @@
+/**********************************************************************
+ * Copyright (c) 2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include <string.h>
+#include <secp256k1.h>
+
+#include "lax_der_parsing.h"
+
+int ecdsa_signature_parse_der_lax(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input, size_t inputlen) {
+ size_t rpos, rlen, spos, slen;
+ size_t pos = 0;
+ size_t lenbyte;
+ unsigned char tmpsig[64] = {0};
+ int overflow = 0;
+
+ /* Hack to initialize sig with a correctly-parsed but invalid signature. */
+ secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);
+
+ /* Sequence tag byte */
+ if (pos == inputlen || input[pos] != 0x30) {
+ return 0;
+ }
+ pos++;
+
+ /* Sequence length bytes */
+ if (pos == inputlen) {
+ return 0;
+ }
+ lenbyte = input[pos++];
+ if (lenbyte & 0x80) {
+ lenbyte -= 0x80;
+ if (pos + lenbyte > inputlen) {
+ return 0;
+ }
+ pos += lenbyte;
+ }
+
+ /* Integer tag byte for R */
+ if (pos == inputlen || input[pos] != 0x02) {
+ return 0;
+ }
+ pos++;
+
+ /* Integer length for R */
+ if (pos == inputlen) {
+ return 0;
+ }
+ lenbyte = input[pos++];
+ if (lenbyte & 0x80) {
+ lenbyte -= 0x80;
+ if (pos + lenbyte > inputlen) {
+ return 0;
+ }
+ while (lenbyte > 0 && input[pos] == 0) {
+ pos++;
+ lenbyte--;
+ }
+ if (lenbyte >= sizeof(size_t)) {
+ return 0;
+ }
+ rlen = 0;
+ while (lenbyte > 0) {
+ rlen = (rlen << 8) + input[pos];
+ pos++;
+ lenbyte--;
+ }
+ } else {
+ rlen = lenbyte;
+ }
+ if (rlen > inputlen - pos) {
+ return 0;
+ }
+ rpos = pos;
+ pos += rlen;
+
+ /* Integer tag byte for S */
+ if (pos == inputlen || input[pos] != 0x02) {
+ return 0;
+ }
+ pos++;
+
+ /* Integer length for S */
+ if (pos == inputlen) {
+ return 0;
+ }
+ lenbyte = input[pos++];
+ if (lenbyte & 0x80) {
+ lenbyte -= 0x80;
+ if (pos + lenbyte > inputlen) {
+ return 0;
+ }
+ while (lenbyte > 0 && input[pos] == 0) {
+ pos++;
+ lenbyte--;
+ }
+ if (lenbyte >= sizeof(size_t)) {
+ return 0;
+ }
+ slen = 0;
+ while (lenbyte > 0) {
+ slen = (slen << 8) + input[pos];
+ pos++;
+ lenbyte--;
+ }
+ } else {
+ slen = lenbyte;
+ }
+ if (slen > inputlen - pos) {
+ return 0;
+ }
+ spos = pos;
+ pos += slen;
+
+ /* Ignore leading zeroes in R */
+ while (rlen > 0 && input[rpos] == 0) {
+ rlen--;
+ rpos++;
+ }
+ /* Copy R value */
+ if (rlen > 32) {
+ overflow = 1;
+ } else {
+ memcpy(tmpsig + 32 - rlen, input + rpos, rlen);
+ }
+
+ /* Ignore leading zeroes in S */
+ while (slen > 0 && input[spos] == 0) {
+ slen--;
+ spos++;
+ }
+ /* Copy S value */
+ if (slen > 32) {
+ overflow = 1;
+ } else {
+ memcpy(tmpsig + 64 - slen, input + spos, slen);
+ }
+
+ if (!overflow) {
+ overflow = !secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);
+ }
+ if (overflow) {
+ memset(tmpsig, 0, 64);
+ secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);
+ }
+ return 1;
+}
+
diff --git a/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.h b/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.h
new file mode 100644
index 000000000..6d27871a7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.h
@@ -0,0 +1,91 @@
+/**********************************************************************
+ * Copyright (c) 2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+/****
+ * Please do not link this file directly. It is not part of the libsecp256k1
+ * project and does not promise any stability in its API, functionality or
+ * presence. Projects which use this code should instead copy this header
+ * and its accompanying .c file directly into their codebase.
+ ****/
+
+/* This file defines a function that parses DER with various errors and
+ * violations. This is not a part of the library itself, because the allowed
+ * violations are chosen arbitrarily and do not follow or establish any
+ * standard.
+ *
+ * In many places it matters that different implementations do not only accept
+ * the same set of valid signatures, but also reject the same set of signatures.
+ * The only means to accomplish that is by strictly obeying a standard, and not
+ * accepting anything else.
+ *
+ * Nonetheless, sometimes there is a need for compatibility with systems that
+ * use signatures which do not strictly obey DER. The snippet below shows how
+ * certain violations are easily supported. You may need to adapt it.
+ *
+ * Do not use this for new systems. Use well-defined DER or compact signatures
+ * instead if you have the choice (see secp256k1_ecdsa_signature_parse_der and
+ * secp256k1_ecdsa_signature_parse_compact).
+ *
+ * The supported violations are:
+ * - All numbers are parsed as nonnegative integers, even though X.609-0207
+ * section 8.3.3 specifies that integers are always encoded as two's
+ * complement.
+ * - Integers can have length 0, even though section 8.3.1 says they can't.
+ * - Integers with overly long padding are accepted, violation section
+ * 8.3.2.
+ * - 127-byte long length descriptors are accepted, even though section
+ * 8.1.3.5.c says that they are not.
+ * - Trailing garbage data inside or after the signature is ignored.
+ * - The length descriptor of the sequence is ignored.
+ *
+ * Compared to for example OpenSSL, many violations are NOT supported:
+ * - Using overly long tag descriptors for the sequence or integers inside,
+ * violating section 8.1.2.2.
+ * - Encoding primitive integers as constructed values, violating section
+ * 8.3.1.
+ */
+
+#ifndef _SECP256K1_CONTRIB_LAX_DER_PARSING_H_
+#define _SECP256K1_CONTRIB_LAX_DER_PARSING_H_
+
+#include <secp256k1.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/** Parse a signature in "lax DER" format
+ *
+ * Returns: 1 when the signature could be parsed, 0 otherwise.
+ * Args: ctx: a secp256k1 context object
+ * Out: sig: a pointer to a signature object
+ * In: input: a pointer to the signature to be parsed
+ * inputlen: the length of the array pointed to be input
+ *
+ * This function will accept any valid DER encoded signature, even if the
+ * encoded numbers are out of range. In addition, it will accept signatures
+ * which violate the DER spec in various ways. Its purpose is to allow
+ * validation of the Bitcoin blockchain, which includes non-DER signatures
+ * from before the network rules were updated to enforce DER. Note that
+ * the set of supported violations is a strict subset of what OpenSSL will
+ * accept.
+ *
+ * After the call, sig will always be initialized. If parsing failed or the
+ * encoded numbers are out of range, signature validation with it is
+ * guaranteed to fail for every message and public key.
+ */
+int ecdsa_signature_parse_der_lax(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_signature* sig,
+ const unsigned char *input,
+ size_t inputlen
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c b/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c
new file mode 100644
index 000000000..c2e63b4b8
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c
@@ -0,0 +1,113 @@
+/**********************************************************************
+ * Copyright (c) 2014, 2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include <string.h>
+#include <secp256k1.h>
+
+#include "lax_der_privatekey_parsing.h"
+
+int ec_privkey_import_der(const secp256k1_context* ctx, unsigned char *out32, const unsigned char *privkey, size_t privkeylen) {
+ const unsigned char *end = privkey + privkeylen;
+ int lenb = 0;
+ int len = 0;
+ memset(out32, 0, 32);
+ /* sequence header */
+ if (end < privkey+1 || *privkey != 0x30) {
+ return 0;
+ }
+ privkey++;
+ /* sequence length constructor */
+ if (end < privkey+1 || !(*privkey & 0x80)) {
+ return 0;
+ }
+ lenb = *privkey & ~0x80; privkey++;
+ if (lenb < 1 || lenb > 2) {
+ return 0;
+ }
+ if (end < privkey+lenb) {
+ return 0;
+ }
+ /* sequence length */
+ len = privkey[lenb-1] | (lenb > 1 ? privkey[lenb-2] << 8 : 0);
+ privkey += lenb;
+ if (end < privkey+len) {
+ return 0;
+ }
+ /* sequence element 0: version number (=1) */
+ if (end < privkey+3 || privkey[0] != 0x02 || privkey[1] != 0x01 || privkey[2] != 0x01) {
+ return 0;
+ }
+ privkey += 3;
+ /* sequence element 1: octet string, up to 32 bytes */
+ if (end < privkey+2 || privkey[0] != 0x04 || privkey[1] > 0x20 || end < privkey+2+privkey[1]) {
+ return 0;
+ }
+ memcpy(out32 + 32 - privkey[1], privkey + 2, privkey[1]);
+ if (!secp256k1_ec_seckey_verify(ctx, out32)) {
+ memset(out32, 0, 32);
+ return 0;
+ }
+ return 1;
+}
+
+int ec_privkey_export_der(const secp256k1_context *ctx, unsigned char *privkey, size_t *privkeylen, const unsigned char *key32, int compressed) {
+ secp256k1_pubkey pubkey;
+ size_t pubkeylen = 0;
+ if (!secp256k1_ec_pubkey_create(ctx, &pubkey, key32)) {
+ *privkeylen = 0;
+ return 0;
+ }
+ if (compressed) {
+ static const unsigned char begin[] = {
+ 0x30,0x81,0xD3,0x02,0x01,0x01,0x04,0x20
+ };
+ static const unsigned char middle[] = {
+ 0xA0,0x81,0x85,0x30,0x81,0x82,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0x48,
+ 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04,
+ 0x21,0x02,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87,
+ 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8,
+ 0x17,0x98,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E,
+ 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x24,0x03,0x22,0x00
+ };
+ unsigned char *ptr = privkey;
+ memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);
+ memcpy(ptr, key32, 32); ptr += 32;
+ memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);
+ pubkeylen = 33;
+ secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED);
+ ptr += pubkeylen;
+ *privkeylen = ptr - privkey;
+ } else {
+ static const unsigned char begin[] = {
+ 0x30,0x82,0x01,0x13,0x02,0x01,0x01,0x04,0x20
+ };
+ static const unsigned char middle[] = {
+ 0xA0,0x81,0xA5,0x30,0x81,0xA2,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0x48,
+ 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04,
+ 0x41,0x04,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87,
+ 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8,
+ 0x17,0x98,0x48,0x3A,0xDA,0x77,0x26,0xA3,0xC4,0x65,0x5D,0xA4,0xFB,0xFC,0x0E,0x11,
+ 0x08,0xA8,0xFD,0x17,0xB4,0x48,0xA6,0x85,0x54,0x19,0x9C,0x47,0xD0,0x8F,0xFB,0x10,
+ 0xD4,0xB8,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E,
+ 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x44,0x03,0x42,0x00
+ };
+ unsigned char *ptr = privkey;
+ memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);
+ memcpy(ptr, key32, 32); ptr += 32;
+ memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);
+ pubkeylen = 65;
+ secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_UNCOMPRESSED);
+ ptr += pubkeylen;
+ *privkeylen = ptr - privkey;
+ }
+ return 1;
+}
diff --git a/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h b/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h
new file mode 100644
index 000000000..2fd088f8a
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h
@@ -0,0 +1,90 @@
+/**********************************************************************
+ * Copyright (c) 2014, 2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+/****
+ * Please do not link this file directly. It is not part of the libsecp256k1
+ * project and does not promise any stability in its API, functionality or
+ * presence. Projects which use this code should instead copy this header
+ * and its accompanying .c file directly into their codebase.
+ ****/
+
+/* This file contains code snippets that parse DER private keys with
+ * various errors and violations. This is not a part of the library
+ * itself, because the allowed violations are chosen arbitrarily and
+ * do not follow or establish any standard.
+ *
+ * It also contains code to serialize private keys in a compatible
+ * manner.
+ *
+ * These functions are meant for compatibility with applications
+ * that require BER encoded keys. When working with secp256k1-specific
+ * code, the simple 32-byte private keys normally used by the
+ * library are sufficient.
+ */
+
+#ifndef _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_
+#define _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_
+
+#include <secp256k1.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/** Export a private key in DER format.
+ *
+ * Returns: 1 if the private key was valid.
+ * Args: ctx: pointer to a context object, initialized for signing (cannot
+ * be NULL)
+ * Out: privkey: pointer to an array for storing the private key in BER.
+ * Should have space for 279 bytes, and cannot be NULL.
+ * privkeylen: Pointer to an int where the length of the private key in
+ * privkey will be stored.
+ * In: seckey: pointer to a 32-byte secret key to export.
+ * compressed: 1 if the key should be exported in
+ * compressed format, 0 otherwise
+ *
+ * This function is purely meant for compatibility with applications that
+ * require BER encoded keys. When working with secp256k1-specific code, the
+ * simple 32-byte private keys are sufficient.
+ *
+ * Note that this function does not guarantee correct DER output. It is
+ * guaranteed to be parsable by secp256k1_ec_privkey_import_der
+ */
+SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der(
+ const secp256k1_context* ctx,
+ unsigned char *privkey,
+ size_t *privkeylen,
+ const unsigned char *seckey,
+ int compressed
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+/** Import a private key in DER format.
+ * Returns: 1 if a private key was extracted.
+ * Args: ctx: pointer to a context object (cannot be NULL).
+ * Out: seckey: pointer to a 32-byte array for storing the private key.
+ * (cannot be NULL).
+ * In: privkey: pointer to a private key in DER format (cannot be NULL).
+ * privkeylen: length of the DER private key pointed to be privkey.
+ *
+ * This function will accept more than just strict DER, and even allow some BER
+ * violations. The public key stored inside the DER-encoded private key is not
+ * verified for correctness, nor are the curve parameters. Use this function
+ * only if you know in advance it is supposed to contain a secp256k1 private
+ * key.
+ */
+SECP256K1_WARN_UNUSED_RESULT int ec_privkey_import_der(
+ const secp256k1_context* ctx,
+ unsigned char *seckey,
+ const unsigned char *privkey,
+ size_t privkeylen
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/dummy.go b/crypto/secp256k1/libsecp256k1/dummy.go
new file mode 100644
index 000000000..379b16992
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package libsecp256k1
diff --git a/crypto/secp256k1/libsecp256k1/include/dummy.go b/crypto/secp256k1/libsecp256k1/include/dummy.go
new file mode 100644
index 000000000..5af540c73
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/include/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package include
diff --git a/crypto/secp256k1/libsecp256k1/include/secp256k1.h b/crypto/secp256k1/libsecp256k1/include/secp256k1.h
new file mode 100644
index 000000000..f268e309d
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/include/secp256k1.h
@@ -0,0 +1,577 @@
+#ifndef _SECP256K1_
+# define _SECP256K1_
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+#include <stddef.h>
+
+/* These rules specify the order of arguments in API calls:
+ *
+ * 1. Context pointers go first, followed by output arguments, combined
+ * output/input arguments, and finally input-only arguments.
+ * 2. Array lengths always immediately the follow the argument whose length
+ * they describe, even if this violates rule 1.
+ * 3. Within the OUT/OUTIN/IN groups, pointers to data that is typically generated
+ * later go first. This means: signatures, public nonces, private nonces,
+ * messages, public keys, secret keys, tweaks.
+ * 4. Arguments that are not data pointers go last, from more complex to less
+ * complex: function pointers, algorithm names, messages, void pointers,
+ * counts, flags, booleans.
+ * 5. Opaque data pointers follow the function pointer they are to be passed to.
+ */
+
+/** Opaque data structure that holds context information (precomputed tables etc.).
+ *
+ * The purpose of context structures is to cache large precomputed data tables
+ * that are expensive to construct, and also to maintain the randomization data
+ * for blinding.
+ *
+ * Do not create a new context object for each operation, as construction is
+ * far slower than all other API calls (~100 times slower than an ECDSA
+ * verification).
+ *
+ * A constructed context can safely be used from multiple threads
+ * simultaneously, but API call that take a non-const pointer to a context
+ * need exclusive access to it. In particular this is the case for
+ * secp256k1_context_destroy and secp256k1_context_randomize.
+ *
+ * Regarding randomization, either do it once at creation time (in which case
+ * you do not need any locking for the other calls), or use a read-write lock.
+ */
+typedef struct secp256k1_context_struct secp256k1_context;
+
+/** Opaque data structure that holds a parsed and valid public key.
+ *
+ * The exact representation of data inside is implementation defined and not
+ * guaranteed to be portable between different platforms or versions. It is
+ * however guaranteed to be 64 bytes in size, and can be safely copied/moved.
+ * If you need to convert to a format suitable for storage, transmission, or
+ * comparison, use secp256k1_ec_pubkey_serialize and secp256k1_ec_pubkey_parse.
+ */
+typedef struct {
+ unsigned char data[64];
+} secp256k1_pubkey;
+
+/** Opaque data structured that holds a parsed ECDSA signature.
+ *
+ * The exact representation of data inside is implementation defined and not
+ * guaranteed to be portable between different platforms or versions. It is
+ * however guaranteed to be 64 bytes in size, and can be safely copied/moved.
+ * If you need to convert to a format suitable for storage, transmission, or
+ * comparison, use the secp256k1_ecdsa_signature_serialize_* and
+ * secp256k1_ecdsa_signature_serialize_* functions.
+ */
+typedef struct {
+ unsigned char data[64];
+} secp256k1_ecdsa_signature;
+
+/** A pointer to a function to deterministically generate a nonce.
+ *
+ * Returns: 1 if a nonce was successfully generated. 0 will cause signing to fail.
+ * Out: nonce32: pointer to a 32-byte array to be filled by the function.
+ * In: msg32: the 32-byte message hash being verified (will not be NULL)
+ * key32: pointer to a 32-byte secret key (will not be NULL)
+ * algo16: pointer to a 16-byte array describing the signature
+ * algorithm (will be NULL for ECDSA for compatibility).
+ * data: Arbitrary data pointer that is passed through.
+ * attempt: how many iterations we have tried to find a nonce.
+ * This will almost always be 0, but different attempt values
+ * are required to result in a different nonce.
+ *
+ * Except for test cases, this function should compute some cryptographic hash of
+ * the message, the algorithm, the key and the attempt.
+ */
+typedef int (*secp256k1_nonce_function)(
+ unsigned char *nonce32,
+ const unsigned char *msg32,
+ const unsigned char *key32,
+ const unsigned char *algo16,
+ void *data,
+ unsigned int attempt
+);
+
+# if !defined(SECP256K1_GNUC_PREREQ)
+# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
+# define SECP256K1_GNUC_PREREQ(_maj,_min) \
+ ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
+# else
+# define SECP256K1_GNUC_PREREQ(_maj,_min) 0
+# endif
+# endif
+
+# if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
+# if SECP256K1_GNUC_PREREQ(2,7)
+# define SECP256K1_INLINE __inline__
+# elif (defined(_MSC_VER))
+# define SECP256K1_INLINE __inline
+# else
+# define SECP256K1_INLINE
+# endif
+# else
+# define SECP256K1_INLINE inline
+# endif
+
+#ifndef SECP256K1_API
+# if defined(_WIN32)
+# ifdef SECP256K1_BUILD
+# define SECP256K1_API __declspec(dllexport)
+# else
+# define SECP256K1_API
+# endif
+# elif defined(__GNUC__) && defined(SECP256K1_BUILD)
+# define SECP256K1_API __attribute__ ((visibility ("default")))
+# else
+# define SECP256K1_API
+# endif
+#endif
+
+/**Warning attributes
+ * NONNULL is not used if SECP256K1_BUILD is set to avoid the compiler optimizing out
+ * some paranoid null checks. */
+# if defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)
+# define SECP256K1_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
+# else
+# define SECP256K1_WARN_UNUSED_RESULT
+# endif
+# if !defined(SECP256K1_BUILD) && defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)
+# define SECP256K1_ARG_NONNULL(_x) __attribute__ ((__nonnull__(_x)))
+# else
+# define SECP256K1_ARG_NONNULL(_x)
+# endif
+
+/** All flags' lower 8 bits indicate what they're for. Do not use directly. */
+#define SECP256K1_FLAGS_TYPE_MASK ((1 << 8) - 1)
+#define SECP256K1_FLAGS_TYPE_CONTEXT (1 << 0)
+#define SECP256K1_FLAGS_TYPE_COMPRESSION (1 << 1)
+/** The higher bits contain the actual data. Do not use directly. */
+#define SECP256K1_FLAGS_BIT_CONTEXT_VERIFY (1 << 8)
+#define SECP256K1_FLAGS_BIT_CONTEXT_SIGN (1 << 9)
+#define SECP256K1_FLAGS_BIT_COMPRESSION (1 << 8)
+
+/** Flags to pass to secp256k1_context_create. */
+#define SECP256K1_CONTEXT_VERIFY (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_VERIFY)
+#define SECP256K1_CONTEXT_SIGN (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_SIGN)
+#define SECP256K1_CONTEXT_NONE (SECP256K1_FLAGS_TYPE_CONTEXT)
+
+/** Flag to pass to secp256k1_ec_pubkey_serialize and secp256k1_ec_privkey_export. */
+#define SECP256K1_EC_COMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION | SECP256K1_FLAGS_BIT_COMPRESSION)
+#define SECP256K1_EC_UNCOMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION)
+
+/** Create a secp256k1 context object.
+ *
+ * Returns: a newly created context object.
+ * In: flags: which parts of the context to initialize.
+ */
+SECP256K1_API secp256k1_context* secp256k1_context_create(
+ unsigned int flags
+) SECP256K1_WARN_UNUSED_RESULT;
+
+/** Copies a secp256k1 context object.
+ *
+ * Returns: a newly created context object.
+ * Args: ctx: an existing context to copy (cannot be NULL)
+ */
+SECP256K1_API secp256k1_context* secp256k1_context_clone(
+ const secp256k1_context* ctx
+) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT;
+
+/** Destroy a secp256k1 context object.
+ *
+ * The context pointer may not be used afterwards.
+ * Args: ctx: an existing context to destroy (cannot be NULL)
+ */
+SECP256K1_API void secp256k1_context_destroy(
+ secp256k1_context* ctx
+);
+
+/** Set a callback function to be called when an illegal argument is passed to
+ * an API call. It will only trigger for violations that are mentioned
+ * explicitly in the header.
+ *
+ * The philosophy is that these shouldn't be dealt with through a
+ * specific return value, as calling code should not have branches to deal with
+ * the case that this code itself is broken.
+ *
+ * On the other hand, during debug stage, one would want to be informed about
+ * such mistakes, and the default (crashing) may be inadvisable.
+ * When this callback is triggered, the API function called is guaranteed not
+ * to cause a crash, though its return value and output arguments are
+ * undefined.
+ *
+ * Args: ctx: an existing context object (cannot be NULL)
+ * In: fun: a pointer to a function to call when an illegal argument is
+ * passed to the API, taking a message and an opaque pointer
+ * (NULL restores a default handler that calls abort).
+ * data: the opaque pointer to pass to fun above.
+ */
+SECP256K1_API void secp256k1_context_set_illegal_callback(
+ secp256k1_context* ctx,
+ void (*fun)(const char* message, void* data),
+ const void* data
+) SECP256K1_ARG_NONNULL(1);
+
+/** Set a callback function to be called when an internal consistency check
+ * fails. The default is crashing.
+ *
+ * This can only trigger in case of a hardware failure, miscompilation,
+ * memory corruption, serious bug in the library, or other error would can
+ * otherwise result in undefined behaviour. It will not trigger due to mere
+ * incorrect usage of the API (see secp256k1_context_set_illegal_callback
+ * for that). After this callback returns, anything may happen, including
+ * crashing.
+ *
+ * Args: ctx: an existing context object (cannot be NULL)
+ * In: fun: a pointer to a function to call when an internal error occurs,
+ * taking a message and an opaque pointer (NULL restores a default
+ * handler that calls abort).
+ * data: the opaque pointer to pass to fun above.
+ */
+SECP256K1_API void secp256k1_context_set_error_callback(
+ secp256k1_context* ctx,
+ void (*fun)(const char* message, void* data),
+ const void* data
+) SECP256K1_ARG_NONNULL(1);
+
+/** Parse a variable-length public key into the pubkey object.
+ *
+ * Returns: 1 if the public key was fully valid.
+ * 0 if the public key could not be parsed or is invalid.
+ * Args: ctx: a secp256k1 context object.
+ * Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a
+ * parsed version of input. If not, its value is undefined.
+ * In: input: pointer to a serialized public key
+ * inputlen: length of the array pointed to by input
+ *
+ * This function supports parsing compressed (33 bytes, header byte 0x02 or
+ * 0x03), uncompressed (65 bytes, header byte 0x04), or hybrid (65 bytes, header
+ * byte 0x06 or 0x07) format public keys.
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse(
+ const secp256k1_context* ctx,
+ secp256k1_pubkey* pubkey,
+ const unsigned char *input,
+ size_t inputlen
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Serialize a pubkey object into a serialized byte sequence.
+ *
+ * Returns: 1 always.
+ * Args: ctx: a secp256k1 context object.
+ * Out: output: a pointer to a 65-byte (if compressed==0) or 33-byte (if
+ * compressed==1) byte array to place the serialized key
+ * in.
+ * In/Out: outputlen: a pointer to an integer which is initially set to the
+ * size of output, and is overwritten with the written
+ * size.
+ * In: pubkey: a pointer to a secp256k1_pubkey containing an
+ * initialized public key.
+ * flags: SECP256K1_EC_COMPRESSED if serialization should be in
+ * compressed format, otherwise SECP256K1_EC_UNCOMPRESSED.
+ */
+SECP256K1_API int secp256k1_ec_pubkey_serialize(
+ const secp256k1_context* ctx,
+ unsigned char *output,
+ size_t *outputlen,
+ const secp256k1_pubkey* pubkey,
+ unsigned int flags
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+/** Parse an ECDSA signature in compact (64 bytes) format.
+ *
+ * Returns: 1 when the signature could be parsed, 0 otherwise.
+ * Args: ctx: a secp256k1 context object
+ * Out: sig: a pointer to a signature object
+ * In: input64: a pointer to the 64-byte array to parse
+ *
+ * The signature must consist of a 32-byte big endian R value, followed by a
+ * 32-byte big endian S value. If R or S fall outside of [0..order-1], the
+ * encoding is invalid. R and S with value 0 are allowed in the encoding.
+ *
+ * After the call, sig will always be initialized. If parsing failed or R or
+ * S are zero, the resulting sig value is guaranteed to fail validation for any
+ * message and public key.
+ */
+SECP256K1_API int secp256k1_ecdsa_signature_parse_compact(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_signature* sig,
+ const unsigned char *input64
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Parse a DER ECDSA signature.
+ *
+ * Returns: 1 when the signature could be parsed, 0 otherwise.
+ * Args: ctx: a secp256k1 context object
+ * Out: sig: a pointer to a signature object
+ * In: input: a pointer to the signature to be parsed
+ * inputlen: the length of the array pointed to be input
+ *
+ * This function will accept any valid DER encoded signature, even if the
+ * encoded numbers are out of range.
+ *
+ * After the call, sig will always be initialized. If parsing failed or the
+ * encoded numbers are out of range, signature validation with it is
+ * guaranteed to fail for every message and public key.
+ */
+SECP256K1_API int secp256k1_ecdsa_signature_parse_der(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_signature* sig,
+ const unsigned char *input,
+ size_t inputlen
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Serialize an ECDSA signature in DER format.
+ *
+ * Returns: 1 if enough space was available to serialize, 0 otherwise
+ * Args: ctx: a secp256k1 context object
+ * Out: output: a pointer to an array to store the DER serialization
+ * In/Out: outputlen: a pointer to a length integer. Initially, this integer
+ * should be set to the length of output. After the call
+ * it will be set to the length of the serialization (even
+ * if 0 was returned).
+ * In: sig: a pointer to an initialized signature object
+ */
+SECP256K1_API int secp256k1_ecdsa_signature_serialize_der(
+ const secp256k1_context* ctx,
+ unsigned char *output,
+ size_t *outputlen,
+ const secp256k1_ecdsa_signature* sig
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+/** Serialize an ECDSA signature in compact (64 byte) format.
+ *
+ * Returns: 1
+ * Args: ctx: a secp256k1 context object
+ * Out: output64: a pointer to a 64-byte array to store the compact serialization
+ * In: sig: a pointer to an initialized signature object
+ *
+ * See secp256k1_ecdsa_signature_parse_compact for details about the encoding.
+ */
+SECP256K1_API int secp256k1_ecdsa_signature_serialize_compact(
+ const secp256k1_context* ctx,
+ unsigned char *output64,
+ const secp256k1_ecdsa_signature* sig
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Verify an ECDSA signature.
+ *
+ * Returns: 1: correct signature
+ * 0: incorrect or unparseable signature
+ * Args: ctx: a secp256k1 context object, initialized for verification.
+ * In: sig: the signature being verified (cannot be NULL)
+ * msg32: the 32-byte message hash being verified (cannot be NULL)
+ * pubkey: pointer to an initialized public key to verify with (cannot be NULL)
+ *
+ * To avoid accepting malleable signatures, only ECDSA signatures in lower-S
+ * form are accepted.
+ *
+ * If you need to accept ECDSA signatures from sources that do not obey this
+ * rule, apply secp256k1_ecdsa_signature_normalize to the signature prior to
+ * validation, but be aware that doing so results in malleable signatures.
+ *
+ * For details, see the comments for that function.
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify(
+ const secp256k1_context* ctx,
+ const secp256k1_ecdsa_signature *sig,
+ const unsigned char *msg32,
+ const secp256k1_pubkey *pubkey
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+/** Convert a signature to a normalized lower-S form.
+ *
+ * Returns: 1 if sigin was not normalized, 0 if it already was.
+ * Args: ctx: a secp256k1 context object
+ * Out: sigout: a pointer to a signature to fill with the normalized form,
+ * or copy if the input was already normalized. (can be NULL if
+ * you're only interested in whether the input was already
+ * normalized).
+ * In: sigin: a pointer to a signature to check/normalize (cannot be NULL,
+ * can be identical to sigout)
+ *
+ * With ECDSA a third-party can forge a second distinct signature of the same
+ * message, given a single initial signature, but without knowing the key. This
+ * is done by negating the S value modulo the order of the curve, 'flipping'
+ * the sign of the random point R which is not included in the signature.
+ *
+ * Forgery of the same message isn't universally problematic, but in systems
+ * where message malleability or uniqueness of signatures is important this can
+ * cause issues. This forgery can be blocked by all verifiers forcing signers
+ * to use a normalized form.
+ *
+ * The lower-S form reduces the size of signatures slightly on average when
+ * variable length encodings (such as DER) are used and is cheap to verify,
+ * making it a good choice. Security of always using lower-S is assured because
+ * anyone can trivially modify a signature after the fact to enforce this
+ * property anyway.
+ *
+ * The lower S value is always between 0x1 and
+ * 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
+ * inclusive.
+ *
+ * No other forms of ECDSA malleability are known and none seem likely, but
+ * there is no formal proof that ECDSA, even with this additional restriction,
+ * is free of other malleability. Commonly used serialization schemes will also
+ * accept various non-unique encodings, so care should be taken when this
+ * property is required for an application.
+ *
+ * The secp256k1_ecdsa_sign function will by default create signatures in the
+ * lower-S form, and secp256k1_ecdsa_verify will not accept others. In case
+ * signatures come from a system that cannot enforce this property,
+ * secp256k1_ecdsa_signature_normalize must be called before verification.
+ */
+SECP256K1_API int secp256k1_ecdsa_signature_normalize(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_signature *sigout,
+ const secp256k1_ecdsa_signature *sigin
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3);
+
+/** An implementation of RFC6979 (using HMAC-SHA256) as nonce generation function.
+ * If a data pointer is passed, it is assumed to be a pointer to 32 bytes of
+ * extra entropy.
+ */
+SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
+
+/** A default safe nonce generation function (currently equal to secp256k1_nonce_function_rfc6979). */
+SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_default;
+
+/** Create an ECDSA signature.
+ *
+ * Returns: 1: signature created
+ * 0: the nonce generation function failed, or the private key was invalid.
+ * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL)
+ * Out: sig: pointer to an array where the signature will be placed (cannot be NULL)
+ * In: msg32: the 32-byte message hash being signed (cannot be NULL)
+ * seckey: pointer to a 32-byte secret key (cannot be NULL)
+ * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used
+ * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL)
+ *
+ * The created signature is always in lower-S form. See
+ * secp256k1_ecdsa_signature_normalize for more details.
+ */
+SECP256K1_API int secp256k1_ecdsa_sign(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_signature *sig,
+ const unsigned char *msg32,
+ const unsigned char *seckey,
+ secp256k1_nonce_function noncefp,
+ const void *ndata
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+/** Verify an ECDSA secret key.
+ *
+ * Returns: 1: secret key is valid
+ * 0: secret key is invalid
+ * Args: ctx: pointer to a context object (cannot be NULL)
+ * In: seckey: pointer to a 32-byte secret key (cannot be NULL)
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify(
+ const secp256k1_context* ctx,
+ const unsigned char *seckey
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
+
+/** Compute the public key for a secret key.
+ *
+ * Returns: 1: secret was valid, public key stores
+ * 0: secret was invalid, try again
+ * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL)
+ * Out: pubkey: pointer to the created public key (cannot be NULL)
+ * In: seckey: pointer to a 32-byte private key (cannot be NULL)
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create(
+ const secp256k1_context* ctx,
+ secp256k1_pubkey *pubkey,
+ const unsigned char *seckey
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Tweak a private key by adding tweak to it.
+ * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
+ * uniformly random 32-byte arrays, or if the resulting private key
+ * would be invalid (only when the tweak is the complement of the
+ * private key). 1 otherwise.
+ * Args: ctx: pointer to a context object (cannot be NULL).
+ * In/Out: seckey: pointer to a 32-byte private key.
+ * In: tweak: pointer to a 32-byte tweak.
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add(
+ const secp256k1_context* ctx,
+ unsigned char *seckey,
+ const unsigned char *tweak
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Tweak a public key by adding tweak times the generator to it.
+ * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
+ * uniformly random 32-byte arrays, or if the resulting public key
+ * would be invalid (only when the tweak is the complement of the
+ * corresponding private key). 1 otherwise.
+ * Args: ctx: pointer to a context object initialized for validation
+ * (cannot be NULL).
+ * In/Out: pubkey: pointer to a public key object.
+ * In: tweak: pointer to a 32-byte tweak.
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add(
+ const secp256k1_context* ctx,
+ secp256k1_pubkey *pubkey,
+ const unsigned char *tweak
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Tweak a private key by multiplying it by a tweak.
+ * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
+ * uniformly random 32-byte arrays, or equal to zero. 1 otherwise.
+ * Args: ctx: pointer to a context object (cannot be NULL).
+ * In/Out: seckey: pointer to a 32-byte private key.
+ * In: tweak: pointer to a 32-byte tweak.
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul(
+ const secp256k1_context* ctx,
+ unsigned char *seckey,
+ const unsigned char *tweak
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Tweak a public key by multiplying it by a tweak value.
+ * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
+ * uniformly random 32-byte arrays, or equal to zero. 1 otherwise.
+ * Args: ctx: pointer to a context object initialized for validation
+ * (cannot be NULL).
+ * In/Out: pubkey: pointer to a public key obkect.
+ * In: tweak: pointer to a 32-byte tweak.
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul(
+ const secp256k1_context* ctx,
+ secp256k1_pubkey *pubkey,
+ const unsigned char *tweak
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Updates the context randomization.
+ * Returns: 1: randomization successfully updated
+ * 0: error
+ * Args: ctx: pointer to a context object (cannot be NULL)
+ * In: seed32: pointer to a 32-byte random seed (NULL resets to initial state)
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize(
+ secp256k1_context* ctx,
+ const unsigned char *seed32
+) SECP256K1_ARG_NONNULL(1);
+
+/** Add a number of public keys together.
+ * Returns: 1: the sum of the public keys is valid.
+ * 0: the sum of the public keys is not valid.
+ * Args: ctx: pointer to a context object
+ * Out: out: pointer to a public key object for placing the resulting public key
+ * (cannot be NULL)
+ * In: ins: pointer to array of pointers to public keys (cannot be NULL)
+ * n: the number of public keys to add together (must be at least 1)
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine(
+ const secp256k1_context* ctx,
+ secp256k1_pubkey *out,
+ const secp256k1_pubkey * const * ins,
+ size_t n
+) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/include/secp256k1_ecdh.h b/crypto/secp256k1/libsecp256k1/include/secp256k1_ecdh.h
new file mode 100644
index 000000000..4b84d7a96
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/include/secp256k1_ecdh.h
@@ -0,0 +1,31 @@
+#ifndef _SECP256K1_ECDH_
+# define _SECP256K1_ECDH_
+
+# include "secp256k1.h"
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/** Compute an EC Diffie-Hellman secret in constant time
+ * Returns: 1: exponentiation was successful
+ * 0: scalar was invalid (zero or overflow)
+ * Args: ctx: pointer to a context object (cannot be NULL)
+ * Out: result: a 32-byte array which will be populated by an ECDH
+ * secret computed from the point and scalar
+ * In: pubkey: a pointer to a secp256k1_pubkey containing an
+ * initialized public key
+ * privkey: a 32-byte scalar with which to multiply the point
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdh(
+ const secp256k1_context* ctx,
+ unsigned char *result,
+ const secp256k1_pubkey *pubkey,
+ const unsigned char *privkey
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/include/secp256k1_recovery.h b/crypto/secp256k1/libsecp256k1/include/secp256k1_recovery.h
new file mode 100644
index 000000000..055379725
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/include/secp256k1_recovery.h
@@ -0,0 +1,110 @@
+#ifndef _SECP256K1_RECOVERY_
+# define _SECP256K1_RECOVERY_
+
+# include "secp256k1.h"
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/** Opaque data structured that holds a parsed ECDSA signature,
+ * supporting pubkey recovery.
+ *
+ * The exact representation of data inside is implementation defined and not
+ * guaranteed to be portable between different platforms or versions. It is
+ * however guaranteed to be 65 bytes in size, and can be safely copied/moved.
+ * If you need to convert to a format suitable for storage or transmission, use
+ * the secp256k1_ecdsa_signature_serialize_* and
+ * secp256k1_ecdsa_signature_parse_* functions.
+ *
+ * Furthermore, it is guaranteed that identical signatures (including their
+ * recoverability) will have identical representation, so they can be
+ * memcmp'ed.
+ */
+typedef struct {
+ unsigned char data[65];
+} secp256k1_ecdsa_recoverable_signature;
+
+/** Parse a compact ECDSA signature (64 bytes + recovery id).
+ *
+ * Returns: 1 when the signature could be parsed, 0 otherwise
+ * Args: ctx: a secp256k1 context object
+ * Out: sig: a pointer to a signature object
+ * In: input64: a pointer to a 64-byte compact signature
+ * recid: the recovery id (0, 1, 2 or 3)
+ */
+SECP256K1_API int secp256k1_ecdsa_recoverable_signature_parse_compact(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_recoverable_signature* sig,
+ const unsigned char *input64,
+ int recid
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Convert a recoverable signature into a normal signature.
+ *
+ * Returns: 1
+ * Out: sig: a pointer to a normal signature (cannot be NULL).
+ * In: sigin: a pointer to a recoverable signature (cannot be NULL).
+ */
+SECP256K1_API int secp256k1_ecdsa_recoverable_signature_convert(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_signature* sig,
+ const secp256k1_ecdsa_recoverable_signature* sigin
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+
+/** Serialize an ECDSA signature in compact format (64 bytes + recovery id).
+ *
+ * Returns: 1
+ * Args: ctx: a secp256k1 context object
+ * Out: output64: a pointer to a 64-byte array of the compact signature (cannot be NULL)
+ * recid: a pointer to an integer to hold the recovery id (can be NULL).
+ * In: sig: a pointer to an initialized signature object (cannot be NULL)
+ */
+SECP256K1_API int secp256k1_ecdsa_recoverable_signature_serialize_compact(
+ const secp256k1_context* ctx,
+ unsigned char *output64,
+ int *recid,
+ const secp256k1_ecdsa_recoverable_signature* sig
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+/** Create a recoverable ECDSA signature.
+ *
+ * Returns: 1: signature created
+ * 0: the nonce generation function failed, or the private key was invalid.
+ * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL)
+ * Out: sig: pointer to an array where the signature will be placed (cannot be NULL)
+ * In: msg32: the 32-byte message hash being signed (cannot be NULL)
+ * seckey: pointer to a 32-byte secret key (cannot be NULL)
+ * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used
+ * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL)
+ */
+SECP256K1_API int secp256k1_ecdsa_sign_recoverable(
+ const secp256k1_context* ctx,
+ secp256k1_ecdsa_recoverable_signature *sig,
+ const unsigned char *msg32,
+ const unsigned char *seckey,
+ secp256k1_nonce_function noncefp,
+ const void *ndata
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+/** Recover an ECDSA public key from a signature.
+ *
+ * Returns: 1: public key successfully recovered (which guarantees a correct signature).
+ * 0: otherwise.
+ * Args: ctx: pointer to a context object, initialized for verification (cannot be NULL)
+ * Out: pubkey: pointer to the recovered public key (cannot be NULL)
+ * In: sig: pointer to initialized signature that supports pubkey recovery (cannot be NULL)
+ * msg32: the 32-byte message hash assumed to be signed (cannot be NULL)
+ */
+SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_recover(
+ const secp256k1_context* ctx,
+ secp256k1_pubkey *pubkey,
+ const secp256k1_ecdsa_recoverable_signature *sig,
+ const unsigned char *msg32
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/libsecp256k1.pc.in b/crypto/secp256k1/libsecp256k1/libsecp256k1.pc.in
new file mode 100644
index 000000000..a0d006f11
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/libsecp256k1.pc.in
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libsecp256k1
+Description: Optimized C library for EC operations on curve secp256k1
+URL: https://github.com/bitcoin-core/secp256k1
+Version: @PACKAGE_VERSION@
+Cflags: -I${includedir}
+Libs.private: @SECP_LIBS@
+Libs: -L${libdir} -lsecp256k1
+
diff --git a/crypto/secp256k1/libsecp256k1/obj/.gitignore b/crypto/secp256k1/libsecp256k1/obj/.gitignore
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/obj/.gitignore
diff --git a/crypto/secp256k1/libsecp256k1/sage/group_prover.sage b/crypto/secp256k1/libsecp256k1/sage/group_prover.sage
new file mode 100644
index 000000000..ab580c5b2
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/sage/group_prover.sage
@@ -0,0 +1,322 @@
+# This code supports verifying group implementations which have branches
+# or conditional statements (like cmovs), by allowing each execution path
+# to independently set assumptions on input or intermediary variables.
+#
+# The general approach is:
+# * A constraint is a tuple of two sets of of symbolic expressions:
+# the first of which are required to evaluate to zero, the second of which
+# are required to evaluate to nonzero.
+# - A constraint is said to be conflicting if any of its nonzero expressions
+# is in the ideal with basis the zero expressions (in other words: when the
+# zero expressions imply that one of the nonzero expressions are zero).
+# * There is a list of laws that describe the intended behaviour, including
+# laws for addition and doubling. Each law is called with the symbolic point
+# coordinates as arguments, and returns:
+# - A constraint describing the assumptions under which it is applicable,
+# called "assumeLaw"
+# - A constraint describing the requirements of the law, called "require"
+# * Implementations are transliterated into functions that operate as well on
+# algebraic input points, and are called once per combination of branches
+# exectured. Each execution returns:
+# - A constraint describing the assumptions this implementation requires
+# (such as Z1=1), called "assumeFormula"
+# - A constraint describing the assumptions this specific branch requires,
+# but which is by construction guaranteed to cover the entire space by
+# merging the results from all branches, called "assumeBranch"
+# - The result of the computation
+# * All combinations of laws with implementation branches are tried, and:
+# - If the combination of assumeLaw, assumeFormula, and assumeBranch results
+# in a conflict, it means this law does not apply to this branch, and it is
+# skipped.
+# - For others, we try to prove the require constraints hold, assuming the
+# information in assumeLaw + assumeFormula + assumeBranch, and if this does
+# not succeed, we fail.
+# + To prove an expression is zero, we check whether it belongs to the
+# ideal with the assumed zero expressions as basis. This test is exact.
+# + To prove an expression is nonzero, we check whether each of its
+# factors is contained in the set of nonzero assumptions' factors.
+# This test is not exact, so various combinations of original and
+# reduced expressions' factors are tried.
+# - If we succeed, we print out the assumptions from assumeFormula that
+# weren't implied by assumeLaw already. Those from assumeBranch are skipped,
+# as we assume that all constraints in it are complementary with each other.
+#
+# Based on the sage verification scripts used in the Explicit-Formulas Database
+# by Tanja Lange and others, see http://hyperelliptic.org/EFD
+
+class fastfrac:
+ """Fractions over rings."""
+
+ def __init__(self,R,top,bot=1):
+ """Construct a fractional, given a ring, a numerator, and denominator."""
+ self.R = R
+ if parent(top) == ZZ or parent(top) == R:
+ self.top = R(top)
+ self.bot = R(bot)
+ elif top.__class__ == fastfrac:
+ self.top = top.top
+ self.bot = top.bot * bot
+ else:
+ self.top = R(numerator(top))
+ self.bot = R(denominator(top)) * bot
+
+ def iszero(self,I):
+ """Return whether this fraction is zero given an ideal."""
+ return self.top in I and self.bot not in I
+
+ def reduce(self,assumeZero):
+ zero = self.R.ideal(map(numerator, assumeZero))
+ return fastfrac(self.R, zero.reduce(self.top)) / fastfrac(self.R, zero.reduce(self.bot))
+
+ def __add__(self,other):
+ """Add two fractions."""
+ if parent(other) == ZZ:
+ return fastfrac(self.R,self.top + self.bot * other,self.bot)
+ if other.__class__ == fastfrac:
+ return fastfrac(self.R,self.top * other.bot + self.bot * other.top,self.bot * other.bot)
+ return NotImplemented
+
+ def __sub__(self,other):
+ """Subtract two fractions."""
+ if parent(other) == ZZ:
+ return fastfrac(self.R,self.top - self.bot * other,self.bot)
+ if other.__class__ == fastfrac:
+ return fastfrac(self.R,self.top * other.bot - self.bot * other.top,self.bot * other.bot)
+ return NotImplemented
+
+ def __neg__(self):
+ """Return the negation of a fraction."""
+ return fastfrac(self.R,-self.top,self.bot)
+
+ def __mul__(self,other):
+ """Multiply two fractions."""
+ if parent(other) == ZZ:
+ return fastfrac(self.R,self.top * other,self.bot)
+ if other.__class__ == fastfrac:
+ return fastfrac(self.R,self.top * other.top,self.bot * other.bot)
+ return NotImplemented
+
+ def __rmul__(self,other):
+ """Multiply something else with a fraction."""
+ return self.__mul__(other)
+
+ def __div__(self,other):
+ """Divide two fractions."""
+ if parent(other) == ZZ:
+ return fastfrac(self.R,self.top,self.bot * other)
+ if other.__class__ == fastfrac:
+ return fastfrac(self.R,self.top * other.bot,self.bot * other.top)
+ return NotImplemented
+
+ def __pow__(self,other):
+ """Compute a power of a fraction."""
+ if parent(other) == ZZ:
+ if other < 0:
+ # Negative powers require flipping top and bottom
+ return fastfrac(self.R,self.bot ^ (-other),self.top ^ (-other))
+ else:
+ return fastfrac(self.R,self.top ^ other,self.bot ^ other)
+ return NotImplemented
+
+ def __str__(self):
+ return "fastfrac((" + str(self.top) + ") / (" + str(self.bot) + "))"
+ def __repr__(self):
+ return "%s" % self
+
+ def numerator(self):
+ return self.top
+
+class constraints:
+ """A set of constraints, consisting of zero and nonzero expressions.
+
+ Constraints can either be used to express knowledge or a requirement.
+
+ Both the fields zero and nonzero are maps from expressions to description
+ strings. The expressions that are the keys in zero are required to be zero,
+ and the expressions that are the keys in nonzero are required to be nonzero.
+
+ Note that (a != 0) and (b != 0) is the same as (a*b != 0), so all keys in
+ nonzero could be multiplied into a single key. This is often much less
+ efficient to work with though, so we keep them separate inside the
+ constraints. This allows higher-level code to do fast checks on the individual
+ nonzero elements, or combine them if needed for stronger checks.
+
+ We can't multiply the different zero elements, as it would suffice for one of
+ the factors to be zero, instead of all of them. Instead, the zero elements are
+ typically combined into an ideal first.
+ """
+
+ def __init__(self, **kwargs):
+ if 'zero' in kwargs:
+ self.zero = dict(kwargs['zero'])
+ else:
+ self.zero = dict()
+ if 'nonzero' in kwargs:
+ self.nonzero = dict(kwargs['nonzero'])
+ else:
+ self.nonzero = dict()
+
+ def negate(self):
+ return constraints(zero=self.nonzero, nonzero=self.zero)
+
+ def __add__(self, other):
+ zero = self.zero.copy()
+ zero.update(other.zero)
+ nonzero = self.nonzero.copy()
+ nonzero.update(other.nonzero)
+ return constraints(zero=zero, nonzero=nonzero)
+
+ def __str__(self):
+ return "constraints(zero=%s,nonzero=%s)" % (self.zero, self.nonzero)
+
+ def __repr__(self):
+ return "%s" % self
+
+
+def conflicts(R, con):
+ """Check whether any of the passed non-zero assumptions is implied by the zero assumptions"""
+ zero = R.ideal(map(numerator, con.zero))
+ if 1 in zero:
+ return True
+ # First a cheap check whether any of the individual nonzero terms conflict on
+ # their own.
+ for nonzero in con.nonzero:
+ if nonzero.iszero(zero):
+ return True
+ # It can be the case that entries in the nonzero set do not individually
+ # conflict with the zero set, but their combination does. For example, knowing
+ # that either x or y is zero is equivalent to having x*y in the zero set.
+ # Having x or y individually in the nonzero set is not a conflict, but both
+ # simultaneously is, so that is the right thing to check for.
+ if reduce(lambda a,b: a * b, con.nonzero, fastfrac(R, 1)).iszero(zero):
+ return True
+ return False
+
+
+def get_nonzero_set(R, assume):
+ """Calculate a simple set of nonzero expressions"""
+ zero = R.ideal(map(numerator, assume.zero))
+ nonzero = set()
+ for nz in map(numerator, assume.nonzero):
+ for (f,n) in nz.factor():
+ nonzero.add(f)
+ rnz = zero.reduce(nz)
+ for (f,n) in rnz.factor():
+ nonzero.add(f)
+ return nonzero
+
+
+def prove_nonzero(R, exprs, assume):
+ """Check whether an expression is provably nonzero, given assumptions"""
+ zero = R.ideal(map(numerator, assume.zero))
+ nonzero = get_nonzero_set(R, assume)
+ expl = set()
+ ok = True
+ for expr in exprs:
+ if numerator(expr) in zero:
+ return (False, [exprs[expr]])
+ allexprs = reduce(lambda a,b: numerator(a)*numerator(b), exprs, 1)
+ for (f, n) in allexprs.factor():
+ if f not in nonzero:
+ ok = False
+ if ok:
+ return (True, None)
+ ok = True
+ for (f, n) in zero.reduce(numerator(allexprs)).factor():
+ if f not in nonzero:
+ ok = False
+ if ok:
+ return (True, None)
+ ok = True
+ for expr in exprs:
+ for (f,n) in numerator(expr).factor():
+ if f not in nonzero:
+ ok = False
+ if ok:
+ return (True, None)
+ ok = True
+ for expr in exprs:
+ for (f,n) in zero.reduce(numerator(expr)).factor():
+ if f not in nonzero:
+ expl.add(exprs[expr])
+ if expl:
+ return (False, list(expl))
+ else:
+ return (True, None)
+
+
+def prove_zero(R, exprs, assume):
+ """Check whether all of the passed expressions are provably zero, given assumptions"""
+ r, e = prove_nonzero(R, dict(map(lambda x: (fastfrac(R, x.bot, 1), exprs[x]), exprs)), assume)
+ if not r:
+ return (False, map(lambda x: "Possibly zero denominator: %s" % x, e))
+ zero = R.ideal(map(numerator, assume.zero))
+ nonzero = prod(x for x in assume.nonzero)
+ expl = []
+ for expr in exprs:
+ if not expr.iszero(zero):
+ expl.append(exprs[expr])
+ if not expl:
+ return (True, None)
+ return (False, expl)
+
+
+def describe_extra(R, assume, assumeExtra):
+ """Describe what assumptions are added, given existing assumptions"""
+ zerox = assume.zero.copy()
+ zerox.update(assumeExtra.zero)
+ zero = R.ideal(map(numerator, assume.zero))
+ zeroextra = R.ideal(map(numerator, zerox))
+ nonzero = get_nonzero_set(R, assume)
+ ret = set()
+ # Iterate over the extra zero expressions
+ for base in assumeExtra.zero:
+ if base not in zero:
+ add = []
+ for (f, n) in numerator(base).factor():
+ if f not in nonzero:
+ add += ["%s" % f]
+ if add:
+ ret.add((" * ".join(add)) + " = 0 [%s]" % assumeExtra.zero[base])
+ # Iterate over the extra nonzero expressions
+ for nz in assumeExtra.nonzero:
+ nzr = zeroextra.reduce(numerator(nz))
+ if nzr not in zeroextra:
+ for (f,n) in nzr.factor():
+ if zeroextra.reduce(f) not in nonzero:
+ ret.add("%s != 0" % zeroextra.reduce(f))
+ return ", ".join(x for x in ret)
+
+
+def check_symbolic(R, assumeLaw, assumeAssert, assumeBranch, require):
+ """Check a set of zero and nonzero requirements, given a set of zero and nonzero assumptions"""
+ assume = assumeLaw + assumeAssert + assumeBranch
+
+ if conflicts(R, assume):
+ # This formula does not apply
+ return None
+
+ describe = describe_extra(R, assumeLaw + assumeBranch, assumeAssert)
+
+ ok, msg = prove_zero(R, require.zero, assume)
+ if not ok:
+ return "FAIL, %s fails (assuming %s)" % (str(msg), describe)
+
+ res, expl = prove_nonzero(R, require.nonzero, assume)
+ if not res:
+ return "FAIL, %s fails (assuming %s)" % (str(expl), describe)
+
+ if describe != "":
+ return "OK (assuming %s)" % describe
+ else:
+ return "OK"
+
+
+def concrete_verify(c):
+ for k in c.zero:
+ if k != 0:
+ return (False, c.zero[k])
+ for k in c.nonzero:
+ if k == 0:
+ return (False, c.nonzero[k])
+ return (True, None)
diff --git a/crypto/secp256k1/libsecp256k1/sage/secp256k1.sage b/crypto/secp256k1/libsecp256k1/sage/secp256k1.sage
new file mode 100644
index 000000000..a97e732f7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/sage/secp256k1.sage
@@ -0,0 +1,306 @@
+# Test libsecp256k1' group operation implementations using prover.sage
+
+import sys
+
+load("group_prover.sage")
+load("weierstrass_prover.sage")
+
+def formula_secp256k1_gej_double_var(a):
+ """libsecp256k1's secp256k1_gej_double_var, used by various addition functions"""
+ rz = a.Z * a.Y
+ rz = rz * 2
+ t1 = a.X^2
+ t1 = t1 * 3
+ t2 = t1^2
+ t3 = a.Y^2
+ t3 = t3 * 2
+ t4 = t3^2
+ t4 = t4 * 2
+ t3 = t3 * a.X
+ rx = t3
+ rx = rx * 4
+ rx = -rx
+ rx = rx + t2
+ t2 = -t2
+ t3 = t3 * 6
+ t3 = t3 + t2
+ ry = t1 * t3
+ t2 = -t4
+ ry = ry + t2
+ return jacobianpoint(rx, ry, rz)
+
+def formula_secp256k1_gej_add_var(branch, a, b):
+ """libsecp256k1's secp256k1_gej_add_var"""
+ if branch == 0:
+ return (constraints(), constraints(nonzero={a.Infinity : 'a_infinite'}), b)
+ if branch == 1:
+ return (constraints(), constraints(zero={a.Infinity : 'a_finite'}, nonzero={b.Infinity : 'b_infinite'}), a)
+ z22 = b.Z^2
+ z12 = a.Z^2
+ u1 = a.X * z22
+ u2 = b.X * z12
+ s1 = a.Y * z22
+ s1 = s1 * b.Z
+ s2 = b.Y * z12
+ s2 = s2 * a.Z
+ h = -u1
+ h = h + u2
+ i = -s1
+ i = i + s2
+ if branch == 2:
+ r = formula_secp256k1_gej_double_var(a)
+ return (constraints(), constraints(zero={h : 'h=0', i : 'i=0', a.Infinity : 'a_finite', b.Infinity : 'b_finite'}), r)
+ if branch == 3:
+ return (constraints(), constraints(zero={h : 'h=0', a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={i : 'i!=0'}), point_at_infinity())
+ i2 = i^2
+ h2 = h^2
+ h3 = h2 * h
+ h = h * b.Z
+ rz = a.Z * h
+ t = u1 * h2
+ rx = t
+ rx = rx * 2
+ rx = rx + h3
+ rx = -rx
+ rx = rx + i2
+ ry = -rx
+ ry = ry + t
+ ry = ry * i
+ h3 = h3 * s1
+ h3 = -h3
+ ry = ry + h3
+ return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz))
+
+def formula_secp256k1_gej_add_ge_var(branch, a, b):
+ """libsecp256k1's secp256k1_gej_add_ge_var, which assume bz==1"""
+ if branch == 0:
+ return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(nonzero={a.Infinity : 'a_infinite'}), b)
+ if branch == 1:
+ return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite'}, nonzero={b.Infinity : 'b_infinite'}), a)
+ z12 = a.Z^2
+ u1 = a.X
+ u2 = b.X * z12
+ s1 = a.Y
+ s2 = b.Y * z12
+ s2 = s2 * a.Z
+ h = -u1
+ h = h + u2
+ i = -s1
+ i = i + s2
+ if (branch == 2):
+ r = formula_secp256k1_gej_double_var(a)
+ return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0', i : 'i=0'}), r)
+ if (branch == 3):
+ return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0'}, nonzero={i : 'i!=0'}), point_at_infinity())
+ i2 = i^2
+ h2 = h^2
+ h3 = h * h2
+ rz = a.Z * h
+ t = u1 * h2
+ rx = t
+ rx = rx * 2
+ rx = rx + h3
+ rx = -rx
+ rx = rx + i2
+ ry = -rx
+ ry = ry + t
+ ry = ry * i
+ h3 = h3 * s1
+ h3 = -h3
+ ry = ry + h3
+ return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz))
+
+def formula_secp256k1_gej_add_zinv_var(branch, a, b):
+ """libsecp256k1's secp256k1_gej_add_zinv_var"""
+ bzinv = b.Z^(-1)
+ if branch == 0:
+ return (constraints(), constraints(nonzero={b.Infinity : 'b_infinite'}), a)
+ if branch == 1:
+ bzinv2 = bzinv^2
+ bzinv3 = bzinv2 * bzinv
+ rx = b.X * bzinv2
+ ry = b.Y * bzinv3
+ rz = 1
+ return (constraints(), constraints(zero={b.Infinity : 'b_finite'}, nonzero={a.Infinity : 'a_infinite'}), jacobianpoint(rx, ry, rz))
+ azz = a.Z * bzinv
+ z12 = azz^2
+ u1 = a.X
+ u2 = b.X * z12
+ s1 = a.Y
+ s2 = b.Y * z12
+ s2 = s2 * azz
+ h = -u1
+ h = h + u2
+ i = -s1
+ i = i + s2
+ if branch == 2:
+ r = formula_secp256k1_gej_double_var(a)
+ return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0', i : 'i=0'}), r)
+ if branch == 3:
+ return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0'}, nonzero={i : 'i!=0'}), point_at_infinity())
+ i2 = i^2
+ h2 = h^2
+ h3 = h * h2
+ rz = a.Z
+ rz = rz * h
+ t = u1 * h2
+ rx = t
+ rx = rx * 2
+ rx = rx + h3
+ rx = -rx
+ rx = rx + i2
+ ry = -rx
+ ry = ry + t
+ ry = ry * i
+ h3 = h3 * s1
+ h3 = -h3
+ ry = ry + h3
+ return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz))
+
+def formula_secp256k1_gej_add_ge(branch, a, b):
+ """libsecp256k1's secp256k1_gej_add_ge"""
+ zeroes = {}
+ nonzeroes = {}
+ a_infinity = False
+ if (branch & 4) != 0:
+ nonzeroes.update({a.Infinity : 'a_infinite'})
+ a_infinity = True
+ else:
+ zeroes.update({a.Infinity : 'a_finite'})
+ zz = a.Z^2
+ u1 = a.X
+ u2 = b.X * zz
+ s1 = a.Y
+ s2 = b.Y * zz
+ s2 = s2 * a.Z
+ t = u1
+ t = t + u2
+ m = s1
+ m = m + s2
+ rr = t^2
+ m_alt = -u2
+ tt = u1 * m_alt
+ rr = rr + tt
+ degenerate = (branch & 3) == 3
+ if (branch & 1) != 0:
+ zeroes.update({m : 'm_zero'})
+ else:
+ nonzeroes.update({m : 'm_nonzero'})
+ if (branch & 2) != 0:
+ zeroes.update({rr : 'rr_zero'})
+ else:
+ nonzeroes.update({rr : 'rr_nonzero'})
+ rr_alt = s1
+ rr_alt = rr_alt * 2
+ m_alt = m_alt + u1
+ if not degenerate:
+ rr_alt = rr
+ m_alt = m
+ n = m_alt^2
+ q = n * t
+ n = n^2
+ if degenerate:
+ n = m
+ t = rr_alt^2
+ rz = a.Z * m_alt
+ infinity = False
+ if (branch & 8) != 0:
+ if not a_infinity:
+ infinity = True
+ zeroes.update({rz : 'r.z=0'})
+ else:
+ nonzeroes.update({rz : 'r.z!=0'})
+ rz = rz * 2
+ q = -q
+ t = t + q
+ rx = t
+ t = t * 2
+ t = t + q
+ t = t * rr_alt
+ t = t + n
+ ry = -t
+ rx = rx * 4
+ ry = ry * 4
+ if a_infinity:
+ rx = b.X
+ ry = b.Y
+ rz = 1
+ if infinity:
+ return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zeroes, nonzero=nonzeroes), point_at_infinity())
+ return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zeroes, nonzero=nonzeroes), jacobianpoint(rx, ry, rz))
+
+def formula_secp256k1_gej_add_ge_old(branch, a, b):
+ """libsecp256k1's old secp256k1_gej_add_ge, which fails when ay+by=0 but ax!=bx"""
+ a_infinity = (branch & 1) != 0
+ zero = {}
+ nonzero = {}
+ if a_infinity:
+ nonzero.update({a.Infinity : 'a_infinite'})
+ else:
+ zero.update({a.Infinity : 'a_finite'})
+ zz = a.Z^2
+ u1 = a.X
+ u2 = b.X * zz
+ s1 = a.Y
+ s2 = b.Y * zz
+ s2 = s2 * a.Z
+ z = a.Z
+ t = u1
+ t = t + u2
+ m = s1
+ m = m + s2
+ n = m^2
+ q = n * t
+ n = n^2
+ rr = t^2
+ t = u1 * u2
+ t = -t
+ rr = rr + t
+ t = rr^2
+ rz = m * z
+ infinity = False
+ if (branch & 2) != 0:
+ if not a_infinity:
+ infinity = True
+ else:
+ return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(nonzero={z : 'conflict_a'}, zero={z : 'conflict_b'}), point_at_infinity())
+ zero.update({rz : 'r.z=0'})
+ else:
+ nonzero.update({rz : 'r.z!=0'})
+ rz = rz * (0 if a_infinity else 2)
+ rx = t
+ q = -q
+ rx = rx + q
+ q = q * 3
+ t = t * 2
+ t = t + q
+ t = t * rr
+ t = t + n
+ ry = -t
+ rx = rx * (0 if a_infinity else 4)
+ ry = ry * (0 if a_infinity else 4)
+ t = b.X
+ t = t * (1 if a_infinity else 0)
+ rx = rx + t
+ t = b.Y
+ t = t * (1 if a_infinity else 0)
+ ry = ry + t
+ t = (1 if a_infinity else 0)
+ rz = rz + t
+ if infinity:
+ return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zero, nonzero=nonzero), point_at_infinity())
+ return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zero, nonzero=nonzero), jacobianpoint(rx, ry, rz))
+
+if __name__ == "__main__":
+ check_symbolic_jacobian_weierstrass("secp256k1_gej_add_var", 0, 7, 5, formula_secp256k1_gej_add_var)
+ check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge_var", 0, 7, 5, formula_secp256k1_gej_add_ge_var)
+ check_symbolic_jacobian_weierstrass("secp256k1_gej_add_zinv_var", 0, 7, 5, formula_secp256k1_gej_add_zinv_var)
+ check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge", 0, 7, 16, formula_secp256k1_gej_add_ge)
+ check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge_old [should fail]", 0, 7, 4, formula_secp256k1_gej_add_ge_old)
+
+ if len(sys.argv) >= 2 and sys.argv[1] == "--exhaustive":
+ check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_var", 0, 7, 5, formula_secp256k1_gej_add_var, 43)
+ check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge_var", 0, 7, 5, formula_secp256k1_gej_add_ge_var, 43)
+ check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_zinv_var", 0, 7, 5, formula_secp256k1_gej_add_zinv_var, 43)
+ check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge", 0, 7, 16, formula_secp256k1_gej_add_ge, 43)
+ check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge_old [should fail]", 0, 7, 4, formula_secp256k1_gej_add_ge_old, 43)
diff --git a/crypto/secp256k1/libsecp256k1/sage/weierstrass_prover.sage b/crypto/secp256k1/libsecp256k1/sage/weierstrass_prover.sage
new file mode 100644
index 000000000..03ef2ec90
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/sage/weierstrass_prover.sage
@@ -0,0 +1,264 @@
+# Prover implementation for Weierstrass curves of the form
+# y^2 = x^3 + A * x + B, specifically with a = 0 and b = 7, with group laws
+# operating on affine and Jacobian coordinates, including the point at infinity
+# represented by a 4th variable in coordinates.
+
+load("group_prover.sage")
+
+
+class affinepoint:
+ def __init__(self, x, y, infinity=0):
+ self.x = x
+ self.y = y
+ self.infinity = infinity
+ def __str__(self):
+ return "affinepoint(x=%s,y=%s,inf=%s)" % (self.x, self.y, self.infinity)
+
+
+class jacobianpoint:
+ def __init__(self, x, y, z, infinity=0):
+ self.X = x
+ self.Y = y
+ self.Z = z
+ self.Infinity = infinity
+ def __str__(self):
+ return "jacobianpoint(X=%s,Y=%s,Z=%s,inf=%s)" % (self.X, self.Y, self.Z, self.Infinity)
+
+
+def point_at_infinity():
+ return jacobianpoint(1, 1, 1, 1)
+
+
+def negate(p):
+ if p.__class__ == affinepoint:
+ return affinepoint(p.x, -p.y)
+ if p.__class__ == jacobianpoint:
+ return jacobianpoint(p.X, -p.Y, p.Z)
+ assert(False)
+
+
+def on_weierstrass_curve(A, B, p):
+ """Return a set of zero-expressions for an affine point to be on the curve"""
+ return constraints(zero={p.x^3 + A*p.x + B - p.y^2: 'on_curve'})
+
+
+def tangential_to_weierstrass_curve(A, B, p12, p3):
+ """Return a set of zero-expressions for ((x12,y12),(x3,y3)) to be a line that is tangential to the curve at (x12,y12)"""
+ return constraints(zero={
+ (p12.y - p3.y) * (p12.y * 2) - (p12.x^2 * 3 + A) * (p12.x - p3.x): 'tangential_to_curve'
+ })
+
+
+def colinear(p1, p2, p3):
+ """Return a set of zero-expressions for ((x1,y1),(x2,y2),(x3,y3)) to be collinear"""
+ return constraints(zero={
+ (p1.y - p2.y) * (p1.x - p3.x) - (p1.y - p3.y) * (p1.x - p2.x): 'colinear_1',
+ (p2.y - p3.y) * (p2.x - p1.x) - (p2.y - p1.y) * (p2.x - p3.x): 'colinear_2',
+ (p3.y - p1.y) * (p3.x - p2.x) - (p3.y - p2.y) * (p3.x - p1.x): 'colinear_3'
+ })
+
+
+def good_affine_point(p):
+ return constraints(nonzero={p.x : 'nonzero_x', p.y : 'nonzero_y'})
+
+
+def good_jacobian_point(p):
+ return constraints(nonzero={p.X : 'nonzero_X', p.Y : 'nonzero_Y', p.Z^6 : 'nonzero_Z'})
+
+
+def good_point(p):
+ return constraints(nonzero={p.Z^6 : 'nonzero_X'})
+
+
+def finite(p, *affine_fns):
+ con = good_point(p) + constraints(zero={p.Infinity : 'finite_point'})
+ if p.Z != 0:
+ return con + reduce(lambda a, b: a + b, (f(affinepoint(p.X / p.Z^2, p.Y / p.Z^3)) for f in affine_fns), con)
+ else:
+ return con
+
+def infinite(p):
+ return constraints(nonzero={p.Infinity : 'infinite_point'})
+
+
+def law_jacobian_weierstrass_add(A, B, pa, pb, pA, pB, pC):
+ """Check whether the passed set of coordinates is a valid Jacobian add, given assumptions"""
+ assumeLaw = (good_affine_point(pa) +
+ good_affine_point(pb) +
+ good_jacobian_point(pA) +
+ good_jacobian_point(pB) +
+ on_weierstrass_curve(A, B, pa) +
+ on_weierstrass_curve(A, B, pb) +
+ finite(pA) +
+ finite(pB) +
+ constraints(nonzero={pa.x - pb.x : 'different_x'}))
+ require = (finite(pC, lambda pc: on_weierstrass_curve(A, B, pc) +
+ colinear(pa, pb, negate(pc))))
+ return (assumeLaw, require)
+
+
+def law_jacobian_weierstrass_double(A, B, pa, pb, pA, pB, pC):
+ """Check whether the passed set of coordinates is a valid Jacobian doubling, given assumptions"""
+ assumeLaw = (good_affine_point(pa) +
+ good_affine_point(pb) +
+ good_jacobian_point(pA) +
+ good_jacobian_point(pB) +
+ on_weierstrass_curve(A, B, pa) +
+ on_weierstrass_curve(A, B, pb) +
+ finite(pA) +
+ finite(pB) +
+ constraints(zero={pa.x - pb.x : 'equal_x', pa.y - pb.y : 'equal_y'}))
+ require = (finite(pC, lambda pc: on_weierstrass_curve(A, B, pc) +
+ tangential_to_weierstrass_curve(A, B, pa, negate(pc))))
+ return (assumeLaw, require)
+
+
+def law_jacobian_weierstrass_add_opposites(A, B, pa, pb, pA, pB, pC):
+ assumeLaw = (good_affine_point(pa) +
+ good_affine_point(pb) +
+ good_jacobian_point(pA) +
+ good_jacobian_point(pB) +
+ on_weierstrass_curve(A, B, pa) +
+ on_weierstrass_curve(A, B, pb) +
+ finite(pA) +
+ finite(pB) +
+ constraints(zero={pa.x - pb.x : 'equal_x', pa.y + pb.y : 'opposite_y'}))
+ require = infinite(pC)
+ return (assumeLaw, require)
+
+
+def law_jacobian_weierstrass_add_infinite_a(A, B, pa, pb, pA, pB, pC):
+ assumeLaw = (good_affine_point(pa) +
+ good_affine_point(pb) +
+ good_jacobian_point(pA) +
+ good_jacobian_point(pB) +
+ on_weierstrass_curve(A, B, pb) +
+ infinite(pA) +
+ finite(pB))
+ require = finite(pC, lambda pc: constraints(zero={pc.x - pb.x : 'c.x=b.x', pc.y - pb.y : 'c.y=b.y'}))
+ return (assumeLaw, require)
+
+
+def law_jacobian_weierstrass_add_infinite_b(A, B, pa, pb, pA, pB, pC):
+ assumeLaw = (good_affine_point(pa) +
+ good_affine_point(pb) +
+ good_jacobian_point(pA) +
+ good_jacobian_point(pB) +
+ on_weierstrass_curve(A, B, pa) +
+ infinite(pB) +
+ finite(pA))
+ require = finite(pC, lambda pc: constraints(zero={pc.x - pa.x : 'c.x=a.x', pc.y - pa.y : 'c.y=a.y'}))
+ return (assumeLaw, require)
+
+
+def law_jacobian_weierstrass_add_infinite_ab(A, B, pa, pb, pA, pB, pC):
+ assumeLaw = (good_affine_point(pa) +
+ good_affine_point(pb) +
+ good_jacobian_point(pA) +
+ good_jacobian_point(pB) +
+ infinite(pA) +
+ infinite(pB))
+ require = infinite(pC)
+ return (assumeLaw, require)
+
+
+laws_jacobian_weierstrass = {
+ 'add': law_jacobian_weierstrass_add,
+ 'double': law_jacobian_weierstrass_double,
+ 'add_opposite': law_jacobian_weierstrass_add_opposites,
+ 'add_infinite_a': law_jacobian_weierstrass_add_infinite_a,
+ 'add_infinite_b': law_jacobian_weierstrass_add_infinite_b,
+ 'add_infinite_ab': law_jacobian_weierstrass_add_infinite_ab
+}
+
+
+def check_exhaustive_jacobian_weierstrass(name, A, B, branches, formula, p):
+ """Verify an implementation of addition of Jacobian points on a Weierstrass curve, by executing and validating the result for every possible addition in a prime field"""
+ F = Integers(p)
+ print "Formula %s on Z%i:" % (name, p)
+ points = []
+ for x in xrange(0, p):
+ for y in xrange(0, p):
+ point = affinepoint(F(x), F(y))
+ r, e = concrete_verify(on_weierstrass_curve(A, B, point))
+ if r:
+ points.append(point)
+
+ for za in xrange(1, p):
+ for zb in xrange(1, p):
+ for pa in points:
+ for pb in points:
+ for ia in xrange(2):
+ for ib in xrange(2):
+ pA = jacobianpoint(pa.x * F(za)^2, pa.y * F(za)^3, F(za), ia)
+ pB = jacobianpoint(pb.x * F(zb)^2, pb.y * F(zb)^3, F(zb), ib)
+ for branch in xrange(0, branches):
+ assumeAssert, assumeBranch, pC = formula(branch, pA, pB)
+ pC.X = F(pC.X)
+ pC.Y = F(pC.Y)
+ pC.Z = F(pC.Z)
+ pC.Infinity = F(pC.Infinity)
+ r, e = concrete_verify(assumeAssert + assumeBranch)
+ if r:
+ match = False
+ for key in laws_jacobian_weierstrass:
+ assumeLaw, require = laws_jacobian_weierstrass[key](A, B, pa, pb, pA, pB, pC)
+ r, e = concrete_verify(assumeLaw)
+ if r:
+ if match:
+ print " multiple branches for (%s,%s,%s,%s) + (%s,%s,%s,%s)" % (pA.X, pA.Y, pA.Z, pA.Infinity, pB.X, pB.Y, pB.Z, pB.Infinity)
+ else:
+ match = True
+ r, e = concrete_verify(require)
+ if not r:
+ print " failure in branch %i for (%s,%s,%s,%s) + (%s,%s,%s,%s) = (%s,%s,%s,%s): %s" % (branch, pA.X, pA.Y, pA.Z, pA.Infinity, pB.X, pB.Y, pB.Z, pB.Infinity, pC.X, pC.Y, pC.Z, pC.Infinity, e)
+ print
+
+
+def check_symbolic_function(R, assumeAssert, assumeBranch, f, A, B, pa, pb, pA, pB, pC):
+ assumeLaw, require = f(A, B, pa, pb, pA, pB, pC)
+ return check_symbolic(R, assumeLaw, assumeAssert, assumeBranch, require)
+
+def check_symbolic_jacobian_weierstrass(name, A, B, branches, formula):
+ """Verify an implementation of addition of Jacobian points on a Weierstrass curve symbolically"""
+ R.<ax,bx,ay,by,Az,Bz,Ai,Bi> = PolynomialRing(QQ,8,order='invlex')
+ lift = lambda x: fastfrac(R,x)
+ ax = lift(ax)
+ ay = lift(ay)
+ Az = lift(Az)
+ bx = lift(bx)
+ by = lift(by)
+ Bz = lift(Bz)
+ Ai = lift(Ai)
+ Bi = lift(Bi)
+
+ pa = affinepoint(ax, ay, Ai)
+ pb = affinepoint(bx, by, Bi)
+ pA = jacobianpoint(ax * Az^2, ay * Az^3, Az, Ai)
+ pB = jacobianpoint(bx * Bz^2, by * Bz^3, Bz, Bi)
+
+ res = {}
+
+ for key in laws_jacobian_weierstrass:
+ res[key] = []
+
+ print ("Formula " + name + ":")
+ count = 0
+ for branch in xrange(branches):
+ assumeFormula, assumeBranch, pC = formula(branch, pA, pB)
+ pC.X = lift(pC.X)
+ pC.Y = lift(pC.Y)
+ pC.Z = lift(pC.Z)
+ pC.Infinity = lift(pC.Infinity)
+
+ for key in laws_jacobian_weierstrass:
+ res[key].append((check_symbolic_function(R, assumeFormula, assumeBranch, laws_jacobian_weierstrass[key], A, B, pa, pb, pA, pB, pC), branch))
+
+ for key in res:
+ print " %s:" % key
+ val = res[key]
+ for x in val:
+ if x[0] is not None:
+ print " branch %i: %s" % (x[1], x[0])
+
+ print
diff --git a/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s b/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s
new file mode 100644
index 000000000..1e2d7ff96
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s
@@ -0,0 +1,919 @@
+@ vim: set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab syntax=armasm:
+/**********************************************************************
+ * Copyright (c) 2014 Wladimir J. van der Laan *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+/*
+ARM implementation of field_10x26 inner loops.
+
+Note:
+
+- To avoid unnecessary loads and make use of available registers, two
+ 'passes' have every time been interleaved, with the odd passes accumulating c' and d'
+ which will be added to c and d respectively in the the even passes
+
+*/
+
+ .syntax unified
+ .arch armv7-a
+ @ eabi attributes - see readelf -A
+ .eabi_attribute 8, 1 @ Tag_ARM_ISA_use = yes
+ .eabi_attribute 9, 0 @ Tag_Thumb_ISA_use = no
+ .eabi_attribute 10, 0 @ Tag_FP_arch = none
+ .eabi_attribute 24, 1 @ Tag_ABI_align_needed = 8-byte
+ .eabi_attribute 25, 1 @ Tag_ABI_align_preserved = 8-byte, except leaf SP
+ .eabi_attribute 30, 2 @ Tag_ABI_optimization_goals = Aggressive Speed
+ .eabi_attribute 34, 1 @ Tag_CPU_unaligned_access = v6
+ .text
+
+ @ Field constants
+ .set field_R0, 0x3d10
+ .set field_R1, 0x400
+ .set field_not_M, 0xfc000000 @ ~M = ~0x3ffffff
+
+ .align 2
+ .global secp256k1_fe_mul_inner
+ .type secp256k1_fe_mul_inner, %function
+ @ Arguments:
+ @ r0 r Restrict: can overlap with a, not with b
+ @ r1 a
+ @ r2 b
+ @ Stack (total 4+10*4 = 44)
+ @ sp + #0 saved 'r' pointer
+ @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9
+secp256k1_fe_mul_inner:
+ stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14}
+ sub sp, sp, #48 @ frame=44 + alignment
+ str r0, [sp, #0] @ save result address, we need it only at the end
+
+ /******************************************
+ * Main computation code.
+ ******************************************
+
+ Allocation:
+ r0,r14,r7,r8 scratch
+ r1 a (pointer)
+ r2 b (pointer)
+ r3:r4 c
+ r5:r6 d
+ r11:r12 c'
+ r9:r10 d'
+
+ Note: do not write to r[] here, it may overlap with a[]
+ */
+
+ /* A - interleaved with B */
+ ldr r7, [r1, #0*4] @ a[0]
+ ldr r8, [r2, #9*4] @ b[9]
+ ldr r0, [r1, #1*4] @ a[1]
+ umull r5, r6, r7, r8 @ d = a[0] * b[9]
+ ldr r14, [r2, #8*4] @ b[8]
+ umull r9, r10, r0, r8 @ d' = a[1] * b[9]
+ ldr r7, [r1, #2*4] @ a[2]
+ umlal r5, r6, r0, r14 @ d += a[1] * b[8]
+ ldr r8, [r2, #7*4] @ b[7]
+ umlal r9, r10, r7, r14 @ d' += a[2] * b[8]
+ ldr r0, [r1, #3*4] @ a[3]
+ umlal r5, r6, r7, r8 @ d += a[2] * b[7]
+ ldr r14, [r2, #6*4] @ b[6]
+ umlal r9, r10, r0, r8 @ d' += a[3] * b[7]
+ ldr r7, [r1, #4*4] @ a[4]
+ umlal r5, r6, r0, r14 @ d += a[3] * b[6]
+ ldr r8, [r2, #5*4] @ b[5]
+ umlal r9, r10, r7, r14 @ d' += a[4] * b[6]
+ ldr r0, [r1, #5*4] @ a[5]
+ umlal r5, r6, r7, r8 @ d += a[4] * b[5]
+ ldr r14, [r2, #4*4] @ b[4]
+ umlal r9, r10, r0, r8 @ d' += a[5] * b[5]
+ ldr r7, [r1, #6*4] @ a[6]
+ umlal r5, r6, r0, r14 @ d += a[5] * b[4]
+ ldr r8, [r2, #3*4] @ b[3]
+ umlal r9, r10, r7, r14 @ d' += a[6] * b[4]
+ ldr r0, [r1, #7*4] @ a[7]
+ umlal r5, r6, r7, r8 @ d += a[6] * b[3]
+ ldr r14, [r2, #2*4] @ b[2]
+ umlal r9, r10, r0, r8 @ d' += a[7] * b[3]
+ ldr r7, [r1, #8*4] @ a[8]
+ umlal r5, r6, r0, r14 @ d += a[7] * b[2]
+ ldr r8, [r2, #1*4] @ b[1]
+ umlal r9, r10, r7, r14 @ d' += a[8] * b[2]
+ ldr r0, [r1, #9*4] @ a[9]
+ umlal r5, r6, r7, r8 @ d += a[8] * b[1]
+ ldr r14, [r2, #0*4] @ b[0]
+ umlal r9, r10, r0, r8 @ d' += a[9] * b[1]
+ ldr r7, [r1, #0*4] @ a[0]
+ umlal r5, r6, r0, r14 @ d += a[9] * b[0]
+ @ r7,r14 used in B
+
+ bic r0, r5, field_not_M @ t9 = d & M
+ str r0, [sp, #4 + 4*9]
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+
+ /* B */
+ umull r3, r4, r7, r14 @ c = a[0] * b[0]
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u0 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u0 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t0 = c & M
+ str r14, [sp, #4 + 0*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u0 * R1
+ umlal r3, r4, r0, r14
+
+ /* C - interleaved with D */
+ ldr r7, [r1, #0*4] @ a[0]
+ ldr r8, [r2, #2*4] @ b[2]
+ ldr r14, [r2, #1*4] @ b[1]
+ umull r11, r12, r7, r8 @ c' = a[0] * b[2]
+ ldr r0, [r1, #1*4] @ a[1]
+ umlal r3, r4, r7, r14 @ c += a[0] * b[1]
+ ldr r8, [r2, #0*4] @ b[0]
+ umlal r11, r12, r0, r14 @ c' += a[1] * b[1]
+ ldr r7, [r1, #2*4] @ a[2]
+ umlal r3, r4, r0, r8 @ c += a[1] * b[0]
+ ldr r14, [r2, #9*4] @ b[9]
+ umlal r11, r12, r7, r8 @ c' += a[2] * b[0]
+ ldr r0, [r1, #3*4] @ a[3]
+ umlal r5, r6, r7, r14 @ d += a[2] * b[9]
+ ldr r8, [r2, #8*4] @ b[8]
+ umull r9, r10, r0, r14 @ d' = a[3] * b[9]
+ ldr r7, [r1, #4*4] @ a[4]
+ umlal r5, r6, r0, r8 @ d += a[3] * b[8]
+ ldr r14, [r2, #7*4] @ b[7]
+ umlal r9, r10, r7, r8 @ d' += a[4] * b[8]
+ ldr r0, [r1, #5*4] @ a[5]
+ umlal r5, r6, r7, r14 @ d += a[4] * b[7]
+ ldr r8, [r2, #6*4] @ b[6]
+ umlal r9, r10, r0, r14 @ d' += a[5] * b[7]
+ ldr r7, [r1, #6*4] @ a[6]
+ umlal r5, r6, r0, r8 @ d += a[5] * b[6]
+ ldr r14, [r2, #5*4] @ b[5]
+ umlal r9, r10, r7, r8 @ d' += a[6] * b[6]
+ ldr r0, [r1, #7*4] @ a[7]
+ umlal r5, r6, r7, r14 @ d += a[6] * b[5]
+ ldr r8, [r2, #4*4] @ b[4]
+ umlal r9, r10, r0, r14 @ d' += a[7] * b[5]
+ ldr r7, [r1, #8*4] @ a[8]
+ umlal r5, r6, r0, r8 @ d += a[7] * b[4]
+ ldr r14, [r2, #3*4] @ b[3]
+ umlal r9, r10, r7, r8 @ d' += a[8] * b[4]
+ ldr r0, [r1, #9*4] @ a[9]
+ umlal r5, r6, r7, r14 @ d += a[8] * b[3]
+ ldr r8, [r2, #2*4] @ b[2]
+ umlal r9, r10, r0, r14 @ d' += a[9] * b[3]
+ umlal r5, r6, r0, r8 @ d += a[9] * b[2]
+
+ bic r0, r5, field_not_M @ u1 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u1 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t1 = c & M
+ str r14, [sp, #4 + 1*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u1 * R1
+ umlal r3, r4, r0, r14
+
+ /* D */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u2 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u2 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t2 = c & M
+ str r14, [sp, #4 + 2*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u2 * R1
+ umlal r3, r4, r0, r14
+
+ /* E - interleaved with F */
+ ldr r7, [r1, #0*4] @ a[0]
+ ldr r8, [r2, #4*4] @ b[4]
+ umull r11, r12, r7, r8 @ c' = a[0] * b[4]
+ ldr r8, [r2, #3*4] @ b[3]
+ umlal r3, r4, r7, r8 @ c += a[0] * b[3]
+ ldr r7, [r1, #1*4] @ a[1]
+ umlal r11, r12, r7, r8 @ c' += a[1] * b[3]
+ ldr r8, [r2, #2*4] @ b[2]
+ umlal r3, r4, r7, r8 @ c += a[1] * b[2]
+ ldr r7, [r1, #2*4] @ a[2]
+ umlal r11, r12, r7, r8 @ c' += a[2] * b[2]
+ ldr r8, [r2, #1*4] @ b[1]
+ umlal r3, r4, r7, r8 @ c += a[2] * b[1]
+ ldr r7, [r1, #3*4] @ a[3]
+ umlal r11, r12, r7, r8 @ c' += a[3] * b[1]
+ ldr r8, [r2, #0*4] @ b[0]
+ umlal r3, r4, r7, r8 @ c += a[3] * b[0]
+ ldr r7, [r1, #4*4] @ a[4]
+ umlal r11, r12, r7, r8 @ c' += a[4] * b[0]
+ ldr r8, [r2, #9*4] @ b[9]
+ umlal r5, r6, r7, r8 @ d += a[4] * b[9]
+ ldr r7, [r1, #5*4] @ a[5]
+ umull r9, r10, r7, r8 @ d' = a[5] * b[9]
+ ldr r8, [r2, #8*4] @ b[8]
+ umlal r5, r6, r7, r8 @ d += a[5] * b[8]
+ ldr r7, [r1, #6*4] @ a[6]
+ umlal r9, r10, r7, r8 @ d' += a[6] * b[8]
+ ldr r8, [r2, #7*4] @ b[7]
+ umlal r5, r6, r7, r8 @ d += a[6] * b[7]
+ ldr r7, [r1, #7*4] @ a[7]
+ umlal r9, r10, r7, r8 @ d' += a[7] * b[7]
+ ldr r8, [r2, #6*4] @ b[6]
+ umlal r5, r6, r7, r8 @ d += a[7] * b[6]
+ ldr r7, [r1, #8*4] @ a[8]
+ umlal r9, r10, r7, r8 @ d' += a[8] * b[6]
+ ldr r8, [r2, #5*4] @ b[5]
+ umlal r5, r6, r7, r8 @ d += a[8] * b[5]
+ ldr r7, [r1, #9*4] @ a[9]
+ umlal r9, r10, r7, r8 @ d' += a[9] * b[5]
+ ldr r8, [r2, #4*4] @ b[4]
+ umlal r5, r6, r7, r8 @ d += a[9] * b[4]
+
+ bic r0, r5, field_not_M @ u3 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u3 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t3 = c & M
+ str r14, [sp, #4 + 3*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u3 * R1
+ umlal r3, r4, r0, r14
+
+ /* F */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u4 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u4 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t4 = c & M
+ str r14, [sp, #4 + 4*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u4 * R1
+ umlal r3, r4, r0, r14
+
+ /* G - interleaved with H */
+ ldr r7, [r1, #0*4] @ a[0]
+ ldr r8, [r2, #6*4] @ b[6]
+ ldr r14, [r2, #5*4] @ b[5]
+ umull r11, r12, r7, r8 @ c' = a[0] * b[6]
+ ldr r0, [r1, #1*4] @ a[1]
+ umlal r3, r4, r7, r14 @ c += a[0] * b[5]
+ ldr r8, [r2, #4*4] @ b[4]
+ umlal r11, r12, r0, r14 @ c' += a[1] * b[5]
+ ldr r7, [r1, #2*4] @ a[2]
+ umlal r3, r4, r0, r8 @ c += a[1] * b[4]
+ ldr r14, [r2, #3*4] @ b[3]
+ umlal r11, r12, r7, r8 @ c' += a[2] * b[4]
+ ldr r0, [r1, #3*4] @ a[3]
+ umlal r3, r4, r7, r14 @ c += a[2] * b[3]
+ ldr r8, [r2, #2*4] @ b[2]
+ umlal r11, r12, r0, r14 @ c' += a[3] * b[3]
+ ldr r7, [r1, #4*4] @ a[4]
+ umlal r3, r4, r0, r8 @ c += a[3] * b[2]
+ ldr r14, [r2, #1*4] @ b[1]
+ umlal r11, r12, r7, r8 @ c' += a[4] * b[2]
+ ldr r0, [r1, #5*4] @ a[5]
+ umlal r3, r4, r7, r14 @ c += a[4] * b[1]
+ ldr r8, [r2, #0*4] @ b[0]
+ umlal r11, r12, r0, r14 @ c' += a[5] * b[1]
+ ldr r7, [r1, #6*4] @ a[6]
+ umlal r3, r4, r0, r8 @ c += a[5] * b[0]
+ ldr r14, [r2, #9*4] @ b[9]
+ umlal r11, r12, r7, r8 @ c' += a[6] * b[0]
+ ldr r0, [r1, #7*4] @ a[7]
+ umlal r5, r6, r7, r14 @ d += a[6] * b[9]
+ ldr r8, [r2, #8*4] @ b[8]
+ umull r9, r10, r0, r14 @ d' = a[7] * b[9]
+ ldr r7, [r1, #8*4] @ a[8]
+ umlal r5, r6, r0, r8 @ d += a[7] * b[8]
+ ldr r14, [r2, #7*4] @ b[7]
+ umlal r9, r10, r7, r8 @ d' += a[8] * b[8]
+ ldr r0, [r1, #9*4] @ a[9]
+ umlal r5, r6, r7, r14 @ d += a[8] * b[7]
+ ldr r8, [r2, #6*4] @ b[6]
+ umlal r9, r10, r0, r14 @ d' += a[9] * b[7]
+ umlal r5, r6, r0, r8 @ d += a[9] * b[6]
+
+ bic r0, r5, field_not_M @ u5 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u5 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t5 = c & M
+ str r14, [sp, #4 + 5*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u5 * R1
+ umlal r3, r4, r0, r14
+
+ /* H */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u6 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u6 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t6 = c & M
+ str r14, [sp, #4 + 6*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u6 * R1
+ umlal r3, r4, r0, r14
+
+ /* I - interleaved with J */
+ ldr r8, [r2, #8*4] @ b[8]
+ ldr r7, [r1, #0*4] @ a[0]
+ ldr r14, [r2, #7*4] @ b[7]
+ umull r11, r12, r7, r8 @ c' = a[0] * b[8]
+ ldr r0, [r1, #1*4] @ a[1]
+ umlal r3, r4, r7, r14 @ c += a[0] * b[7]
+ ldr r8, [r2, #6*4] @ b[6]
+ umlal r11, r12, r0, r14 @ c' += a[1] * b[7]
+ ldr r7, [r1, #2*4] @ a[2]
+ umlal r3, r4, r0, r8 @ c += a[1] * b[6]
+ ldr r14, [r2, #5*4] @ b[5]
+ umlal r11, r12, r7, r8 @ c' += a[2] * b[6]
+ ldr r0, [r1, #3*4] @ a[3]
+ umlal r3, r4, r7, r14 @ c += a[2] * b[5]
+ ldr r8, [r2, #4*4] @ b[4]
+ umlal r11, r12, r0, r14 @ c' += a[3] * b[5]
+ ldr r7, [r1, #4*4] @ a[4]
+ umlal r3, r4, r0, r8 @ c += a[3] * b[4]
+ ldr r14, [r2, #3*4] @ b[3]
+ umlal r11, r12, r7, r8 @ c' += a[4] * b[4]
+ ldr r0, [r1, #5*4] @ a[5]
+ umlal r3, r4, r7, r14 @ c += a[4] * b[3]
+ ldr r8, [r2, #2*4] @ b[2]
+ umlal r11, r12, r0, r14 @ c' += a[5] * b[3]
+ ldr r7, [r1, #6*4] @ a[6]
+ umlal r3, r4, r0, r8 @ c += a[5] * b[2]
+ ldr r14, [r2, #1*4] @ b[1]
+ umlal r11, r12, r7, r8 @ c' += a[6] * b[2]
+ ldr r0, [r1, #7*4] @ a[7]
+ umlal r3, r4, r7, r14 @ c += a[6] * b[1]
+ ldr r8, [r2, #0*4] @ b[0]
+ umlal r11, r12, r0, r14 @ c' += a[7] * b[1]
+ ldr r7, [r1, #8*4] @ a[8]
+ umlal r3, r4, r0, r8 @ c += a[7] * b[0]
+ ldr r14, [r2, #9*4] @ b[9]
+ umlal r11, r12, r7, r8 @ c' += a[8] * b[0]
+ ldr r0, [r1, #9*4] @ a[9]
+ umlal r5, r6, r7, r14 @ d += a[8] * b[9]
+ ldr r8, [r2, #8*4] @ b[8]
+ umull r9, r10, r0, r14 @ d' = a[9] * b[9]
+ umlal r5, r6, r0, r8 @ d += a[9] * b[8]
+
+ bic r0, r5, field_not_M @ u7 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u7 * R0
+ umlal r3, r4, r0, r14
+
+ bic r14, r3, field_not_M @ t7 = c & M
+ str r14, [sp, #4 + 7*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u7 * R1
+ umlal r3, r4, r0, r14
+
+ /* J */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u8 = d & M
+ str r0, [sp, #4 + 8*4]
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u8 * R0
+ umlal r3, r4, r0, r14
+
+ /******************************************
+ * compute and write back result
+ ******************************************
+ Allocation:
+ r0 r
+ r3:r4 c
+ r5:r6 d
+ r7 t0
+ r8 t1
+ r9 t2
+ r11 u8
+ r12 t9
+ r1,r2,r10,r14 scratch
+
+ Note: do not read from a[] after here, it may overlap with r[]
+ */
+ ldr r0, [sp, #0]
+ add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9
+ ldmia r1, {r2,r7,r8,r9,r10,r11,r12}
+ add r1, r0, #3*4
+ stmia r1, {r2,r7,r8,r9,r10}
+
+ bic r2, r3, field_not_M @ r[8] = c & M
+ str r2, [r0, #8*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u8 * R1
+ umlal r3, r4, r11, r14
+ movw r14, field_R0 @ c += d * R0
+ umlal r3, r4, r5, r14
+ adds r3, r3, r12 @ c += t9
+ adc r4, r4, #0
+
+ add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2
+ ldmia r1, {r7,r8,r9}
+
+ ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4)
+ str r2, [r0, #9*4]
+ mov r3, r3, lsr #22 @ c >>= 22
+ orr r3, r3, r4, asl #10
+ mov r4, r4, lsr #22
+ movw r14, field_R1 << 4 @ c += d * (R1 << 4)
+ umlal r3, r4, r5, r14
+
+ movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add)
+ umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4)
+ adds r5, r5, r7 @ d.lo += t0
+ mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4)
+ adc r6, r6, 0 @ d.hi += carry
+
+ bic r2, r5, field_not_M @ r[0] = d & M
+ str r2, [r0, #0*4]
+
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+
+ movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add)
+ umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4)
+ adds r5, r5, r8 @ d.lo += t1
+ adc r6, r6, #0 @ d.hi += carry
+ adds r5, r5, r1 @ d.lo += tmp.lo
+ mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4)
+ adc r6, r6, r2 @ d.hi += carry + tmp.hi
+
+ bic r2, r5, field_not_M @ r[1] = d & M
+ str r2, [r0, #1*4]
+ mov r5, r5, lsr #26 @ d >>= 26 (ignore hi)
+ orr r5, r5, r6, asl #6
+
+ add r5, r5, r9 @ d += t2
+ str r5, [r0, #2*4] @ r[2] = d
+
+ add sp, sp, #48
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
+ .size secp256k1_fe_mul_inner, .-secp256k1_fe_mul_inner
+
+ .align 2
+ .global secp256k1_fe_sqr_inner
+ .type secp256k1_fe_sqr_inner, %function
+ @ Arguments:
+ @ r0 r Can overlap with a
+ @ r1 a
+ @ Stack (total 4+10*4 = 44)
+ @ sp + #0 saved 'r' pointer
+ @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9
+secp256k1_fe_sqr_inner:
+ stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14}
+ sub sp, sp, #48 @ frame=44 + alignment
+ str r0, [sp, #0] @ save result address, we need it only at the end
+ /******************************************
+ * Main computation code.
+ ******************************************
+
+ Allocation:
+ r0,r14,r2,r7,r8 scratch
+ r1 a (pointer)
+ r3:r4 c
+ r5:r6 d
+ r11:r12 c'
+ r9:r10 d'
+
+ Note: do not write to r[] here, it may overlap with a[]
+ */
+ /* A interleaved with B */
+ ldr r0, [r1, #1*4] @ a[1]*2
+ ldr r7, [r1, #0*4] @ a[0]
+ mov r0, r0, asl #1
+ ldr r14, [r1, #9*4] @ a[9]
+ umull r3, r4, r7, r7 @ c = a[0] * a[0]
+ ldr r8, [r1, #8*4] @ a[8]
+ mov r7, r7, asl #1
+ umull r5, r6, r7, r14 @ d = a[0]*2 * a[9]
+ ldr r7, [r1, #2*4] @ a[2]*2
+ umull r9, r10, r0, r14 @ d' = a[1]*2 * a[9]
+ ldr r14, [r1, #7*4] @ a[7]
+ umlal r5, r6, r0, r8 @ d += a[1]*2 * a[8]
+ mov r7, r7, asl #1
+ ldr r0, [r1, #3*4] @ a[3]*2
+ umlal r9, r10, r7, r8 @ d' += a[2]*2 * a[8]
+ ldr r8, [r1, #6*4] @ a[6]
+ umlal r5, r6, r7, r14 @ d += a[2]*2 * a[7]
+ mov r0, r0, asl #1
+ ldr r7, [r1, #4*4] @ a[4]*2
+ umlal r9, r10, r0, r14 @ d' += a[3]*2 * a[7]
+ ldr r14, [r1, #5*4] @ a[5]
+ mov r7, r7, asl #1
+ umlal r5, r6, r0, r8 @ d += a[3]*2 * a[6]
+ umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[6]
+ umlal r5, r6, r7, r14 @ d += a[4]*2 * a[5]
+ umlal r9, r10, r14, r14 @ d' += a[5] * a[5]
+
+ bic r0, r5, field_not_M @ t9 = d & M
+ str r0, [sp, #4 + 9*4]
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+
+ /* B */
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u0 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u0 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t0 = c & M
+ str r14, [sp, #4 + 0*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u0 * R1
+ umlal r3, r4, r0, r14
+
+ /* C interleaved with D */
+ ldr r0, [r1, #0*4] @ a[0]*2
+ ldr r14, [r1, #1*4] @ a[1]
+ mov r0, r0, asl #1
+ ldr r8, [r1, #2*4] @ a[2]
+ umlal r3, r4, r0, r14 @ c += a[0]*2 * a[1]
+ mov r7, r8, asl #1 @ a[2]*2
+ umull r11, r12, r14, r14 @ c' = a[1] * a[1]
+ ldr r14, [r1, #9*4] @ a[9]
+ umlal r11, r12, r0, r8 @ c' += a[0]*2 * a[2]
+ ldr r0, [r1, #3*4] @ a[3]*2
+ ldr r8, [r1, #8*4] @ a[8]
+ umlal r5, r6, r7, r14 @ d += a[2]*2 * a[9]
+ mov r0, r0, asl #1
+ ldr r7, [r1, #4*4] @ a[4]*2
+ umull r9, r10, r0, r14 @ d' = a[3]*2 * a[9]
+ ldr r14, [r1, #7*4] @ a[7]
+ umlal r5, r6, r0, r8 @ d += a[3]*2 * a[8]
+ mov r7, r7, asl #1
+ ldr r0, [r1, #5*4] @ a[5]*2
+ umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[8]
+ ldr r8, [r1, #6*4] @ a[6]
+ mov r0, r0, asl #1
+ umlal r5, r6, r7, r14 @ d += a[4]*2 * a[7]
+ umlal r9, r10, r0, r14 @ d' += a[5]*2 * a[7]
+ umlal r5, r6, r0, r8 @ d += a[5]*2 * a[6]
+ umlal r9, r10, r8, r8 @ d' += a[6] * a[6]
+
+ bic r0, r5, field_not_M @ u1 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u1 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t1 = c & M
+ str r14, [sp, #4 + 1*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u1 * R1
+ umlal r3, r4, r0, r14
+
+ /* D */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u2 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u2 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t2 = c & M
+ str r14, [sp, #4 + 2*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u2 * R1
+ umlal r3, r4, r0, r14
+
+ /* E interleaved with F */
+ ldr r7, [r1, #0*4] @ a[0]*2
+ ldr r0, [r1, #1*4] @ a[1]*2
+ ldr r14, [r1, #2*4] @ a[2]
+ mov r7, r7, asl #1
+ ldr r8, [r1, #3*4] @ a[3]
+ ldr r2, [r1, #4*4]
+ umlal r3, r4, r7, r8 @ c += a[0]*2 * a[3]
+ mov r0, r0, asl #1
+ umull r11, r12, r7, r2 @ c' = a[0]*2 * a[4]
+ mov r2, r2, asl #1 @ a[4]*2
+ umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[3]
+ ldr r8, [r1, #9*4] @ a[9]
+ umlal r3, r4, r0, r14 @ c += a[1]*2 * a[2]
+ ldr r0, [r1, #5*4] @ a[5]*2
+ umlal r11, r12, r14, r14 @ c' += a[2] * a[2]
+ ldr r14, [r1, #8*4] @ a[8]
+ mov r0, r0, asl #1
+ umlal r5, r6, r2, r8 @ d += a[4]*2 * a[9]
+ ldr r7, [r1, #6*4] @ a[6]*2
+ umull r9, r10, r0, r8 @ d' = a[5]*2 * a[9]
+ mov r7, r7, asl #1
+ ldr r8, [r1, #7*4] @ a[7]
+ umlal r5, r6, r0, r14 @ d += a[5]*2 * a[8]
+ umlal r9, r10, r7, r14 @ d' += a[6]*2 * a[8]
+ umlal r5, r6, r7, r8 @ d += a[6]*2 * a[7]
+ umlal r9, r10, r8, r8 @ d' += a[7] * a[7]
+
+ bic r0, r5, field_not_M @ u3 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u3 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t3 = c & M
+ str r14, [sp, #4 + 3*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u3 * R1
+ umlal r3, r4, r0, r14
+
+ /* F */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u4 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u4 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t4 = c & M
+ str r14, [sp, #4 + 4*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u4 * R1
+ umlal r3, r4, r0, r14
+
+ /* G interleaved with H */
+ ldr r7, [r1, #0*4] @ a[0]*2
+ ldr r0, [r1, #1*4] @ a[1]*2
+ mov r7, r7, asl #1
+ ldr r8, [r1, #5*4] @ a[5]
+ ldr r2, [r1, #6*4] @ a[6]
+ umlal r3, r4, r7, r8 @ c += a[0]*2 * a[5]
+ ldr r14, [r1, #4*4] @ a[4]
+ mov r0, r0, asl #1
+ umull r11, r12, r7, r2 @ c' = a[0]*2 * a[6]
+ ldr r7, [r1, #2*4] @ a[2]*2
+ umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[5]
+ mov r7, r7, asl #1
+ ldr r8, [r1, #3*4] @ a[3]
+ umlal r3, r4, r0, r14 @ c += a[1]*2 * a[4]
+ mov r0, r2, asl #1 @ a[6]*2
+ umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[4]
+ ldr r14, [r1, #9*4] @ a[9]
+ umlal r3, r4, r7, r8 @ c += a[2]*2 * a[3]
+ ldr r7, [r1, #7*4] @ a[7]*2
+ umlal r11, r12, r8, r8 @ c' += a[3] * a[3]
+ mov r7, r7, asl #1
+ ldr r8, [r1, #8*4] @ a[8]
+ umlal r5, r6, r0, r14 @ d += a[6]*2 * a[9]
+ umull r9, r10, r7, r14 @ d' = a[7]*2 * a[9]
+ umlal r5, r6, r7, r8 @ d += a[7]*2 * a[8]
+ umlal r9, r10, r8, r8 @ d' += a[8] * a[8]
+
+ bic r0, r5, field_not_M @ u5 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u5 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t5 = c & M
+ str r14, [sp, #4 + 5*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u5 * R1
+ umlal r3, r4, r0, r14
+
+ /* H */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ adds r5, r5, r9 @ d += d'
+ adc r6, r6, r10
+
+ bic r0, r5, field_not_M @ u6 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u6 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t6 = c & M
+ str r14, [sp, #4 + 6*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u6 * R1
+ umlal r3, r4, r0, r14
+
+ /* I interleaved with J */
+ ldr r7, [r1, #0*4] @ a[0]*2
+ ldr r0, [r1, #1*4] @ a[1]*2
+ mov r7, r7, asl #1
+ ldr r8, [r1, #7*4] @ a[7]
+ ldr r2, [r1, #8*4] @ a[8]
+ umlal r3, r4, r7, r8 @ c += a[0]*2 * a[7]
+ ldr r14, [r1, #6*4] @ a[6]
+ mov r0, r0, asl #1
+ umull r11, r12, r7, r2 @ c' = a[0]*2 * a[8]
+ ldr r7, [r1, #2*4] @ a[2]*2
+ umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[7]
+ ldr r8, [r1, #5*4] @ a[5]
+ umlal r3, r4, r0, r14 @ c += a[1]*2 * a[6]
+ ldr r0, [r1, #3*4] @ a[3]*2
+ mov r7, r7, asl #1
+ umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[6]
+ ldr r14, [r1, #4*4] @ a[4]
+ mov r0, r0, asl #1
+ umlal r3, r4, r7, r8 @ c += a[2]*2 * a[5]
+ mov r2, r2, asl #1 @ a[8]*2
+ umlal r11, r12, r0, r8 @ c' += a[3]*2 * a[5]
+ umlal r3, r4, r0, r14 @ c += a[3]*2 * a[4]
+ umlal r11, r12, r14, r14 @ c' += a[4] * a[4]
+ ldr r8, [r1, #9*4] @ a[9]
+ umlal r5, r6, r2, r8 @ d += a[8]*2 * a[9]
+ @ r8 will be used in J
+
+ bic r0, r5, field_not_M @ u7 = d & M
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u7 * R0
+ umlal r3, r4, r0, r14
+ bic r14, r3, field_not_M @ t7 = c & M
+ str r14, [sp, #4 + 7*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u7 * R1
+ umlal r3, r4, r0, r14
+
+ /* J */
+ adds r3, r3, r11 @ c += c'
+ adc r4, r4, r12
+ umlal r5, r6, r8, r8 @ d += a[9] * a[9]
+
+ bic r0, r5, field_not_M @ u8 = d & M
+ str r0, [sp, #4 + 8*4]
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+ movw r14, field_R0 @ c += u8 * R0
+ umlal r3, r4, r0, r14
+
+ /******************************************
+ * compute and write back result
+ ******************************************
+ Allocation:
+ r0 r
+ r3:r4 c
+ r5:r6 d
+ r7 t0
+ r8 t1
+ r9 t2
+ r11 u8
+ r12 t9
+ r1,r2,r10,r14 scratch
+
+ Note: do not read from a[] after here, it may overlap with r[]
+ */
+ ldr r0, [sp, #0]
+ add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9
+ ldmia r1, {r2,r7,r8,r9,r10,r11,r12}
+ add r1, r0, #3*4
+ stmia r1, {r2,r7,r8,r9,r10}
+
+ bic r2, r3, field_not_M @ r[8] = c & M
+ str r2, [r0, #8*4]
+ mov r3, r3, lsr #26 @ c >>= 26
+ orr r3, r3, r4, asl #6
+ mov r4, r4, lsr #26
+ mov r14, field_R1 @ c += u8 * R1
+ umlal r3, r4, r11, r14
+ movw r14, field_R0 @ c += d * R0
+ umlal r3, r4, r5, r14
+ adds r3, r3, r12 @ c += t9
+ adc r4, r4, #0
+
+ add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2
+ ldmia r1, {r7,r8,r9}
+
+ ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4)
+ str r2, [r0, #9*4]
+ mov r3, r3, lsr #22 @ c >>= 22
+ orr r3, r3, r4, asl #10
+ mov r4, r4, lsr #22
+ movw r14, field_R1 << 4 @ c += d * (R1 << 4)
+ umlal r3, r4, r5, r14
+
+ movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add)
+ umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4)
+ adds r5, r5, r7 @ d.lo += t0
+ mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4)
+ adc r6, r6, 0 @ d.hi += carry
+
+ bic r2, r5, field_not_M @ r[0] = d & M
+ str r2, [r0, #0*4]
+
+ mov r5, r5, lsr #26 @ d >>= 26
+ orr r5, r5, r6, asl #6
+ mov r6, r6, lsr #26
+
+ movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add)
+ umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4)
+ adds r5, r5, r8 @ d.lo += t1
+ adc r6, r6, #0 @ d.hi += carry
+ adds r5, r5, r1 @ d.lo += tmp.lo
+ mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4)
+ adc r6, r6, r2 @ d.hi += carry + tmp.hi
+
+ bic r2, r5, field_not_M @ r[1] = d & M
+ str r2, [r0, #1*4]
+ mov r5, r5, lsr #26 @ d >>= 26 (ignore hi)
+ orr r5, r5, r6, asl #6
+
+ add r5, r5, r9 @ d += t2
+ str r5, [r0, #2*4] @ r[2] = d
+
+ add sp, sp, #48
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
+ .size secp256k1_fe_sqr_inner, .-secp256k1_fe_sqr_inner
+
diff --git a/crypto/secp256k1/libsecp256k1/src/basic-config.h b/crypto/secp256k1/libsecp256k1/src/basic-config.h
new file mode 100644
index 000000000..c4c16eb7c
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/basic-config.h
@@ -0,0 +1,32 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_BASIC_CONFIG_
+#define _SECP256K1_BASIC_CONFIG_
+
+#ifdef USE_BASIC_CONFIG
+
+#undef USE_ASM_X86_64
+#undef USE_ENDOMORPHISM
+#undef USE_FIELD_10X26
+#undef USE_FIELD_5X52
+#undef USE_FIELD_INV_BUILTIN
+#undef USE_FIELD_INV_NUM
+#undef USE_NUM_GMP
+#undef USE_NUM_NONE
+#undef USE_SCALAR_4X64
+#undef USE_SCALAR_8X32
+#undef USE_SCALAR_INV_BUILTIN
+#undef USE_SCALAR_INV_NUM
+
+#define USE_NUM_NONE 1
+#define USE_FIELD_INV_BUILTIN 1
+#define USE_SCALAR_INV_BUILTIN 1
+#define USE_FIELD_10X26 1
+#define USE_SCALAR_8X32 1
+
+#endif // USE_BASIC_CONFIG
+#endif // _SECP256K1_BASIC_CONFIG_
diff --git a/crypto/secp256k1/libsecp256k1/src/bench.h b/crypto/secp256k1/libsecp256k1/src/bench.h
new file mode 100644
index 000000000..3a71b4aaf
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/bench.h
@@ -0,0 +1,66 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_BENCH_H_
+#define _SECP256K1_BENCH_H_
+
+#include <stdio.h>
+#include <math.h>
+#include "sys/time.h"
+
+static double gettimedouble(void) {
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return tv.tv_usec * 0.000001 + tv.tv_sec;
+}
+
+void print_number(double x) {
+ double y = x;
+ int c = 0;
+ if (y < 0.0) {
+ y = -y;
+ }
+ while (y < 100.0) {
+ y *= 10.0;
+ c++;
+ }
+ printf("%.*f", c, x);
+}
+
+void run_benchmark(char *name, void (*benchmark)(void*), void (*setup)(void*), void (*teardown)(void*), void* data, int count, int iter) {
+ int i;
+ double min = HUGE_VAL;
+ double sum = 0.0;
+ double max = 0.0;
+ for (i = 0; i < count; i++) {
+ double begin, total;
+ if (setup != NULL) {
+ setup(data);
+ }
+ begin = gettimedouble();
+ benchmark(data);
+ total = gettimedouble() - begin;
+ if (teardown != NULL) {
+ teardown(data);
+ }
+ if (total < min) {
+ min = total;
+ }
+ if (total > max) {
+ max = total;
+ }
+ sum += total;
+ }
+ printf("%s: min ", name);
+ print_number(min * 1000000.0 / iter);
+ printf("us / avg ");
+ print_number((sum / count) * 1000000.0 / iter);
+ printf("us / max ");
+ print_number(max * 1000000.0 / iter);
+ printf("us\n");
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/bench_ecdh.c b/crypto/secp256k1/libsecp256k1/src/bench_ecdh.c
new file mode 100644
index 000000000..cde5e2dbb
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/bench_ecdh.c
@@ -0,0 +1,54 @@
+/**********************************************************************
+ * Copyright (c) 2015 Pieter Wuille, Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include <string.h>
+
+#include "include/secp256k1.h"
+#include "include/secp256k1_ecdh.h"
+#include "util.h"
+#include "bench.h"
+
+typedef struct {
+ secp256k1_context *ctx;
+ secp256k1_pubkey point;
+ unsigned char scalar[32];
+} bench_ecdh_t;
+
+static void bench_ecdh_setup(void* arg) {
+ int i;
+ bench_ecdh_t *data = (bench_ecdh_t*)arg;
+ const unsigned char point[] = {
+ 0x03,
+ 0x54, 0x94, 0xc1, 0x5d, 0x32, 0x09, 0x97, 0x06,
+ 0xc2, 0x39, 0x5f, 0x94, 0x34, 0x87, 0x45, 0xfd,
+ 0x75, 0x7c, 0xe3, 0x0e, 0x4e, 0x8c, 0x90, 0xfb,
+ 0xa2, 0xba, 0xd1, 0x84, 0xf8, 0x83, 0xc6, 0x9f
+ };
+
+ /* create a context with no capabilities */
+ data->ctx = secp256k1_context_create(SECP256K1_FLAGS_TYPE_CONTEXT);
+ for (i = 0; i < 32; i++) {
+ data->scalar[i] = i + 1;
+ }
+ CHECK(secp256k1_ec_pubkey_parse(data->ctx, &data->point, point, sizeof(point)) == 1);
+}
+
+static void bench_ecdh(void* arg) {
+ int i;
+ unsigned char res[32];
+ bench_ecdh_t *data = (bench_ecdh_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ CHECK(secp256k1_ecdh(data->ctx, res, &data->point, data->scalar) == 1);
+ }
+}
+
+int main(void) {
+ bench_ecdh_t data;
+
+ run_benchmark("ecdh", bench_ecdh, bench_ecdh_setup, NULL, &data, 10, 20000);
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/bench_internal.c b/crypto/secp256k1/libsecp256k1/src/bench_internal.c
new file mode 100644
index 000000000..0809f77bd
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/bench_internal.c
@@ -0,0 +1,382 @@
+/**********************************************************************
+ * Copyright (c) 2014-2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+#include <stdio.h>
+
+#include "include/secp256k1.h"
+
+#include "util.h"
+#include "hash_impl.h"
+#include "num_impl.h"
+#include "field_impl.h"
+#include "group_impl.h"
+#include "scalar_impl.h"
+#include "ecmult_const_impl.h"
+#include "ecmult_impl.h"
+#include "bench.h"
+#include "secp256k1.c"
+
+typedef struct {
+ secp256k1_scalar scalar_x, scalar_y;
+ secp256k1_fe fe_x, fe_y;
+ secp256k1_ge ge_x, ge_y;
+ secp256k1_gej gej_x, gej_y;
+ unsigned char data[64];
+ int wnaf[256];
+} bench_inv_t;
+
+void bench_setup(void* arg) {
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ static const unsigned char init_x[32] = {
+ 0x02, 0x03, 0x05, 0x07, 0x0b, 0x0d, 0x11, 0x13,
+ 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35,
+ 0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59,
+ 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71, 0x7f, 0x83
+ };
+
+ static const unsigned char init_y[32] = {
+ 0x82, 0x83, 0x85, 0x87, 0x8b, 0x8d, 0x81, 0x83,
+ 0x97, 0xad, 0xaf, 0xb5, 0xb9, 0xbb, 0xbf, 0xc5,
+ 0xdb, 0xdd, 0xe3, 0xe7, 0xe9, 0xef, 0xf3, 0xf9,
+ 0x11, 0x15, 0x17, 0x1b, 0x1d, 0xb1, 0xbf, 0xd3
+ };
+
+ secp256k1_scalar_set_b32(&data->scalar_x, init_x, NULL);
+ secp256k1_scalar_set_b32(&data->scalar_y, init_y, NULL);
+ secp256k1_fe_set_b32(&data->fe_x, init_x);
+ secp256k1_fe_set_b32(&data->fe_y, init_y);
+ CHECK(secp256k1_ge_set_xo_var(&data->ge_x, &data->fe_x, 0));
+ CHECK(secp256k1_ge_set_xo_var(&data->ge_y, &data->fe_y, 1));
+ secp256k1_gej_set_ge(&data->gej_x, &data->ge_x);
+ secp256k1_gej_set_ge(&data->gej_y, &data->ge_y);
+ memcpy(data->data, init_x, 32);
+ memcpy(data->data + 32, init_y, 32);
+}
+
+void bench_scalar_add(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 2000000; i++) {
+ secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
+ }
+}
+
+void bench_scalar_negate(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 2000000; i++) {
+ secp256k1_scalar_negate(&data->scalar_x, &data->scalar_x);
+ }
+}
+
+void bench_scalar_sqr(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_scalar_sqr(&data->scalar_x, &data->scalar_x);
+ }
+}
+
+void bench_scalar_mul(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_scalar_mul(&data->scalar_x, &data->scalar_x, &data->scalar_y);
+ }
+}
+
+#ifdef USE_ENDOMORPHISM
+void bench_scalar_split(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_scalar l, r;
+ secp256k1_scalar_split_lambda(&l, &r, &data->scalar_x);
+ secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
+ }
+}
+#endif
+
+void bench_scalar_inverse(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 2000; i++) {
+ secp256k1_scalar_inverse(&data->scalar_x, &data->scalar_x);
+ secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
+ }
+}
+
+void bench_scalar_inverse_var(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 2000; i++) {
+ secp256k1_scalar_inverse_var(&data->scalar_x, &data->scalar_x);
+ secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
+ }
+}
+
+void bench_field_normalize(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 2000000; i++) {
+ secp256k1_fe_normalize(&data->fe_x);
+ }
+}
+
+void bench_field_normalize_weak(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 2000000; i++) {
+ secp256k1_fe_normalize_weak(&data->fe_x);
+ }
+}
+
+void bench_field_mul(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_fe_mul(&data->fe_x, &data->fe_x, &data->fe_y);
+ }
+}
+
+void bench_field_sqr(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_fe_sqr(&data->fe_x, &data->fe_x);
+ }
+}
+
+void bench_field_inverse(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_fe_inv(&data->fe_x, &data->fe_x);
+ secp256k1_fe_add(&data->fe_x, &data->fe_y);
+ }
+}
+
+void bench_field_inverse_var(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_fe_inv_var(&data->fe_x, &data->fe_x);
+ secp256k1_fe_add(&data->fe_x, &data->fe_y);
+ }
+}
+
+void bench_field_sqrt(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_fe_sqrt(&data->fe_x, &data->fe_x);
+ secp256k1_fe_add(&data->fe_x, &data->fe_y);
+ }
+}
+
+void bench_group_double_var(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_gej_double_var(&data->gej_x, &data->gej_x, NULL);
+ }
+}
+
+void bench_group_add_var(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_gej_add_var(&data->gej_x, &data->gej_x, &data->gej_y, NULL);
+ }
+}
+
+void bench_group_add_affine(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_gej_add_ge(&data->gej_x, &data->gej_x, &data->ge_y);
+ }
+}
+
+void bench_group_add_affine_var(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_gej_add_ge_var(&data->gej_x, &data->gej_x, &data->ge_y, NULL);
+ }
+}
+
+void bench_group_jacobi_var(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_gej_has_quad_y_var(&data->gej_x);
+ }
+}
+
+void bench_ecmult_wnaf(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_ecmult_wnaf(data->wnaf, 256, &data->scalar_x, WINDOW_A);
+ secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
+ }
+}
+
+void bench_wnaf_const(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_wnaf_const(data->wnaf, data->scalar_x, WINDOW_A);
+ secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
+ }
+}
+
+
+void bench_sha256(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+ secp256k1_sha256_t sha;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_sha256_initialize(&sha);
+ secp256k1_sha256_write(&sha, data->data, 32);
+ secp256k1_sha256_finalize(&sha, data->data);
+ }
+}
+
+void bench_hmac_sha256(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+ secp256k1_hmac_sha256_t hmac;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_hmac_sha256_initialize(&hmac, data->data, 32);
+ secp256k1_hmac_sha256_write(&hmac, data->data, 32);
+ secp256k1_hmac_sha256_finalize(&hmac, data->data);
+ }
+}
+
+void bench_rfc6979_hmac_sha256(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+ secp256k1_rfc6979_hmac_sha256_t rng;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, data->data, 64);
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, data->data, 32);
+ }
+}
+
+void bench_context_verify(void* arg) {
+ int i;
+ (void)arg;
+ for (i = 0; i < 20; i++) {
+ secp256k1_context_destroy(secp256k1_context_create(SECP256K1_CONTEXT_VERIFY));
+ }
+}
+
+void bench_context_sign(void* arg) {
+ int i;
+ (void)arg;
+ for (i = 0; i < 200; i++) {
+ secp256k1_context_destroy(secp256k1_context_create(SECP256K1_CONTEXT_SIGN));
+ }
+}
+
+#ifndef USE_NUM_NONE
+void bench_num_jacobi(void* arg) {
+ int i;
+ bench_inv_t *data = (bench_inv_t*)arg;
+ secp256k1_num nx, norder;
+
+ secp256k1_scalar_get_num(&nx, &data->scalar_x);
+ secp256k1_scalar_order_get_num(&norder);
+ secp256k1_scalar_get_num(&norder, &data->scalar_y);
+
+ for (i = 0; i < 200000; i++) {
+ secp256k1_num_jacobi(&nx, &norder);
+ }
+}
+#endif
+
+int have_flag(int argc, char** argv, char *flag) {
+ char** argm = argv + argc;
+ argv++;
+ if (argv == argm) {
+ return 1;
+ }
+ while (argv != NULL && argv != argm) {
+ if (strcmp(*argv, flag) == 0) {
+ return 1;
+ }
+ argv++;
+ }
+ return 0;
+}
+
+int main(int argc, char **argv) {
+ bench_inv_t data;
+ if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "add")) run_benchmark("scalar_add", bench_scalar_add, bench_setup, NULL, &data, 10, 2000000);
+ if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "negate")) run_benchmark("scalar_negate", bench_scalar_negate, bench_setup, NULL, &data, 10, 2000000);
+ if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "sqr")) run_benchmark("scalar_sqr", bench_scalar_sqr, bench_setup, NULL, &data, 10, 200000);
+ if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "mul")) run_benchmark("scalar_mul", bench_scalar_mul, bench_setup, NULL, &data, 10, 200000);
+#ifdef USE_ENDOMORPHISM
+ if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "split")) run_benchmark("scalar_split", bench_scalar_split, bench_setup, NULL, &data, 10, 20000);
+#endif
+ if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "inverse")) run_benchmark("scalar_inverse", bench_scalar_inverse, bench_setup, NULL, &data, 10, 2000);
+ if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "inverse")) run_benchmark("scalar_inverse_var", bench_scalar_inverse_var, bench_setup, NULL, &data, 10, 2000);
+
+ if (have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize", bench_field_normalize, bench_setup, NULL, &data, 10, 2000000);
+ if (have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize_weak", bench_field_normalize_weak, bench_setup, NULL, &data, 10, 2000000);
+ if (have_flag(argc, argv, "field") || have_flag(argc, argv, "sqr")) run_benchmark("field_sqr", bench_field_sqr, bench_setup, NULL, &data, 10, 200000);
+ if (have_flag(argc, argv, "field") || have_flag(argc, argv, "mul")) run_benchmark("field_mul", bench_field_mul, bench_setup, NULL, &data, 10, 200000);
+ if (have_flag(argc, argv, "field") || have_flag(argc, argv, "inverse")) run_benchmark("field_inverse", bench_field_inverse, bench_setup, NULL, &data, 10, 20000);
+ if (have_flag(argc, argv, "field") || have_flag(argc, argv, "inverse")) run_benchmark("field_inverse_var", bench_field_inverse_var, bench_setup, NULL, &data, 10, 20000);
+ if (have_flag(argc, argv, "field") || have_flag(argc, argv, "sqrt")) run_benchmark("field_sqrt", bench_field_sqrt, bench_setup, NULL, &data, 10, 20000);
+
+ if (have_flag(argc, argv, "group") || have_flag(argc, argv, "double")) run_benchmark("group_double_var", bench_group_double_var, bench_setup, NULL, &data, 10, 200000);
+ if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_var", bench_group_add_var, bench_setup, NULL, &data, 10, 200000);
+ if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_affine", bench_group_add_affine, bench_setup, NULL, &data, 10, 200000);
+ if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_affine_var", bench_group_add_affine_var, bench_setup, NULL, &data, 10, 200000);
+ if (have_flag(argc, argv, "group") || have_flag(argc, argv, "jacobi")) run_benchmark("group_jacobi_var", bench_group_jacobi_var, bench_setup, NULL, &data, 10, 20000);
+
+ if (have_flag(argc, argv, "ecmult") || have_flag(argc, argv, "wnaf")) run_benchmark("wnaf_const", bench_wnaf_const, bench_setup, NULL, &data, 10, 20000);
+ if (have_flag(argc, argv, "ecmult") || have_flag(argc, argv, "wnaf")) run_benchmark("ecmult_wnaf", bench_ecmult_wnaf, bench_setup, NULL, &data, 10, 20000);
+
+ if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "sha256")) run_benchmark("hash_sha256", bench_sha256, bench_setup, NULL, &data, 10, 20000);
+ if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "hmac")) run_benchmark("hash_hmac_sha256", bench_hmac_sha256, bench_setup, NULL, &data, 10, 20000);
+ if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "rng6979")) run_benchmark("hash_rfc6979_hmac_sha256", bench_rfc6979_hmac_sha256, bench_setup, NULL, &data, 10, 20000);
+
+ if (have_flag(argc, argv, "context") || have_flag(argc, argv, "verify")) run_benchmark("context_verify", bench_context_verify, bench_setup, NULL, &data, 10, 20);
+ if (have_flag(argc, argv, "context") || have_flag(argc, argv, "sign")) run_benchmark("context_sign", bench_context_sign, bench_setup, NULL, &data, 10, 200);
+
+#ifndef USE_NUM_NONE
+ if (have_flag(argc, argv, "num") || have_flag(argc, argv, "jacobi")) run_benchmark("num_jacobi", bench_num_jacobi, bench_setup, NULL, &data, 10, 200000);
+#endif
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/bench_recover.c b/crypto/secp256k1/libsecp256k1/src/bench_recover.c
new file mode 100644
index 000000000..6489378cc
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/bench_recover.c
@@ -0,0 +1,60 @@
+/**********************************************************************
+ * Copyright (c) 2014-2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include "include/secp256k1.h"
+#include "include/secp256k1_recovery.h"
+#include "util.h"
+#include "bench.h"
+
+typedef struct {
+ secp256k1_context *ctx;
+ unsigned char msg[32];
+ unsigned char sig[64];
+} bench_recover_t;
+
+void bench_recover(void* arg) {
+ int i;
+ bench_recover_t *data = (bench_recover_t*)arg;
+ secp256k1_pubkey pubkey;
+ unsigned char pubkeyc[33];
+
+ for (i = 0; i < 20000; i++) {
+ int j;
+ size_t pubkeylen = 33;
+ secp256k1_ecdsa_recoverable_signature sig;
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(data->ctx, &sig, data->sig, i % 2));
+ CHECK(secp256k1_ecdsa_recover(data->ctx, &pubkey, &sig, data->msg));
+ CHECK(secp256k1_ec_pubkey_serialize(data->ctx, pubkeyc, &pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED));
+ for (j = 0; j < 32; j++) {
+ data->sig[j + 32] = data->msg[j]; /* Move former message to S. */
+ data->msg[j] = data->sig[j]; /* Move former R to message. */
+ data->sig[j] = pubkeyc[j + 1]; /* Move recovered pubkey X coordinate to R (which must be a valid X coordinate). */
+ }
+ }
+}
+
+void bench_recover_setup(void* arg) {
+ int i;
+ bench_recover_t *data = (bench_recover_t*)arg;
+
+ for (i = 0; i < 32; i++) {
+ data->msg[i] = 1 + i;
+ }
+ for (i = 0; i < 64; i++) {
+ data->sig[i] = 65 + i;
+ }
+}
+
+int main(void) {
+ bench_recover_t data;
+
+ data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
+
+ run_benchmark("ecdsa_recover", bench_recover, bench_recover_setup, NULL, &data, 10, 20000);
+
+ secp256k1_context_destroy(data.ctx);
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/bench_schnorr_verify.c b/crypto/secp256k1/libsecp256k1/src/bench_schnorr_verify.c
new file mode 100644
index 000000000..5f137dda2
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/bench_schnorr_verify.c
@@ -0,0 +1,73 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+
+#include "include/secp256k1.h"
+#include "include/secp256k1_schnorr.h"
+#include "util.h"
+#include "bench.h"
+
+typedef struct {
+ unsigned char key[32];
+ unsigned char sig[64];
+ unsigned char pubkey[33];
+ size_t pubkeylen;
+} benchmark_schnorr_sig_t;
+
+typedef struct {
+ secp256k1_context *ctx;
+ unsigned char msg[32];
+ benchmark_schnorr_sig_t sigs[64];
+ int numsigs;
+} benchmark_schnorr_verify_t;
+
+static void benchmark_schnorr_init(void* arg) {
+ int i, k;
+ benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg;
+
+ for (i = 0; i < 32; i++) {
+ data->msg[i] = 1 + i;
+ }
+ for (k = 0; k < data->numsigs; k++) {
+ secp256k1_pubkey pubkey;
+ for (i = 0; i < 32; i++) {
+ data->sigs[k].key[i] = 33 + i + k;
+ }
+ secp256k1_schnorr_sign(data->ctx, data->sigs[k].sig, data->msg, data->sigs[k].key, NULL, NULL);
+ data->sigs[k].pubkeylen = 33;
+ CHECK(secp256k1_ec_pubkey_create(data->ctx, &pubkey, data->sigs[k].key));
+ CHECK(secp256k1_ec_pubkey_serialize(data->ctx, data->sigs[k].pubkey, &data->sigs[k].pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED));
+ }
+}
+
+static void benchmark_schnorr_verify(void* arg) {
+ int i;
+ benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg;
+
+ for (i = 0; i < 20000 / data->numsigs; i++) {
+ secp256k1_pubkey pubkey;
+ data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF);
+ CHECK(secp256k1_ec_pubkey_parse(data->ctx, &pubkey, data->sigs[0].pubkey, data->sigs[0].pubkeylen));
+ CHECK(secp256k1_schnorr_verify(data->ctx, data->sigs[0].sig, data->msg, &pubkey) == ((i & 0xFF) == 0));
+ data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF);
+ }
+}
+
+
+
+int main(void) {
+ benchmark_schnorr_verify_t data;
+
+ data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+
+ data.numsigs = 1;
+ run_benchmark("schnorr_verify", benchmark_schnorr_verify, benchmark_schnorr_init, NULL, &data, 10, 20000);
+
+ secp256k1_context_destroy(data.ctx);
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/bench_sign.c b/crypto/secp256k1/libsecp256k1/src/bench_sign.c
new file mode 100644
index 000000000..ed7224d75
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/bench_sign.c
@@ -0,0 +1,56 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include "include/secp256k1.h"
+#include "util.h"
+#include "bench.h"
+
+typedef struct {
+ secp256k1_context* ctx;
+ unsigned char msg[32];
+ unsigned char key[32];
+} bench_sign_t;
+
+static void bench_sign_setup(void* arg) {
+ int i;
+ bench_sign_t *data = (bench_sign_t*)arg;
+
+ for (i = 0; i < 32; i++) {
+ data->msg[i] = i + 1;
+ }
+ for (i = 0; i < 32; i++) {
+ data->key[i] = i + 65;
+ }
+}
+
+static void bench_sign(void* arg) {
+ int i;
+ bench_sign_t *data = (bench_sign_t*)arg;
+
+ unsigned char sig[74];
+ for (i = 0; i < 20000; i++) {
+ size_t siglen = 74;
+ int j;
+ secp256k1_ecdsa_signature signature;
+ CHECK(secp256k1_ecdsa_sign(data->ctx, &signature, data->msg, data->key, NULL, NULL));
+ CHECK(secp256k1_ecdsa_signature_serialize_der(data->ctx, sig, &siglen, &signature));
+ for (j = 0; j < 32; j++) {
+ data->msg[j] = sig[j];
+ data->key[j] = sig[j + 32];
+ }
+ }
+}
+
+int main(void) {
+ bench_sign_t data;
+
+ data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
+
+ run_benchmark("ecdsa_sign", bench_sign, bench_sign_setup, NULL, &data, 10, 20000);
+
+ secp256k1_context_destroy(data.ctx);
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/bench_verify.c b/crypto/secp256k1/libsecp256k1/src/bench_verify.c
new file mode 100644
index 000000000..418defa0a
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/bench_verify.c
@@ -0,0 +1,112 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+
+#include "include/secp256k1.h"
+#include "util.h"
+#include "bench.h"
+
+#ifdef ENABLE_OPENSSL_TESTS
+#include <openssl/bn.h>
+#include <openssl/ecdsa.h>
+#include <openssl/obj_mac.h>
+#endif
+
+typedef struct {
+ secp256k1_context *ctx;
+ unsigned char msg[32];
+ unsigned char key[32];
+ unsigned char sig[72];
+ size_t siglen;
+ unsigned char pubkey[33];
+ size_t pubkeylen;
+#ifdef ENABLE_OPENSSL_TESTS
+ EC_GROUP* ec_group;
+#endif
+} benchmark_verify_t;
+
+static void benchmark_verify(void* arg) {
+ int i;
+ benchmark_verify_t* data = (benchmark_verify_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ secp256k1_pubkey pubkey;
+ secp256k1_ecdsa_signature sig;
+ data->sig[data->siglen - 1] ^= (i & 0xFF);
+ data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
+ data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
+ CHECK(secp256k1_ec_pubkey_parse(data->ctx, &pubkey, data->pubkey, data->pubkeylen) == 1);
+ CHECK(secp256k1_ecdsa_signature_parse_der(data->ctx, &sig, data->sig, data->siglen) == 1);
+ CHECK(secp256k1_ecdsa_verify(data->ctx, &sig, data->msg, &pubkey) == (i == 0));
+ data->sig[data->siglen - 1] ^= (i & 0xFF);
+ data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
+ data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
+ }
+}
+
+#ifdef ENABLE_OPENSSL_TESTS
+static void benchmark_verify_openssl(void* arg) {
+ int i;
+ benchmark_verify_t* data = (benchmark_verify_t*)arg;
+
+ for (i = 0; i < 20000; i++) {
+ data->sig[data->siglen - 1] ^= (i & 0xFF);
+ data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
+ data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
+ {
+ EC_KEY *pkey = EC_KEY_new();
+ const unsigned char *pubkey = &data->pubkey[0];
+ int result;
+
+ CHECK(pkey != NULL);
+ result = EC_KEY_set_group(pkey, data->ec_group);
+ CHECK(result);
+ result = (o2i_ECPublicKey(&pkey, &pubkey, data->pubkeylen)) != NULL;
+ CHECK(result);
+ result = ECDSA_verify(0, &data->msg[0], sizeof(data->msg), &data->sig[0], data->siglen, pkey) == (i == 0);
+ CHECK(result);
+ EC_KEY_free(pkey);
+ }
+ data->sig[data->siglen - 1] ^= (i & 0xFF);
+ data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
+ data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
+ }
+}
+#endif
+
+int main(void) {
+ int i;
+ secp256k1_pubkey pubkey;
+ secp256k1_ecdsa_signature sig;
+ benchmark_verify_t data;
+
+ data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+
+ for (i = 0; i < 32; i++) {
+ data.msg[i] = 1 + i;
+ }
+ for (i = 0; i < 32; i++) {
+ data.key[i] = 33 + i;
+ }
+ data.siglen = 72;
+ CHECK(secp256k1_ecdsa_sign(data.ctx, &sig, data.msg, data.key, NULL, NULL));
+ CHECK(secp256k1_ecdsa_signature_serialize_der(data.ctx, data.sig, &data.siglen, &sig));
+ CHECK(secp256k1_ec_pubkey_create(data.ctx, &pubkey, data.key));
+ data.pubkeylen = 33;
+ CHECK(secp256k1_ec_pubkey_serialize(data.ctx, data.pubkey, &data.pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
+
+ run_benchmark("ecdsa_verify", benchmark_verify, NULL, NULL, &data, 10, 20000);
+#ifdef ENABLE_OPENSSL_TESTS
+ data.ec_group = EC_GROUP_new_by_curve_name(NID_secp256k1);
+ run_benchmark("ecdsa_verify_openssl", benchmark_verify_openssl, NULL, NULL, &data, 10, 20000);
+ EC_GROUP_free(data.ec_group);
+#endif
+
+ secp256k1_context_destroy(data.ctx);
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/dummy.go b/crypto/secp256k1/libsecp256k1/src/dummy.go
new file mode 100644
index 000000000..65868f38a
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package src
diff --git a/crypto/secp256k1/libsecp256k1/src/ecdsa.h b/crypto/secp256k1/libsecp256k1/src/ecdsa.h
new file mode 100644
index 000000000..54ae101b9
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecdsa.h
@@ -0,0 +1,21 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECDSA_
+#define _SECP256K1_ECDSA_
+
+#include <stddef.h>
+
+#include "scalar.h"
+#include "group.h"
+#include "ecmult.h"
+
+static int secp256k1_ecdsa_sig_parse(secp256k1_scalar *r, secp256k1_scalar *s, const unsigned char *sig, size_t size);
+static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar *r, const secp256k1_scalar *s);
+static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context *ctx, const secp256k1_scalar* r, const secp256k1_scalar* s, const secp256k1_ge *pubkey, const secp256k1_scalar *message);
+static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, secp256k1_scalar* r, secp256k1_scalar* s, const secp256k1_scalar *seckey, const secp256k1_scalar *message, const secp256k1_scalar *nonce, int *recid);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h b/crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h
new file mode 100644
index 000000000..453bb1188
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h
@@ -0,0 +1,315 @@
+/**********************************************************************
+ * Copyright (c) 2013-2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+
+#ifndef _SECP256K1_ECDSA_IMPL_H_
+#define _SECP256K1_ECDSA_IMPL_H_
+
+#include "scalar.h"
+#include "field.h"
+#include "group.h"
+#include "ecmult.h"
+#include "ecmult_gen.h"
+#include "ecdsa.h"
+
+/** Group order for secp256k1 defined as 'n' in "Standards for Efficient Cryptography" (SEC2) 2.7.1
+ * sage: for t in xrange(1023, -1, -1):
+ * .. p = 2**256 - 2**32 - t
+ * .. if p.is_prime():
+ * .. print '%x'%p
+ * .. break
+ * 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'
+ * sage: a = 0
+ * sage: b = 7
+ * sage: F = FiniteField (p)
+ * sage: '%x' % (EllipticCurve ([F (a), F (b)]).order())
+ * 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'
+ */
+static const secp256k1_fe secp256k1_ecdsa_const_order_as_fe = SECP256K1_FE_CONST(
+ 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL,
+ 0xBAAEDCE6UL, 0xAF48A03BUL, 0xBFD25E8CUL, 0xD0364141UL
+);
+
+/** Difference between field and order, values 'p' and 'n' values defined in
+ * "Standards for Efficient Cryptography" (SEC2) 2.7.1.
+ * sage: p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
+ * sage: a = 0
+ * sage: b = 7
+ * sage: F = FiniteField (p)
+ * sage: '%x' % (p - EllipticCurve ([F (a), F (b)]).order())
+ * '14551231950b75fc4402da1722fc9baee'
+ */
+static const secp256k1_fe secp256k1_ecdsa_const_p_minus_order = SECP256K1_FE_CONST(
+ 0, 0, 0, 1, 0x45512319UL, 0x50B75FC4UL, 0x402DA172UL, 0x2FC9BAEEUL
+);
+
+static int secp256k1_der_read_len(const unsigned char **sigp, const unsigned char *sigend) {
+ int lenleft, b1;
+ size_t ret = 0;
+ if (*sigp >= sigend) {
+ return -1;
+ }
+ b1 = *((*sigp)++);
+ if (b1 == 0xFF) {
+ /* X.690-0207 8.1.3.5.c the value 0xFF shall not be used. */
+ return -1;
+ }
+ if ((b1 & 0x80) == 0) {
+ /* X.690-0207 8.1.3.4 short form length octets */
+ return b1;
+ }
+ if (b1 == 0x80) {
+ /* Indefinite length is not allowed in DER. */
+ return -1;
+ }
+ /* X.690-207 8.1.3.5 long form length octets */
+ lenleft = b1 & 0x7F;
+ if (lenleft > sigend - *sigp) {
+ return -1;
+ }
+ if (**sigp == 0) {
+ /* Not the shortest possible length encoding. */
+ return -1;
+ }
+ if ((size_t)lenleft > sizeof(size_t)) {
+ /* The resulting length would exceed the range of a size_t, so
+ * certainly longer than the passed array size.
+ */
+ return -1;
+ }
+ while (lenleft > 0) {
+ if ((ret >> ((sizeof(size_t) - 1) * 8)) != 0) {
+ }
+ ret = (ret << 8) | **sigp;
+ if (ret + lenleft > (size_t)(sigend - *sigp)) {
+ /* Result exceeds the length of the passed array. */
+ return -1;
+ }
+ (*sigp)++;
+ lenleft--;
+ }
+ if (ret < 128) {
+ /* Not the shortest possible length encoding. */
+ return -1;
+ }
+ return ret;
+}
+
+static int secp256k1_der_parse_integer(secp256k1_scalar *r, const unsigned char **sig, const unsigned char *sigend) {
+ int overflow = 0;
+ unsigned char ra[32] = {0};
+ int rlen;
+
+ if (*sig == sigend || **sig != 0x02) {
+ /* Not a primitive integer (X.690-0207 8.3.1). */
+ return 0;
+ }
+ (*sig)++;
+ rlen = secp256k1_der_read_len(sig, sigend);
+ if (rlen <= 0 || (*sig) + rlen > sigend) {
+ /* Exceeds bounds or not at least length 1 (X.690-0207 8.3.1). */
+ return 0;
+ }
+ if (**sig == 0x00 && rlen > 1 && (((*sig)[1]) & 0x80) == 0x00) {
+ /* Excessive 0x00 padding. */
+ return 0;
+ }
+ if (**sig == 0xFF && rlen > 1 && (((*sig)[1]) & 0x80) == 0x80) {
+ /* Excessive 0xFF padding. */
+ return 0;
+ }
+ if ((**sig & 0x80) == 0x80) {
+ /* Negative. */
+ overflow = 1;
+ }
+ while (rlen > 0 && **sig == 0) {
+ /* Skip leading zero bytes */
+ rlen--;
+ (*sig)++;
+ }
+ if (rlen > 32) {
+ overflow = 1;
+ }
+ if (!overflow) {
+ memcpy(ra + 32 - rlen, *sig, rlen);
+ secp256k1_scalar_set_b32(r, ra, &overflow);
+ }
+ if (overflow) {
+ secp256k1_scalar_set_int(r, 0);
+ }
+ (*sig) += rlen;
+ return 1;
+}
+
+static int secp256k1_ecdsa_sig_parse(secp256k1_scalar *rr, secp256k1_scalar *rs, const unsigned char *sig, size_t size) {
+ const unsigned char *sigend = sig + size;
+ int rlen;
+ if (sig == sigend || *(sig++) != 0x30) {
+ /* The encoding doesn't start with a constructed sequence (X.690-0207 8.9.1). */
+ return 0;
+ }
+ rlen = secp256k1_der_read_len(&sig, sigend);
+ if (rlen < 0 || sig + rlen > sigend) {
+ /* Tuple exceeds bounds */
+ return 0;
+ }
+ if (sig + rlen != sigend) {
+ /* Garbage after tuple. */
+ return 0;
+ }
+
+ if (!secp256k1_der_parse_integer(rr, &sig, sigend)) {
+ return 0;
+ }
+ if (!secp256k1_der_parse_integer(rs, &sig, sigend)) {
+ return 0;
+ }
+
+ if (sig != sigend) {
+ /* Trailing garbage inside tuple. */
+ return 0;
+ }
+
+ return 1;
+}
+
+static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar* ar, const secp256k1_scalar* as) {
+ unsigned char r[33] = {0}, s[33] = {0};
+ unsigned char *rp = r, *sp = s;
+ size_t lenR = 33, lenS = 33;
+ secp256k1_scalar_get_b32(&r[1], ar);
+ secp256k1_scalar_get_b32(&s[1], as);
+ while (lenR > 1 && rp[0] == 0 && rp[1] < 0x80) { lenR--; rp++; }
+ while (lenS > 1 && sp[0] == 0 && sp[1] < 0x80) { lenS--; sp++; }
+ if (*size < 6+lenS+lenR) {
+ *size = 6 + lenS + lenR;
+ return 0;
+ }
+ *size = 6 + lenS + lenR;
+ sig[0] = 0x30;
+ sig[1] = 4 + lenS + lenR;
+ sig[2] = 0x02;
+ sig[3] = lenR;
+ memcpy(sig+4, rp, lenR);
+ sig[4+lenR] = 0x02;
+ sig[5+lenR] = lenS;
+ memcpy(sig+lenR+6, sp, lenS);
+ return 1;
+}
+
+static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context *ctx, const secp256k1_scalar *sigr, const secp256k1_scalar *sigs, const secp256k1_ge *pubkey, const secp256k1_scalar *message) {
+ unsigned char c[32];
+ secp256k1_scalar sn, u1, u2;
+#if !defined(EXHAUSTIVE_TEST_ORDER)
+ secp256k1_fe xr;
+#endif
+ secp256k1_gej pubkeyj;
+ secp256k1_gej pr;
+
+ if (secp256k1_scalar_is_zero(sigr) || secp256k1_scalar_is_zero(sigs)) {
+ return 0;
+ }
+
+ secp256k1_scalar_inverse_var(&sn, sigs);
+ secp256k1_scalar_mul(&u1, &sn, message);
+ secp256k1_scalar_mul(&u2, &sn, sigr);
+ secp256k1_gej_set_ge(&pubkeyj, pubkey);
+ secp256k1_ecmult(ctx, &pr, &pubkeyj, &u2, &u1);
+ if (secp256k1_gej_is_infinity(&pr)) {
+ return 0;
+ }
+
+#if defined(EXHAUSTIVE_TEST_ORDER)
+{
+ secp256k1_scalar computed_r;
+ secp256k1_ge pr_ge;
+ secp256k1_ge_set_gej(&pr_ge, &pr);
+ secp256k1_fe_normalize(&pr_ge.x);
+
+ secp256k1_fe_get_b32(c, &pr_ge.x);
+ secp256k1_scalar_set_b32(&computed_r, c, NULL);
+ return secp256k1_scalar_eq(sigr, &computed_r);
+}
+#else
+ secp256k1_scalar_get_b32(c, sigr);
+ secp256k1_fe_set_b32(&xr, c);
+
+ /** We now have the recomputed R point in pr, and its claimed x coordinate (modulo n)
+ * in xr. Naively, we would extract the x coordinate from pr (requiring a inversion modulo p),
+ * compute the remainder modulo n, and compare it to xr. However:
+ *
+ * xr == X(pr) mod n
+ * <=> exists h. (xr + h * n < p && xr + h * n == X(pr))
+ * [Since 2 * n > p, h can only be 0 or 1]
+ * <=> (xr == X(pr)) || (xr + n < p && xr + n == X(pr))
+ * [In Jacobian coordinates, X(pr) is pr.x / pr.z^2 mod p]
+ * <=> (xr == pr.x / pr.z^2 mod p) || (xr + n < p && xr + n == pr.x / pr.z^2 mod p)
+ * [Multiplying both sides of the equations by pr.z^2 mod p]
+ * <=> (xr * pr.z^2 mod p == pr.x) || (xr + n < p && (xr + n) * pr.z^2 mod p == pr.x)
+ *
+ * Thus, we can avoid the inversion, but we have to check both cases separately.
+ * secp256k1_gej_eq_x implements the (xr * pr.z^2 mod p == pr.x) test.
+ */
+ if (secp256k1_gej_eq_x_var(&xr, &pr)) {
+ /* xr * pr.z^2 mod p == pr.x, so the signature is valid. */
+ return 1;
+ }
+ if (secp256k1_fe_cmp_var(&xr, &secp256k1_ecdsa_const_p_minus_order) >= 0) {
+ /* xr + n >= p, so we can skip testing the second case. */
+ return 0;
+ }
+ secp256k1_fe_add(&xr, &secp256k1_ecdsa_const_order_as_fe);
+ if (secp256k1_gej_eq_x_var(&xr, &pr)) {
+ /* (xr + n) * pr.z^2 mod p == pr.x, so the signature is valid. */
+ return 1;
+ }
+ return 0;
+#endif
+}
+
+static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, secp256k1_scalar *sigr, secp256k1_scalar *sigs, const secp256k1_scalar *seckey, const secp256k1_scalar *message, const secp256k1_scalar *nonce, int *recid) {
+ unsigned char b[32];
+ secp256k1_gej rp;
+ secp256k1_ge r;
+ secp256k1_scalar n;
+ int overflow = 0;
+
+ secp256k1_ecmult_gen(ctx, &rp, nonce);
+ secp256k1_ge_set_gej(&r, &rp);
+ secp256k1_fe_normalize(&r.x);
+ secp256k1_fe_normalize(&r.y);
+ secp256k1_fe_get_b32(b, &r.x);
+ secp256k1_scalar_set_b32(sigr, b, &overflow);
+ /* These two conditions should be checked before calling */
+ VERIFY_CHECK(!secp256k1_scalar_is_zero(sigr));
+ VERIFY_CHECK(overflow == 0);
+
+ if (recid) {
+ /* The overflow condition is cryptographically unreachable as hitting it requires finding the discrete log
+ * of some P where P.x >= order, and only 1 in about 2^127 points meet this criteria.
+ */
+ *recid = (overflow ? 2 : 0) | (secp256k1_fe_is_odd(&r.y) ? 1 : 0);
+ }
+ secp256k1_scalar_mul(&n, sigr, seckey);
+ secp256k1_scalar_add(&n, &n, message);
+ secp256k1_scalar_inverse(sigs, nonce);
+ secp256k1_scalar_mul(sigs, sigs, &n);
+ secp256k1_scalar_clear(&n);
+ secp256k1_gej_clear(&rp);
+ secp256k1_ge_clear(&r);
+ if (secp256k1_scalar_is_zero(sigs)) {
+ return 0;
+ }
+ if (secp256k1_scalar_is_high(sigs)) {
+ secp256k1_scalar_negate(sigs, sigs);
+ if (recid) {
+ *recid ^= 1;
+ }
+ }
+ return 1;
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/eckey.h b/crypto/secp256k1/libsecp256k1/src/eckey.h
new file mode 100644
index 000000000..42739a3be
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/eckey.h
@@ -0,0 +1,25 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECKEY_
+#define _SECP256K1_ECKEY_
+
+#include <stddef.h>
+
+#include "group.h"
+#include "scalar.h"
+#include "ecmult.h"
+#include "ecmult_gen.h"
+
+static int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size);
+static int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed);
+
+static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak);
+static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak);
+static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak);
+static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/eckey_impl.h b/crypto/secp256k1/libsecp256k1/src/eckey_impl.h
new file mode 100644
index 000000000..ce38071ac
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/eckey_impl.h
@@ -0,0 +1,99 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECKEY_IMPL_H_
+#define _SECP256K1_ECKEY_IMPL_H_
+
+#include "eckey.h"
+
+#include "scalar.h"
+#include "field.h"
+#include "group.h"
+#include "ecmult_gen.h"
+
+static int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size) {
+ if (size == 33 && (pub[0] == 0x02 || pub[0] == 0x03)) {
+ secp256k1_fe x;
+ return secp256k1_fe_set_b32(&x, pub+1) && secp256k1_ge_set_xo_var(elem, &x, pub[0] == 0x03);
+ } else if (size == 65 && (pub[0] == 0x04 || pub[0] == 0x06 || pub[0] == 0x07)) {
+ secp256k1_fe x, y;
+ if (!secp256k1_fe_set_b32(&x, pub+1) || !secp256k1_fe_set_b32(&y, pub+33)) {
+ return 0;
+ }
+ secp256k1_ge_set_xy(elem, &x, &y);
+ if ((pub[0] == 0x06 || pub[0] == 0x07) && secp256k1_fe_is_odd(&y) != (pub[0] == 0x07)) {
+ return 0;
+ }
+ return secp256k1_ge_is_valid_var(elem);
+ } else {
+ return 0;
+ }
+}
+
+static int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed) {
+ if (secp256k1_ge_is_infinity(elem)) {
+ return 0;
+ }
+ secp256k1_fe_normalize_var(&elem->x);
+ secp256k1_fe_normalize_var(&elem->y);
+ secp256k1_fe_get_b32(&pub[1], &elem->x);
+ if (compressed) {
+ *size = 33;
+ pub[0] = 0x02 | (secp256k1_fe_is_odd(&elem->y) ? 0x01 : 0x00);
+ } else {
+ *size = 65;
+ pub[0] = 0x04;
+ secp256k1_fe_get_b32(&pub[33], &elem->y);
+ }
+ return 1;
+}
+
+static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak) {
+ secp256k1_scalar_add(key, key, tweak);
+ if (secp256k1_scalar_is_zero(key)) {
+ return 0;
+ }
+ return 1;
+}
+
+static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak) {
+ secp256k1_gej pt;
+ secp256k1_scalar one;
+ secp256k1_gej_set_ge(&pt, key);
+ secp256k1_scalar_set_int(&one, 1);
+ secp256k1_ecmult(ctx, &pt, &pt, &one, tweak);
+
+ if (secp256k1_gej_is_infinity(&pt)) {
+ return 0;
+ }
+ secp256k1_ge_set_gej(key, &pt);
+ return 1;
+}
+
+static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak) {
+ if (secp256k1_scalar_is_zero(tweak)) {
+ return 0;
+ }
+
+ secp256k1_scalar_mul(key, key, tweak);
+ return 1;
+}
+
+static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak) {
+ secp256k1_scalar zero;
+ secp256k1_gej pt;
+ if (secp256k1_scalar_is_zero(tweak)) {
+ return 0;
+ }
+
+ secp256k1_scalar_set_int(&zero, 0);
+ secp256k1_gej_set_ge(&pt, key);
+ secp256k1_ecmult(ctx, &pt, &pt, tweak, &zero);
+ secp256k1_ge_set_gej(key, &pt);
+ return 1;
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/ecmult.h b/crypto/secp256k1/libsecp256k1/src/ecmult.h
new file mode 100644
index 000000000..20484134f
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecmult.h
@@ -0,0 +1,31 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECMULT_
+#define _SECP256K1_ECMULT_
+
+#include "num.h"
+#include "group.h"
+
+typedef struct {
+ /* For accelerating the computation of a*P + b*G: */
+ secp256k1_ge_storage (*pre_g)[]; /* odd multiples of the generator */
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge_storage (*pre_g_128)[]; /* odd multiples of 2^128*generator */
+#endif
+} secp256k1_ecmult_context;
+
+static void secp256k1_ecmult_context_init(secp256k1_ecmult_context *ctx);
+static void secp256k1_ecmult_context_build(secp256k1_ecmult_context *ctx, const secp256k1_callback *cb);
+static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context *dst,
+ const secp256k1_ecmult_context *src, const secp256k1_callback *cb);
+static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context *ctx);
+static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context *ctx);
+
+/** Double multiply: R = na*A + ng*G */
+static void secp256k1_ecmult(const secp256k1_ecmult_context *ctx, secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/ecmult_const.h b/crypto/secp256k1/libsecp256k1/src/ecmult_const.h
new file mode 100644
index 000000000..2b0097655
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecmult_const.h
@@ -0,0 +1,15 @@
+/**********************************************************************
+ * Copyright (c) 2015 Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECMULT_CONST_
+#define _SECP256K1_ECMULT_CONST_
+
+#include "scalar.h"
+#include "group.h"
+
+static void secp256k1_ecmult_const(secp256k1_gej *r, const secp256k1_ge *a, const secp256k1_scalar *q);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/ecmult_const_impl.h b/crypto/secp256k1/libsecp256k1/src/ecmult_const_impl.h
new file mode 100644
index 000000000..0db314c48
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecmult_const_impl.h
@@ -0,0 +1,239 @@
+/**********************************************************************
+ * Copyright (c) 2015 Pieter Wuille, Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECMULT_CONST_IMPL_
+#define _SECP256K1_ECMULT_CONST_IMPL_
+
+#include "scalar.h"
+#include "group.h"
+#include "ecmult_const.h"
+#include "ecmult_impl.h"
+
+#ifdef USE_ENDOMORPHISM
+ #define WNAF_BITS 128
+#else
+ #define WNAF_BITS 256
+#endif
+#define WNAF_SIZE(w) ((WNAF_BITS + (w) - 1) / (w))
+
+/* This is like `ECMULT_TABLE_GET_GE` but is constant time */
+#define ECMULT_CONST_TABLE_GET_GE(r,pre,n,w) do { \
+ int m; \
+ int abs_n = (n) * (((n) > 0) * 2 - 1); \
+ int idx_n = abs_n / 2; \
+ secp256k1_fe neg_y; \
+ VERIFY_CHECK(((n) & 1) == 1); \
+ VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
+ VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
+ VERIFY_SETUP(secp256k1_fe_clear(&(r)->x)); \
+ VERIFY_SETUP(secp256k1_fe_clear(&(r)->y)); \
+ for (m = 0; m < ECMULT_TABLE_SIZE(w); m++) { \
+ /* This loop is used to avoid secret data in array indices. See
+ * the comment in ecmult_gen_impl.h for rationale. */ \
+ secp256k1_fe_cmov(&(r)->x, &(pre)[m].x, m == idx_n); \
+ secp256k1_fe_cmov(&(r)->y, &(pre)[m].y, m == idx_n); \
+ } \
+ (r)->infinity = 0; \
+ secp256k1_fe_negate(&neg_y, &(r)->y, 1); \
+ secp256k1_fe_cmov(&(r)->y, &neg_y, (n) != abs_n); \
+} while(0)
+
+
+/** Convert a number to WNAF notation. The number becomes represented by sum(2^{wi} * wnaf[i], i=0..return_val)
+ * with the following guarantees:
+ * - each wnaf[i] an odd integer between -(1 << w) and (1 << w)
+ * - each wnaf[i] is nonzero
+ * - the number of words set is returned; this is always (WNAF_BITS + w - 1) / w
+ *
+ * Adapted from `The Width-w NAF Method Provides Small Memory and Fast Elliptic Scalar
+ * Multiplications Secure against Side Channel Attacks`, Okeya and Tagaki. M. Joye (Ed.)
+ * CT-RSA 2003, LNCS 2612, pp. 328-443, 2003. Springer-Verlagy Berlin Heidelberg 2003
+ *
+ * Numbers reference steps of `Algorithm SPA-resistant Width-w NAF with Odd Scalar` on pp. 335
+ */
+static int secp256k1_wnaf_const(int *wnaf, secp256k1_scalar s, int w) {
+ int global_sign;
+ int skew = 0;
+ int word = 0;
+
+ /* 1 2 3 */
+ int u_last;
+ int u;
+
+ int flip;
+ int bit;
+ secp256k1_scalar neg_s;
+ int not_neg_one;
+ /* Note that we cannot handle even numbers by negating them to be odd, as is
+ * done in other implementations, since if our scalars were specified to have
+ * width < 256 for performance reasons, their negations would have width 256
+ * and we'd lose any performance benefit. Instead, we use a technique from
+ * Section 4.2 of the Okeya/Tagaki paper, which is to add either 1 (for even)
+ * or 2 (for odd) to the number we are encoding, returning a skew value indicating
+ * this, and having the caller compensate after doing the multiplication. */
+
+ /* Negative numbers will be negated to keep their bit representation below the maximum width */
+ flip = secp256k1_scalar_is_high(&s);
+ /* We add 1 to even numbers, 2 to odd ones, noting that negation flips parity */
+ bit = flip ^ !secp256k1_scalar_is_even(&s);
+ /* We check for negative one, since adding 2 to it will cause an overflow */
+ secp256k1_scalar_negate(&neg_s, &s);
+ not_neg_one = !secp256k1_scalar_is_one(&neg_s);
+ secp256k1_scalar_cadd_bit(&s, bit, not_neg_one);
+ /* If we had negative one, flip == 1, s.d[0] == 0, bit == 1, so caller expects
+ * that we added two to it and flipped it. In fact for -1 these operations are
+ * identical. We only flipped, but since skewing is required (in the sense that
+ * the skew must be 1 or 2, never zero) and flipping is not, we need to change
+ * our flags to claim that we only skewed. */
+ global_sign = secp256k1_scalar_cond_negate(&s, flip);
+ global_sign *= not_neg_one * 2 - 1;
+ skew = 1 << bit;
+
+ /* 4 */
+ u_last = secp256k1_scalar_shr_int(&s, w);
+ while (word * w < WNAF_BITS) {
+ int sign;
+ int even;
+
+ /* 4.1 4.4 */
+ u = secp256k1_scalar_shr_int(&s, w);
+ /* 4.2 */
+ even = ((u & 1) == 0);
+ sign = 2 * (u_last > 0) - 1;
+ u += sign * even;
+ u_last -= sign * even * (1 << w);
+
+ /* 4.3, adapted for global sign change */
+ wnaf[word++] = u_last * global_sign;
+
+ u_last = u;
+ }
+ wnaf[word] = u * global_sign;
+
+ VERIFY_CHECK(secp256k1_scalar_is_zero(&s));
+ VERIFY_CHECK(word == WNAF_SIZE(w));
+ return skew;
+}
+
+
+static void secp256k1_ecmult_const(secp256k1_gej *r, const secp256k1_ge *a, const secp256k1_scalar *scalar) {
+ secp256k1_ge pre_a[ECMULT_TABLE_SIZE(WINDOW_A)];
+ secp256k1_ge tmpa;
+ secp256k1_fe Z;
+
+ int skew_1;
+ int wnaf_1[1 + WNAF_SIZE(WINDOW_A - 1)];
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge pre_a_lam[ECMULT_TABLE_SIZE(WINDOW_A)];
+ int wnaf_lam[1 + WNAF_SIZE(WINDOW_A - 1)];
+ int skew_lam;
+ secp256k1_scalar q_1, q_lam;
+#endif
+
+ int i;
+ secp256k1_scalar sc = *scalar;
+
+ /* build wnaf representation for q. */
+#ifdef USE_ENDOMORPHISM
+ /* split q into q_1 and q_lam (where q = q_1 + q_lam*lambda, and q_1 and q_lam are ~128 bit) */
+ secp256k1_scalar_split_lambda(&q_1, &q_lam, &sc);
+ skew_1 = secp256k1_wnaf_const(wnaf_1, q_1, WINDOW_A - 1);
+ skew_lam = secp256k1_wnaf_const(wnaf_lam, q_lam, WINDOW_A - 1);
+#else
+ skew_1 = secp256k1_wnaf_const(wnaf_1, sc, WINDOW_A - 1);
+#endif
+
+ /* Calculate odd multiples of a.
+ * All multiples are brought to the same Z 'denominator', which is stored
+ * in Z. Due to secp256k1' isomorphism we can do all operations pretending
+ * that the Z coordinate was 1, use affine addition formulae, and correct
+ * the Z coordinate of the result once at the end.
+ */
+ secp256k1_gej_set_ge(r, a);
+ secp256k1_ecmult_odd_multiples_table_globalz_windowa(pre_a, &Z, r);
+ for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {
+ secp256k1_fe_normalize_weak(&pre_a[i].y);
+ }
+#ifdef USE_ENDOMORPHISM
+ for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {
+ secp256k1_ge_mul_lambda(&pre_a_lam[i], &pre_a[i]);
+ }
+#endif
+
+ /* first loop iteration (separated out so we can directly set r, rather
+ * than having it start at infinity, get doubled several times, then have
+ * its new value added to it) */
+ i = wnaf_1[WNAF_SIZE(WINDOW_A - 1)];
+ VERIFY_CHECK(i != 0);
+ ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a, i, WINDOW_A);
+ secp256k1_gej_set_ge(r, &tmpa);
+#ifdef USE_ENDOMORPHISM
+ i = wnaf_lam[WNAF_SIZE(WINDOW_A - 1)];
+ VERIFY_CHECK(i != 0);
+ ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a_lam, i, WINDOW_A);
+ secp256k1_gej_add_ge(r, r, &tmpa);
+#endif
+ /* remaining loop iterations */
+ for (i = WNAF_SIZE(WINDOW_A - 1) - 1; i >= 0; i--) {
+ int n;
+ int j;
+ for (j = 0; j < WINDOW_A - 1; ++j) {
+ secp256k1_gej_double_nonzero(r, r, NULL);
+ }
+
+ n = wnaf_1[i];
+ ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A);
+ VERIFY_CHECK(n != 0);
+ secp256k1_gej_add_ge(r, r, &tmpa);
+#ifdef USE_ENDOMORPHISM
+ n = wnaf_lam[i];
+ ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a_lam, n, WINDOW_A);
+ VERIFY_CHECK(n != 0);
+ secp256k1_gej_add_ge(r, r, &tmpa);
+#endif
+ }
+
+ secp256k1_fe_mul(&r->z, &r->z, &Z);
+
+ {
+ /* Correct for wNAF skew */
+ secp256k1_ge correction = *a;
+ secp256k1_ge_storage correction_1_stor;
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge_storage correction_lam_stor;
+#endif
+ secp256k1_ge_storage a2_stor;
+ secp256k1_gej tmpj;
+ secp256k1_gej_set_ge(&tmpj, &correction);
+ secp256k1_gej_double_var(&tmpj, &tmpj, NULL);
+ secp256k1_ge_set_gej(&correction, &tmpj);
+ secp256k1_ge_to_storage(&correction_1_stor, a);
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge_to_storage(&correction_lam_stor, a);
+#endif
+ secp256k1_ge_to_storage(&a2_stor, &correction);
+
+ /* For odd numbers this is 2a (so replace it), for even ones a (so no-op) */
+ secp256k1_ge_storage_cmov(&correction_1_stor, &a2_stor, skew_1 == 2);
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge_storage_cmov(&correction_lam_stor, &a2_stor, skew_lam == 2);
+#endif
+
+ /* Apply the correction */
+ secp256k1_ge_from_storage(&correction, &correction_1_stor);
+ secp256k1_ge_neg(&correction, &correction);
+ secp256k1_gej_add_ge(r, r, &correction);
+
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge_from_storage(&correction, &correction_lam_stor);
+ secp256k1_ge_neg(&correction, &correction);
+ secp256k1_ge_mul_lambda(&correction, &correction);
+ secp256k1_gej_add_ge(r, r, &correction);
+#endif
+ }
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/ecmult_gen.h b/crypto/secp256k1/libsecp256k1/src/ecmult_gen.h
new file mode 100644
index 000000000..eb2cc9ead
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecmult_gen.h
@@ -0,0 +1,43 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECMULT_GEN_
+#define _SECP256K1_ECMULT_GEN_
+
+#include "scalar.h"
+#include "group.h"
+
+typedef struct {
+ /* For accelerating the computation of a*G:
+ * To harden against timing attacks, use the following mechanism:
+ * * Break up the multiplicand into groups of 4 bits, called n_0, n_1, n_2, ..., n_63.
+ * * Compute sum(n_i * 16^i * G + U_i, i=0..63), where:
+ * * U_i = U * 2^i (for i=0..62)
+ * * U_i = U * (1-2^63) (for i=63)
+ * where U is a point with no known corresponding scalar. Note that sum(U_i, i=0..63) = 0.
+ * For each i, and each of the 16 possible values of n_i, (n_i * 16^i * G + U_i) is
+ * precomputed (call it prec(i, n_i)). The formula now becomes sum(prec(i, n_i), i=0..63).
+ * None of the resulting prec group elements have a known scalar, and neither do any of
+ * the intermediate sums while computing a*G.
+ */
+ secp256k1_ge_storage (*prec)[64][16]; /* prec[j][i] = 16^j * i * G + U_i */
+ secp256k1_scalar blind;
+ secp256k1_gej initial;
+} secp256k1_ecmult_gen_context;
+
+static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context* ctx);
+static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context* ctx, const secp256k1_callback* cb);
+static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context *dst,
+ const secp256k1_ecmult_gen_context* src, const secp256k1_callback* cb);
+static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context* ctx);
+static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context* ctx);
+
+/** Multiply with the generator: R = a*G */
+static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context* ctx, secp256k1_gej *r, const secp256k1_scalar *a);
+
+static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/ecmult_gen_impl.h b/crypto/secp256k1/libsecp256k1/src/ecmult_gen_impl.h
new file mode 100644
index 000000000..35f254607
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecmult_gen_impl.h
@@ -0,0 +1,210 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECMULT_GEN_IMPL_H_
+#define _SECP256K1_ECMULT_GEN_IMPL_H_
+
+#include "scalar.h"
+#include "group.h"
+#include "ecmult_gen.h"
+#include "hash_impl.h"
+#ifdef USE_ECMULT_STATIC_PRECOMPUTATION
+#include "ecmult_static_context.h"
+#endif
+static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context *ctx) {
+ ctx->prec = NULL;
+}
+
+static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx, const secp256k1_callback* cb) {
+#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
+ secp256k1_ge prec[1024];
+ secp256k1_gej gj;
+ secp256k1_gej nums_gej;
+ int i, j;
+#endif
+
+ if (ctx->prec != NULL) {
+ return;
+ }
+#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
+ ctx->prec = (secp256k1_ge_storage (*)[64][16])checked_malloc(cb, sizeof(*ctx->prec));
+
+ /* get the generator */
+ secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g);
+
+ /* Construct a group element with no known corresponding scalar (nothing up my sleeve). */
+ {
+ static const unsigned char nums_b32[33] = "The scalar for this x is unknown";
+ secp256k1_fe nums_x;
+ secp256k1_ge nums_ge;
+ int r;
+ r = secp256k1_fe_set_b32(&nums_x, nums_b32);
+ (void)r;
+ VERIFY_CHECK(r);
+ r = secp256k1_ge_set_xo_var(&nums_ge, &nums_x, 0);
+ (void)r;
+ VERIFY_CHECK(r);
+ secp256k1_gej_set_ge(&nums_gej, &nums_ge);
+ /* Add G to make the bits in x uniformly distributed. */
+ secp256k1_gej_add_ge_var(&nums_gej, &nums_gej, &secp256k1_ge_const_g, NULL);
+ }
+
+ /* compute prec. */
+ {
+ secp256k1_gej precj[1024]; /* Jacobian versions of prec. */
+ secp256k1_gej gbase;
+ secp256k1_gej numsbase;
+ gbase = gj; /* 16^j * G */
+ numsbase = nums_gej; /* 2^j * nums. */
+ for (j = 0; j < 64; j++) {
+ /* Set precj[j*16 .. j*16+15] to (numsbase, numsbase + gbase, ..., numsbase + 15*gbase). */
+ precj[j*16] = numsbase;
+ for (i = 1; i < 16; i++) {
+ secp256k1_gej_add_var(&precj[j*16 + i], &precj[j*16 + i - 1], &gbase, NULL);
+ }
+ /* Multiply gbase by 16. */
+ for (i = 0; i < 4; i++) {
+ secp256k1_gej_double_var(&gbase, &gbase, NULL);
+ }
+ /* Multiply numbase by 2. */
+ secp256k1_gej_double_var(&numsbase, &numsbase, NULL);
+ if (j == 62) {
+ /* In the last iteration, numsbase is (1 - 2^j) * nums instead. */
+ secp256k1_gej_neg(&numsbase, &numsbase);
+ secp256k1_gej_add_var(&numsbase, &numsbase, &nums_gej, NULL);
+ }
+ }
+ secp256k1_ge_set_all_gej_var(prec, precj, 1024, cb);
+ }
+ for (j = 0; j < 64; j++) {
+ for (i = 0; i < 16; i++) {
+ secp256k1_ge_to_storage(&(*ctx->prec)[j][i], &prec[j*16 + i]);
+ }
+ }
+#else
+ (void)cb;
+ ctx->prec = (secp256k1_ge_storage (*)[64][16])secp256k1_ecmult_static_context;
+#endif
+ secp256k1_ecmult_gen_blind(ctx, NULL);
+}
+
+static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context* ctx) {
+ return ctx->prec != NULL;
+}
+
+static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context *dst,
+ const secp256k1_ecmult_gen_context *src, const secp256k1_callback* cb) {
+ if (src->prec == NULL) {
+ dst->prec = NULL;
+ } else {
+#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
+ dst->prec = (secp256k1_ge_storage (*)[64][16])checked_malloc(cb, sizeof(*dst->prec));
+ memcpy(dst->prec, src->prec, sizeof(*dst->prec));
+#else
+ (void)cb;
+ dst->prec = src->prec;
+#endif
+ dst->initial = src->initial;
+ dst->blind = src->blind;
+ }
+}
+
+static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context *ctx) {
+#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
+ free(ctx->prec);
+#endif
+ secp256k1_scalar_clear(&ctx->blind);
+ secp256k1_gej_clear(&ctx->initial);
+ ctx->prec = NULL;
+}
+
+static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp256k1_gej *r, const secp256k1_scalar *gn) {
+ secp256k1_ge add;
+ secp256k1_ge_storage adds;
+ secp256k1_scalar gnb;
+ int bits;
+ int i, j;
+ memset(&adds, 0, sizeof(adds));
+ *r = ctx->initial;
+ /* Blind scalar/point multiplication by computing (n-b)G + bG instead of nG. */
+ secp256k1_scalar_add(&gnb, gn, &ctx->blind);
+ add.infinity = 0;
+ for (j = 0; j < 64; j++) {
+ bits = secp256k1_scalar_get_bits(&gnb, j * 4, 4);
+ for (i = 0; i < 16; i++) {
+ /** This uses a conditional move to avoid any secret data in array indexes.
+ * _Any_ use of secret indexes has been demonstrated to result in timing
+ * sidechannels, even when the cache-line access patterns are uniform.
+ * See also:
+ * "A word of warning", CHES 2013 Rump Session, by Daniel J. Bernstein and Peter Schwabe
+ * (https://cryptojedi.org/peter/data/chesrump-20130822.pdf) and
+ * "Cache Attacks and Countermeasures: the Case of AES", RSA 2006,
+ * by Dag Arne Osvik, Adi Shamir, and Eran Tromer
+ * (http://www.tau.ac.il/~tromer/papers/cache.pdf)
+ */
+ secp256k1_ge_storage_cmov(&adds, &(*ctx->prec)[j][i], i == bits);
+ }
+ secp256k1_ge_from_storage(&add, &adds);
+ secp256k1_gej_add_ge(r, r, &add);
+ }
+ bits = 0;
+ secp256k1_ge_clear(&add);
+ secp256k1_scalar_clear(&gnb);
+}
+
+/* Setup blinding values for secp256k1_ecmult_gen. */
+static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32) {
+ secp256k1_scalar b;
+ secp256k1_gej gb;
+ secp256k1_fe s;
+ unsigned char nonce32[32];
+ secp256k1_rfc6979_hmac_sha256_t rng;
+ int retry;
+ unsigned char keydata[64] = {0};
+ if (seed32 == NULL) {
+ /* When seed is NULL, reset the initial point and blinding value. */
+ secp256k1_gej_set_ge(&ctx->initial, &secp256k1_ge_const_g);
+ secp256k1_gej_neg(&ctx->initial, &ctx->initial);
+ secp256k1_scalar_set_int(&ctx->blind, 1);
+ }
+ /* The prior blinding value (if not reset) is chained forward by including it in the hash. */
+ secp256k1_scalar_get_b32(nonce32, &ctx->blind);
+ /** Using a CSPRNG allows a failure free interface, avoids needing large amounts of random data,
+ * and guards against weak or adversarial seeds. This is a simpler and safer interface than
+ * asking the caller for blinding values directly and expecting them to retry on failure.
+ */
+ memcpy(keydata, nonce32, 32);
+ if (seed32 != NULL) {
+ memcpy(keydata + 32, seed32, 32);
+ }
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, keydata, seed32 ? 64 : 32);
+ memset(keydata, 0, sizeof(keydata));
+ /* Retry for out of range results to achieve uniformity. */
+ do {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
+ retry = !secp256k1_fe_set_b32(&s, nonce32);
+ retry |= secp256k1_fe_is_zero(&s);
+ } while (retry); /* This branch true is cryptographically unreachable. Requires sha256_hmac output > Fp. */
+ /* Randomize the projection to defend against multiplier sidechannels. */
+ secp256k1_gej_rescale(&ctx->initial, &s);
+ secp256k1_fe_clear(&s);
+ do {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
+ secp256k1_scalar_set_b32(&b, nonce32, &retry);
+ /* A blinding value of 0 works, but would undermine the projection hardening. */
+ retry |= secp256k1_scalar_is_zero(&b);
+ } while (retry); /* This branch true is cryptographically unreachable. Requires sha256_hmac output > order. */
+ secp256k1_rfc6979_hmac_sha256_finalize(&rng);
+ memset(nonce32, 0, 32);
+ secp256k1_ecmult_gen(ctx, &gb, &b);
+ secp256k1_scalar_negate(&b, &b);
+ ctx->blind = b;
+ ctx->initial = gb;
+ secp256k1_scalar_clear(&b);
+ secp256k1_gej_clear(&gb);
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/ecmult_impl.h b/crypto/secp256k1/libsecp256k1/src/ecmult_impl.h
new file mode 100644
index 000000000..4e40104ad
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/ecmult_impl.h
@@ -0,0 +1,406 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_ECMULT_IMPL_H_
+#define _SECP256K1_ECMULT_IMPL_H_
+
+#include <string.h>
+
+#include "group.h"
+#include "scalar.h"
+#include "ecmult.h"
+
+#if defined(EXHAUSTIVE_TEST_ORDER)
+/* We need to lower these values for exhaustive tests because
+ * the tables cannot have infinities in them (this breaks the
+ * affine-isomorphism stuff which tracks z-ratios) */
+# if EXHAUSTIVE_TEST_ORDER > 128
+# define WINDOW_A 5
+# define WINDOW_G 8
+# elif EXHAUSTIVE_TEST_ORDER > 8
+# define WINDOW_A 4
+# define WINDOW_G 4
+# else
+# define WINDOW_A 2
+# define WINDOW_G 2
+# endif
+#else
+/* optimal for 128-bit and 256-bit exponents. */
+#define WINDOW_A 5
+/** larger numbers may result in slightly better performance, at the cost of
+ exponentially larger precomputed tables. */
+#ifdef USE_ENDOMORPHISM
+/** Two tables for window size 15: 1.375 MiB. */
+#define WINDOW_G 15
+#else
+/** One table for window size 16: 1.375 MiB. */
+#define WINDOW_G 16
+#endif
+#endif
+
+/** The number of entries a table with precomputed multiples needs to have. */
+#define ECMULT_TABLE_SIZE(w) (1 << ((w)-2))
+
+/** Fill a table 'prej' with precomputed odd multiples of a. Prej will contain
+ * the values [1*a,3*a,...,(2*n-1)*a], so it space for n values. zr[0] will
+ * contain prej[0].z / a.z. The other zr[i] values = prej[i].z / prej[i-1].z.
+ * Prej's Z values are undefined, except for the last value.
+ */
+static void secp256k1_ecmult_odd_multiples_table(int n, secp256k1_gej *prej, secp256k1_fe *zr, const secp256k1_gej *a) {
+ secp256k1_gej d;
+ secp256k1_ge a_ge, d_ge;
+ int i;
+
+ VERIFY_CHECK(!a->infinity);
+
+ secp256k1_gej_double_var(&d, a, NULL);
+
+ /*
+ * Perform the additions on an isomorphism where 'd' is affine: drop the z coordinate
+ * of 'd', and scale the 1P starting value's x/y coordinates without changing its z.
+ */
+ d_ge.x = d.x;
+ d_ge.y = d.y;
+ d_ge.infinity = 0;
+
+ secp256k1_ge_set_gej_zinv(&a_ge, a, &d.z);
+ prej[0].x = a_ge.x;
+ prej[0].y = a_ge.y;
+ prej[0].z = a->z;
+ prej[0].infinity = 0;
+
+ zr[0] = d.z;
+ for (i = 1; i < n; i++) {
+ secp256k1_gej_add_ge_var(&prej[i], &prej[i-1], &d_ge, &zr[i]);
+ }
+
+ /*
+ * Each point in 'prej' has a z coordinate too small by a factor of 'd.z'. Only
+ * the final point's z coordinate is actually used though, so just update that.
+ */
+ secp256k1_fe_mul(&prej[n-1].z, &prej[n-1].z, &d.z);
+}
+
+/** Fill a table 'pre' with precomputed odd multiples of a.
+ *
+ * There are two versions of this function:
+ * - secp256k1_ecmult_odd_multiples_table_globalz_windowa which brings its
+ * resulting point set to a single constant Z denominator, stores the X and Y
+ * coordinates as ge_storage points in pre, and stores the global Z in rz.
+ * It only operates on tables sized for WINDOW_A wnaf multiples.
+ * - secp256k1_ecmult_odd_multiples_table_storage_var, which converts its
+ * resulting point set to actually affine points, and stores those in pre.
+ * It operates on tables of any size, but uses heap-allocated temporaries.
+ *
+ * To compute a*P + b*G, we compute a table for P using the first function,
+ * and for G using the second (which requires an inverse, but it only needs to
+ * happen once).
+ */
+static void secp256k1_ecmult_odd_multiples_table_globalz_windowa(secp256k1_ge *pre, secp256k1_fe *globalz, const secp256k1_gej *a) {
+ secp256k1_gej prej[ECMULT_TABLE_SIZE(WINDOW_A)];
+ secp256k1_fe zr[ECMULT_TABLE_SIZE(WINDOW_A)];
+
+ /* Compute the odd multiples in Jacobian form. */
+ secp256k1_ecmult_odd_multiples_table(ECMULT_TABLE_SIZE(WINDOW_A), prej, zr, a);
+ /* Bring them to the same Z denominator. */
+ secp256k1_ge_globalz_set_table_gej(ECMULT_TABLE_SIZE(WINDOW_A), pre, globalz, prej, zr);
+}
+
+static void secp256k1_ecmult_odd_multiples_table_storage_var(int n, secp256k1_ge_storage *pre, const secp256k1_gej *a, const secp256k1_callback *cb) {
+ secp256k1_gej *prej = (secp256k1_gej*)checked_malloc(cb, sizeof(secp256k1_gej) * n);
+ secp256k1_ge *prea = (secp256k1_ge*)checked_malloc(cb, sizeof(secp256k1_ge) * n);
+ secp256k1_fe *zr = (secp256k1_fe*)checked_malloc(cb, sizeof(secp256k1_fe) * n);
+ int i;
+
+ /* Compute the odd multiples in Jacobian form. */
+ secp256k1_ecmult_odd_multiples_table(n, prej, zr, a);
+ /* Convert them in batch to affine coordinates. */
+ secp256k1_ge_set_table_gej_var(prea, prej, zr, n);
+ /* Convert them to compact storage form. */
+ for (i = 0; i < n; i++) {
+ secp256k1_ge_to_storage(&pre[i], &prea[i]);
+ }
+
+ free(prea);
+ free(prej);
+ free(zr);
+}
+
+/** The following two macro retrieves a particular odd multiple from a table
+ * of precomputed multiples. */
+#define ECMULT_TABLE_GET_GE(r,pre,n,w) do { \
+ VERIFY_CHECK(((n) & 1) == 1); \
+ VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
+ VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
+ if ((n) > 0) { \
+ *(r) = (pre)[((n)-1)/2]; \
+ } else { \
+ secp256k1_ge_neg((r), &(pre)[(-(n)-1)/2]); \
+ } \
+} while(0)
+
+#define ECMULT_TABLE_GET_GE_STORAGE(r,pre,n,w) do { \
+ VERIFY_CHECK(((n) & 1) == 1); \
+ VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
+ VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
+ if ((n) > 0) { \
+ secp256k1_ge_from_storage((r), &(pre)[((n)-1)/2]); \
+ } else { \
+ secp256k1_ge_from_storage((r), &(pre)[(-(n)-1)/2]); \
+ secp256k1_ge_neg((r), (r)); \
+ } \
+} while(0)
+
+static void secp256k1_ecmult_context_init(secp256k1_ecmult_context *ctx) {
+ ctx->pre_g = NULL;
+#ifdef USE_ENDOMORPHISM
+ ctx->pre_g_128 = NULL;
+#endif
+}
+
+static void secp256k1_ecmult_context_build(secp256k1_ecmult_context *ctx, const secp256k1_callback *cb) {
+ secp256k1_gej gj;
+
+ if (ctx->pre_g != NULL) {
+ return;
+ }
+
+ /* get the generator */
+ secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g);
+
+ ctx->pre_g = (secp256k1_ge_storage (*)[])checked_malloc(cb, sizeof((*ctx->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G));
+
+ /* precompute the tables with odd multiples */
+ secp256k1_ecmult_odd_multiples_table_storage_var(ECMULT_TABLE_SIZE(WINDOW_G), *ctx->pre_g, &gj, cb);
+
+#ifdef USE_ENDOMORPHISM
+ {
+ secp256k1_gej g_128j;
+ int i;
+
+ ctx->pre_g_128 = (secp256k1_ge_storage (*)[])checked_malloc(cb, sizeof((*ctx->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G));
+
+ /* calculate 2^128*generator */
+ g_128j = gj;
+ for (i = 0; i < 128; i++) {
+ secp256k1_gej_double_var(&g_128j, &g_128j, NULL);
+ }
+ secp256k1_ecmult_odd_multiples_table_storage_var(ECMULT_TABLE_SIZE(WINDOW_G), *ctx->pre_g_128, &g_128j, cb);
+ }
+#endif
+}
+
+static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context *dst,
+ const secp256k1_ecmult_context *src, const secp256k1_callback *cb) {
+ if (src->pre_g == NULL) {
+ dst->pre_g = NULL;
+ } else {
+ size_t size = sizeof((*dst->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G);
+ dst->pre_g = (secp256k1_ge_storage (*)[])checked_malloc(cb, size);
+ memcpy(dst->pre_g, src->pre_g, size);
+ }
+#ifdef USE_ENDOMORPHISM
+ if (src->pre_g_128 == NULL) {
+ dst->pre_g_128 = NULL;
+ } else {
+ size_t size = sizeof((*dst->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G);
+ dst->pre_g_128 = (secp256k1_ge_storage (*)[])checked_malloc(cb, size);
+ memcpy(dst->pre_g_128, src->pre_g_128, size);
+ }
+#endif
+}
+
+static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context *ctx) {
+ return ctx->pre_g != NULL;
+}
+
+static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context *ctx) {
+ free(ctx->pre_g);
+#ifdef USE_ENDOMORPHISM
+ free(ctx->pre_g_128);
+#endif
+ secp256k1_ecmult_context_init(ctx);
+}
+
+/** Convert a number to WNAF notation. The number becomes represented by sum(2^i * wnaf[i], i=0..bits),
+ * with the following guarantees:
+ * - each wnaf[i] is either 0, or an odd integer between -(1<<(w-1) - 1) and (1<<(w-1) - 1)
+ * - two non-zero entries in wnaf are separated by at least w-1 zeroes.
+ * - the number of set values in wnaf is returned. This number is at most 256, and at most one more
+ * than the number of bits in the (absolute value) of the input.
+ */
+static int secp256k1_ecmult_wnaf(int *wnaf, int len, const secp256k1_scalar *a, int w) {
+ secp256k1_scalar s = *a;
+ int last_set_bit = -1;
+ int bit = 0;
+ int sign = 1;
+ int carry = 0;
+
+ VERIFY_CHECK(wnaf != NULL);
+ VERIFY_CHECK(0 <= len && len <= 256);
+ VERIFY_CHECK(a != NULL);
+ VERIFY_CHECK(2 <= w && w <= 31);
+
+ memset(wnaf, 0, len * sizeof(wnaf[0]));
+
+ if (secp256k1_scalar_get_bits(&s, 255, 1)) {
+ secp256k1_scalar_negate(&s, &s);
+ sign = -1;
+ }
+
+ while (bit < len) {
+ int now;
+ int word;
+ if (secp256k1_scalar_get_bits(&s, bit, 1) == (unsigned int)carry) {
+ bit++;
+ continue;
+ }
+
+ now = w;
+ if (now > len - bit) {
+ now = len - bit;
+ }
+
+ word = secp256k1_scalar_get_bits_var(&s, bit, now) + carry;
+
+ carry = (word >> (w-1)) & 1;
+ word -= carry << w;
+
+ wnaf[bit] = sign * word;
+ last_set_bit = bit;
+
+ bit += now;
+ }
+#ifdef VERIFY
+ CHECK(carry == 0);
+ while (bit < 256) {
+ CHECK(secp256k1_scalar_get_bits(&s, bit++, 1) == 0);
+ }
+#endif
+ return last_set_bit + 1;
+}
+
+static void secp256k1_ecmult(const secp256k1_ecmult_context *ctx, secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng) {
+ secp256k1_ge pre_a[ECMULT_TABLE_SIZE(WINDOW_A)];
+ secp256k1_ge tmpa;
+ secp256k1_fe Z;
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge pre_a_lam[ECMULT_TABLE_SIZE(WINDOW_A)];
+ secp256k1_scalar na_1, na_lam;
+ /* Splitted G factors. */
+ secp256k1_scalar ng_1, ng_128;
+ int wnaf_na_1[130];
+ int wnaf_na_lam[130];
+ int bits_na_1;
+ int bits_na_lam;
+ int wnaf_ng_1[129];
+ int bits_ng_1;
+ int wnaf_ng_128[129];
+ int bits_ng_128;
+#else
+ int wnaf_na[256];
+ int bits_na;
+ int wnaf_ng[256];
+ int bits_ng;
+#endif
+ int i;
+ int bits;
+
+#ifdef USE_ENDOMORPHISM
+ /* split na into na_1 and na_lam (where na = na_1 + na_lam*lambda, and na_1 and na_lam are ~128 bit) */
+ secp256k1_scalar_split_lambda(&na_1, &na_lam, na);
+
+ /* build wnaf representation for na_1 and na_lam. */
+ bits_na_1 = secp256k1_ecmult_wnaf(wnaf_na_1, 130, &na_1, WINDOW_A);
+ bits_na_lam = secp256k1_ecmult_wnaf(wnaf_na_lam, 130, &na_lam, WINDOW_A);
+ VERIFY_CHECK(bits_na_1 <= 130);
+ VERIFY_CHECK(bits_na_lam <= 130);
+ bits = bits_na_1;
+ if (bits_na_lam > bits) {
+ bits = bits_na_lam;
+ }
+#else
+ /* build wnaf representation for na. */
+ bits_na = secp256k1_ecmult_wnaf(wnaf_na, 256, na, WINDOW_A);
+ bits = bits_na;
+#endif
+
+ /* Calculate odd multiples of a.
+ * All multiples are brought to the same Z 'denominator', which is stored
+ * in Z. Due to secp256k1' isomorphism we can do all operations pretending
+ * that the Z coordinate was 1, use affine addition formulae, and correct
+ * the Z coordinate of the result once at the end.
+ * The exception is the precomputed G table points, which are actually
+ * affine. Compared to the base used for other points, they have a Z ratio
+ * of 1/Z, so we can use secp256k1_gej_add_zinv_var, which uses the same
+ * isomorphism to efficiently add with a known Z inverse.
+ */
+ secp256k1_ecmult_odd_multiples_table_globalz_windowa(pre_a, &Z, a);
+
+#ifdef USE_ENDOMORPHISM
+ for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {
+ secp256k1_ge_mul_lambda(&pre_a_lam[i], &pre_a[i]);
+ }
+
+ /* split ng into ng_1 and ng_128 (where gn = gn_1 + gn_128*2^128, and gn_1 and gn_128 are ~128 bit) */
+ secp256k1_scalar_split_128(&ng_1, &ng_128, ng);
+
+ /* Build wnaf representation for ng_1 and ng_128 */
+ bits_ng_1 = secp256k1_ecmult_wnaf(wnaf_ng_1, 129, &ng_1, WINDOW_G);
+ bits_ng_128 = secp256k1_ecmult_wnaf(wnaf_ng_128, 129, &ng_128, WINDOW_G);
+ if (bits_ng_1 > bits) {
+ bits = bits_ng_1;
+ }
+ if (bits_ng_128 > bits) {
+ bits = bits_ng_128;
+ }
+#else
+ bits_ng = secp256k1_ecmult_wnaf(wnaf_ng, 256, ng, WINDOW_G);
+ if (bits_ng > bits) {
+ bits = bits_ng;
+ }
+#endif
+
+ secp256k1_gej_set_infinity(r);
+
+ for (i = bits - 1; i >= 0; i--) {
+ int n;
+ secp256k1_gej_double_var(r, r, NULL);
+#ifdef USE_ENDOMORPHISM
+ if (i < bits_na_1 && (n = wnaf_na_1[i])) {
+ ECMULT_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A);
+ secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);
+ }
+ if (i < bits_na_lam && (n = wnaf_na_lam[i])) {
+ ECMULT_TABLE_GET_GE(&tmpa, pre_a_lam, n, WINDOW_A);
+ secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);
+ }
+ if (i < bits_ng_1 && (n = wnaf_ng_1[i])) {
+ ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G);
+ secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);
+ }
+ if (i < bits_ng_128 && (n = wnaf_ng_128[i])) {
+ ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g_128, n, WINDOW_G);
+ secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);
+ }
+#else
+ if (i < bits_na && (n = wnaf_na[i])) {
+ ECMULT_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A);
+ secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);
+ }
+ if (i < bits_ng && (n = wnaf_ng[i])) {
+ ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G);
+ secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);
+ }
+#endif
+ }
+
+ if (!r->infinity) {
+ secp256k1_fe_mul(&r->z, &r->z, &Z);
+ }
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field.h b/crypto/secp256k1/libsecp256k1/src/field.h
new file mode 100644
index 000000000..bbb1ee866
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field.h
@@ -0,0 +1,132 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_
+#define _SECP256K1_FIELD_
+
+/** Field element module.
+ *
+ * Field elements can be represented in several ways, but code accessing
+ * it (and implementations) need to take certain properties into account:
+ * - Each field element can be normalized or not.
+ * - Each field element has a magnitude, which represents how far away
+ * its representation is away from normalization. Normalized elements
+ * always have a magnitude of 1, but a magnitude of 1 doesn't imply
+ * normality.
+ */
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#if defined(USE_FIELD_10X26)
+#include "field_10x26.h"
+#elif defined(USE_FIELD_5X52)
+#include "field_5x52.h"
+#else
+#error "Please select field implementation"
+#endif
+
+#include "util.h"
+
+/** Normalize a field element. */
+static void secp256k1_fe_normalize(secp256k1_fe *r);
+
+/** Weakly normalize a field element: reduce it magnitude to 1, but don't fully normalize. */
+static void secp256k1_fe_normalize_weak(secp256k1_fe *r);
+
+/** Normalize a field element, without constant-time guarantee. */
+static void secp256k1_fe_normalize_var(secp256k1_fe *r);
+
+/** Verify whether a field element represents zero i.e. would normalize to a zero value. The field
+ * implementation may optionally normalize the input, but this should not be relied upon. */
+static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r);
+
+/** Verify whether a field element represents zero i.e. would normalize to a zero value. The field
+ * implementation may optionally normalize the input, but this should not be relied upon. */
+static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r);
+
+/** Set a field element equal to a small integer. Resulting field element is normalized. */
+static void secp256k1_fe_set_int(secp256k1_fe *r, int a);
+
+/** Sets a field element equal to zero, initializing all fields. */
+static void secp256k1_fe_clear(secp256k1_fe *a);
+
+/** Verify whether a field element is zero. Requires the input to be normalized. */
+static int secp256k1_fe_is_zero(const secp256k1_fe *a);
+
+/** Check the "oddness" of a field element. Requires the input to be normalized. */
+static int secp256k1_fe_is_odd(const secp256k1_fe *a);
+
+/** Compare two field elements. Requires magnitude-1 inputs. */
+static int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b);
+
+/** Same as secp256k1_fe_equal, but may be variable time. */
+static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b);
+
+/** Compare two field elements. Requires both inputs to be normalized */
+static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b);
+
+/** Set a field element equal to 32-byte big endian value. If successful, the resulting field element is normalized. */
+static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a);
+
+/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */
+static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a);
+
+/** Set a field element equal to the additive inverse of another. Takes a maximum magnitude of the input
+ * as an argument. The magnitude of the output is one higher. */
+static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m);
+
+/** Multiplies the passed field element with a small integer constant. Multiplies the magnitude by that
+ * small integer. */
+static void secp256k1_fe_mul_int(secp256k1_fe *r, int a);
+
+/** Adds a field element to another. The result has the sum of the inputs' magnitudes as magnitude. */
+static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a);
+
+/** Sets a field element to be the product of two others. Requires the inputs' magnitudes to be at most 8.
+ * The output magnitude is 1 (but not guaranteed to be normalized). */
+static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b);
+
+/** Sets a field element to be the square of another. Requires the input's magnitude to be at most 8.
+ * The output magnitude is 1 (but not guaranteed to be normalized). */
+static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a);
+
+/** If a has a square root, it is computed in r and 1 is returned. If a does not
+ * have a square root, the root of its negation is computed and 0 is returned.
+ * The input's magnitude can be at most 8. The output magnitude is 1 (but not
+ * guaranteed to be normalized). The result in r will always be a square
+ * itself. */
+static int secp256k1_fe_sqrt(secp256k1_fe *r, const secp256k1_fe *a);
+
+/** Checks whether a field element is a quadratic residue. */
+static int secp256k1_fe_is_quad_var(const secp256k1_fe *a);
+
+/** Sets a field element to be the (modular) inverse of another. Requires the input's magnitude to be
+ * at most 8. The output magnitude is 1 (but not guaranteed to be normalized). */
+static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a);
+
+/** Potentially faster version of secp256k1_fe_inv, without constant-time guarantee. */
+static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a);
+
+/** Calculate the (modular) inverses of a batch of field elements. Requires the inputs' magnitudes to be
+ * at most 8. The output magnitudes are 1 (but not guaranteed to be normalized). The inputs and
+ * outputs must not overlap in memory. */
+static void secp256k1_fe_inv_all_var(secp256k1_fe *r, const secp256k1_fe *a, size_t len);
+
+/** Convert a field element to the storage type. */
+static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a);
+
+/** Convert a field element back from the storage type. */
+static void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a);
+
+/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
+static void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag);
+
+/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
+static void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field_10x26.h b/crypto/secp256k1/libsecp256k1/src/field_10x26.h
new file mode 100644
index 000000000..61ee1e096
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_10x26.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_REPR_
+#define _SECP256K1_FIELD_REPR_
+
+#include <stdint.h>
+
+typedef struct {
+ /* X = sum(i=0..9, elem[i]*2^26) mod n */
+ uint32_t n[10];
+#ifdef VERIFY
+ int magnitude;
+ int normalized;
+#endif
+} secp256k1_fe;
+
+/* Unpacks a constant into a overlapping multi-limbed FE element. */
+#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \
+ (d0) & 0x3FFFFFFUL, \
+ (((uint32_t)d0) >> 26) | (((uint32_t)(d1) & 0xFFFFFUL) << 6), \
+ (((uint32_t)d1) >> 20) | (((uint32_t)(d2) & 0x3FFFUL) << 12), \
+ (((uint32_t)d2) >> 14) | (((uint32_t)(d3) & 0xFFUL) << 18), \
+ (((uint32_t)d3) >> 8) | (((uint32_t)(d4) & 0x3UL) << 24), \
+ (((uint32_t)d4) >> 2) & 0x3FFFFFFUL, \
+ (((uint32_t)d4) >> 28) | (((uint32_t)(d5) & 0x3FFFFFUL) << 4), \
+ (((uint32_t)d5) >> 22) | (((uint32_t)(d6) & 0xFFFFUL) << 10), \
+ (((uint32_t)d6) >> 16) | (((uint32_t)(d7) & 0x3FFUL) << 16), \
+ (((uint32_t)d7) >> 10) \
+}
+
+#ifdef VERIFY
+#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1}
+#else
+#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))}
+#endif
+
+typedef struct {
+ uint32_t n[8];
+} secp256k1_fe_storage;
+
+#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }}
+#define SECP256K1_FE_STORAGE_CONST_GET(d) d.n[7], d.n[6], d.n[5], d.n[4],d.n[3], d.n[2], d.n[1], d.n[0]
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field_10x26_impl.h b/crypto/secp256k1/libsecp256k1/src/field_10x26_impl.h
new file mode 100644
index 000000000..5fb092f1b
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_10x26_impl.h
@@ -0,0 +1,1140 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_REPR_IMPL_H_
+#define _SECP256K1_FIELD_REPR_IMPL_H_
+
+#include "util.h"
+#include "num.h"
+#include "field.h"
+
+#ifdef VERIFY
+static void secp256k1_fe_verify(const secp256k1_fe *a) {
+ const uint32_t *d = a->n;
+ int m = a->normalized ? 1 : 2 * a->magnitude, r = 1;
+ r &= (d[0] <= 0x3FFFFFFUL * m);
+ r &= (d[1] <= 0x3FFFFFFUL * m);
+ r &= (d[2] <= 0x3FFFFFFUL * m);
+ r &= (d[3] <= 0x3FFFFFFUL * m);
+ r &= (d[4] <= 0x3FFFFFFUL * m);
+ r &= (d[5] <= 0x3FFFFFFUL * m);
+ r &= (d[6] <= 0x3FFFFFFUL * m);
+ r &= (d[7] <= 0x3FFFFFFUL * m);
+ r &= (d[8] <= 0x3FFFFFFUL * m);
+ r &= (d[9] <= 0x03FFFFFUL * m);
+ r &= (a->magnitude >= 0);
+ r &= (a->magnitude <= 32);
+ if (a->normalized) {
+ r &= (a->magnitude <= 1);
+ if (r && (d[9] == 0x03FFFFFUL)) {
+ uint32_t mid = d[8] & d[7] & d[6] & d[5] & d[4] & d[3] & d[2];
+ if (mid == 0x3FFFFFFUL) {
+ r &= ((d[1] + 0x40UL + ((d[0] + 0x3D1UL) >> 26)) <= 0x3FFFFFFUL);
+ }
+ }
+ }
+ VERIFY_CHECK(r == 1);
+}
+#endif
+
+static void secp256k1_fe_normalize(secp256k1_fe *r) {
+ uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
+ t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
+
+ /* Reduce t9 at the start so there will be at most a single carry from the first pass */
+ uint32_t m;
+ uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x3D1UL; t1 += (x << 6);
+ t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
+ t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
+ t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; m = t2;
+ t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; m &= t3;
+ t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; m &= t4;
+ t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; m &= t5;
+ t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; m &= t6;
+ t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; m &= t7;
+ t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; m &= t8;
+
+ /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t9 >> 23 == 0);
+
+ /* At most a single final reduction is needed; check if the value is >= the field characteristic */
+ x = (t9 >> 22) | ((t9 == 0x03FFFFFUL) & (m == 0x3FFFFFFUL)
+ & ((t1 + 0x40UL + ((t0 + 0x3D1UL) >> 26)) > 0x3FFFFFFUL));
+
+ /* Apply the final reduction (for constant-time behaviour, we do it always) */
+ t0 += x * 0x3D1UL; t1 += (x << 6);
+ t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
+ t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
+ t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL;
+ t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL;
+ t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL;
+ t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL;
+ t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL;
+ t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL;
+ t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL;
+
+ /* If t9 didn't carry to bit 22 already, then it should have after any final reduction */
+ VERIFY_CHECK(t9 >> 22 == x);
+
+ /* Mask off the possible multiple of 2^256 from the final reduction */
+ t9 &= 0x03FFFFFUL;
+
+ r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
+ r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9;
+
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static void secp256k1_fe_normalize_weak(secp256k1_fe *r) {
+ uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
+ t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
+
+ /* Reduce t9 at the start so there will be at most a single carry from the first pass */
+ uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x3D1UL; t1 += (x << 6);
+ t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
+ t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
+ t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL;
+ t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL;
+ t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL;
+ t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL;
+ t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL;
+ t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL;
+ t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL;
+
+ /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t9 >> 23 == 0);
+
+ r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
+ r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9;
+
+#ifdef VERIFY
+ r->magnitude = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static void secp256k1_fe_normalize_var(secp256k1_fe *r) {
+ uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
+ t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
+
+ /* Reduce t9 at the start so there will be at most a single carry from the first pass */
+ uint32_t m;
+ uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x3D1UL; t1 += (x << 6);
+ t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
+ t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
+ t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; m = t2;
+ t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; m &= t3;
+ t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; m &= t4;
+ t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; m &= t5;
+ t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; m &= t6;
+ t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; m &= t7;
+ t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; m &= t8;
+
+ /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t9 >> 23 == 0);
+
+ /* At most a single final reduction is needed; check if the value is >= the field characteristic */
+ x = (t9 >> 22) | ((t9 == 0x03FFFFFUL) & (m == 0x3FFFFFFUL)
+ & ((t1 + 0x40UL + ((t0 + 0x3D1UL) >> 26)) > 0x3FFFFFFUL));
+
+ if (x) {
+ t0 += 0x3D1UL; t1 += (x << 6);
+ t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
+ t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
+ t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL;
+ t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL;
+ t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL;
+ t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL;
+ t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL;
+ t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL;
+ t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL;
+
+ /* If t9 didn't carry to bit 22 already, then it should have after any final reduction */
+ VERIFY_CHECK(t9 >> 22 == x);
+
+ /* Mask off the possible multiple of 2^256 from the final reduction */
+ t9 &= 0x03FFFFFUL;
+ }
+
+ r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
+ r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9;
+
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r) {
+ uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
+ t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
+
+ /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
+ uint32_t z0, z1;
+
+ /* Reduce t9 at the start so there will be at most a single carry from the first pass */
+ uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x3D1UL; t1 += (x << 6);
+ t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; z0 = t0; z1 = t0 ^ 0x3D0UL;
+ t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; z0 |= t1; z1 &= t1 ^ 0x40UL;
+ t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; z0 |= t2; z1 &= t2;
+ t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; z0 |= t3; z1 &= t3;
+ t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; z0 |= t4; z1 &= t4;
+ t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; z0 |= t5; z1 &= t5;
+ t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; z0 |= t6; z1 &= t6;
+ t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; z0 |= t7; z1 &= t7;
+ t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; z0 |= t8; z1 &= t8;
+ z0 |= t9; z1 &= t9 ^ 0x3C00000UL;
+
+ /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t9 >> 23 == 0);
+
+ return (z0 == 0) | (z1 == 0x3FFFFFFUL);
+}
+
+static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r) {
+ uint32_t t0, t1, t2, t3, t4, t5, t6, t7, t8, t9;
+ uint32_t z0, z1;
+ uint32_t x;
+
+ t0 = r->n[0];
+ t9 = r->n[9];
+
+ /* Reduce t9 at the start so there will be at most a single carry from the first pass */
+ x = t9 >> 22;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x3D1UL;
+
+ /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
+ z0 = t0 & 0x3FFFFFFUL;
+ z1 = z0 ^ 0x3D0UL;
+
+ /* Fast return path should catch the majority of cases */
+ if ((z0 != 0UL) & (z1 != 0x3FFFFFFUL)) {
+ return 0;
+ }
+
+ t1 = r->n[1];
+ t2 = r->n[2];
+ t3 = r->n[3];
+ t4 = r->n[4];
+ t5 = r->n[5];
+ t6 = r->n[6];
+ t7 = r->n[7];
+ t8 = r->n[8];
+
+ t9 &= 0x03FFFFFUL;
+ t1 += (x << 6);
+
+ t1 += (t0 >> 26);
+ t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; z0 |= t1; z1 &= t1 ^ 0x40UL;
+ t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; z0 |= t2; z1 &= t2;
+ t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; z0 |= t3; z1 &= t3;
+ t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; z0 |= t4; z1 &= t4;
+ t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; z0 |= t5; z1 &= t5;
+ t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; z0 |= t6; z1 &= t6;
+ t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; z0 |= t7; z1 &= t7;
+ t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; z0 |= t8; z1 &= t8;
+ z0 |= t9; z1 &= t9 ^ 0x3C00000UL;
+
+ /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t9 >> 23 == 0);
+
+ return (z0 == 0) | (z1 == 0x3FFFFFFUL);
+}
+
+SECP256K1_INLINE static void secp256k1_fe_set_int(secp256k1_fe *r, int a) {
+ r->n[0] = a;
+ r->n[1] = r->n[2] = r->n[3] = r->n[4] = r->n[5] = r->n[6] = r->n[7] = r->n[8] = r->n[9] = 0;
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+SECP256K1_INLINE static int secp256k1_fe_is_zero(const secp256k1_fe *a) {
+ const uint32_t *t = a->n;
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ secp256k1_fe_verify(a);
+#endif
+ return (t[0] | t[1] | t[2] | t[3] | t[4] | t[5] | t[6] | t[7] | t[8] | t[9]) == 0;
+}
+
+SECP256K1_INLINE static int secp256k1_fe_is_odd(const secp256k1_fe *a) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ secp256k1_fe_verify(a);
+#endif
+ return a->n[0] & 1;
+}
+
+SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) {
+ int i;
+#ifdef VERIFY
+ a->magnitude = 0;
+ a->normalized = 1;
+#endif
+ for (i=0; i<10; i++) {
+ a->n[i] = 0;
+ }
+}
+
+static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b) {
+ int i;
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ VERIFY_CHECK(b->normalized);
+ secp256k1_fe_verify(a);
+ secp256k1_fe_verify(b);
+#endif
+ for (i = 9; i >= 0; i--) {
+ if (a->n[i] > b->n[i]) {
+ return 1;
+ }
+ if (a->n[i] < b->n[i]) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a) {
+ int i;
+ r->n[0] = r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0;
+ r->n[5] = r->n[6] = r->n[7] = r->n[8] = r->n[9] = 0;
+ for (i=0; i<32; i++) {
+ int j;
+ for (j=0; j<4; j++) {
+ int limb = (8*i+2*j)/26;
+ int shift = (8*i+2*j)%26;
+ r->n[limb] |= (uint32_t)((a[31-i] >> (2*j)) & 0x3) << shift;
+ }
+ }
+ if (r->n[9] == 0x3FFFFFUL && (r->n[8] & r->n[7] & r->n[6] & r->n[5] & r->n[4] & r->n[3] & r->n[2]) == 0x3FFFFFFUL && (r->n[1] + 0x40UL + ((r->n[0] + 0x3D1UL) >> 26)) > 0x3FFFFFFUL) {
+ return 0;
+ }
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+ return 1;
+}
+
+/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */
+static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a) {
+ int i;
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ secp256k1_fe_verify(a);
+#endif
+ for (i=0; i<32; i++) {
+ int j;
+ int c = 0;
+ for (j=0; j<4; j++) {
+ int limb = (8*i+2*j)/26;
+ int shift = (8*i+2*j)%26;
+ c |= ((a->n[limb] >> shift) & 0x3) << (2 * j);
+ }
+ r[31-i] = c;
+ }
+}
+
+SECP256K1_INLINE static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->magnitude <= m);
+ secp256k1_fe_verify(a);
+#endif
+ r->n[0] = 0x3FFFC2FUL * 2 * (m + 1) - a->n[0];
+ r->n[1] = 0x3FFFFBFUL * 2 * (m + 1) - a->n[1];
+ r->n[2] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[2];
+ r->n[3] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[3];
+ r->n[4] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[4];
+ r->n[5] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[5];
+ r->n[6] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[6];
+ r->n[7] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[7];
+ r->n[8] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[8];
+ r->n[9] = 0x03FFFFFUL * 2 * (m + 1) - a->n[9];
+#ifdef VERIFY
+ r->magnitude = m + 1;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+SECP256K1_INLINE static void secp256k1_fe_mul_int(secp256k1_fe *r, int a) {
+ r->n[0] *= a;
+ r->n[1] *= a;
+ r->n[2] *= a;
+ r->n[3] *= a;
+ r->n[4] *= a;
+ r->n[5] *= a;
+ r->n[6] *= a;
+ r->n[7] *= a;
+ r->n[8] *= a;
+ r->n[9] *= a;
+#ifdef VERIFY
+ r->magnitude *= a;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+SECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a) {
+#ifdef VERIFY
+ secp256k1_fe_verify(a);
+#endif
+ r->n[0] += a->n[0];
+ r->n[1] += a->n[1];
+ r->n[2] += a->n[2];
+ r->n[3] += a->n[3];
+ r->n[4] += a->n[4];
+ r->n[5] += a->n[5];
+ r->n[6] += a->n[6];
+ r->n[7] += a->n[7];
+ r->n[8] += a->n[8];
+ r->n[9] += a->n[9];
+#ifdef VERIFY
+ r->magnitude += a->magnitude;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+#if defined(USE_EXTERNAL_ASM)
+
+/* External assembler implementation */
+void secp256k1_fe_mul_inner(uint32_t *r, const uint32_t *a, const uint32_t * SECP256K1_RESTRICT b);
+void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t *a);
+
+#else
+
+#ifdef VERIFY
+#define VERIFY_BITS(x, n) VERIFY_CHECK(((x) >> (n)) == 0)
+#else
+#define VERIFY_BITS(x, n) do { } while(0)
+#endif
+
+SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint32_t *r, const uint32_t *a, const uint32_t * SECP256K1_RESTRICT b) {
+ uint64_t c, d;
+ uint64_t u0, u1, u2, u3, u4, u5, u6, u7, u8;
+ uint32_t t9, t1, t0, t2, t3, t4, t5, t6, t7;
+ const uint32_t M = 0x3FFFFFFUL, R0 = 0x3D10UL, R1 = 0x400UL;
+
+ VERIFY_BITS(a[0], 30);
+ VERIFY_BITS(a[1], 30);
+ VERIFY_BITS(a[2], 30);
+ VERIFY_BITS(a[3], 30);
+ VERIFY_BITS(a[4], 30);
+ VERIFY_BITS(a[5], 30);
+ VERIFY_BITS(a[6], 30);
+ VERIFY_BITS(a[7], 30);
+ VERIFY_BITS(a[8], 30);
+ VERIFY_BITS(a[9], 26);
+ VERIFY_BITS(b[0], 30);
+ VERIFY_BITS(b[1], 30);
+ VERIFY_BITS(b[2], 30);
+ VERIFY_BITS(b[3], 30);
+ VERIFY_BITS(b[4], 30);
+ VERIFY_BITS(b[5], 30);
+ VERIFY_BITS(b[6], 30);
+ VERIFY_BITS(b[7], 30);
+ VERIFY_BITS(b[8], 30);
+ VERIFY_BITS(b[9], 26);
+
+ /** [... a b c] is a shorthand for ... + a<<52 + b<<26 + c<<0 mod n.
+ * px is a shorthand for sum(a[i]*b[x-i], i=0..x).
+ * Note that [x 0 0 0 0 0 0 0 0 0 0] = [x*R1 x*R0].
+ */
+
+ d = (uint64_t)a[0] * b[9]
+ + (uint64_t)a[1] * b[8]
+ + (uint64_t)a[2] * b[7]
+ + (uint64_t)a[3] * b[6]
+ + (uint64_t)a[4] * b[5]
+ + (uint64_t)a[5] * b[4]
+ + (uint64_t)a[6] * b[3]
+ + (uint64_t)a[7] * b[2]
+ + (uint64_t)a[8] * b[1]
+ + (uint64_t)a[9] * b[0];
+ /* VERIFY_BITS(d, 64); */
+ /* [d 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
+ t9 = d & M; d >>= 26;
+ VERIFY_BITS(t9, 26);
+ VERIFY_BITS(d, 38);
+ /* [d t9 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
+
+ c = (uint64_t)a[0] * b[0];
+ VERIFY_BITS(c, 60);
+ /* [d t9 0 0 0 0 0 0 0 0 c] = [p9 0 0 0 0 0 0 0 0 p0] */
+ d += (uint64_t)a[1] * b[9]
+ + (uint64_t)a[2] * b[8]
+ + (uint64_t)a[3] * b[7]
+ + (uint64_t)a[4] * b[6]
+ + (uint64_t)a[5] * b[5]
+ + (uint64_t)a[6] * b[4]
+ + (uint64_t)a[7] * b[3]
+ + (uint64_t)a[8] * b[2]
+ + (uint64_t)a[9] * b[1];
+ VERIFY_BITS(d, 63);
+ /* [d t9 0 0 0 0 0 0 0 0 c] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+ u0 = d & M; d >>= 26; c += u0 * R0;
+ VERIFY_BITS(u0, 26);
+ VERIFY_BITS(d, 37);
+ VERIFY_BITS(c, 61);
+ /* [d u0 t9 0 0 0 0 0 0 0 0 c-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+ t0 = c & M; c >>= 26; c += u0 * R1;
+ VERIFY_BITS(t0, 26);
+ VERIFY_BITS(c, 37);
+ /* [d u0 t9 0 0 0 0 0 0 0 c-u0*R1 t0-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+ /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+
+ c += (uint64_t)a[0] * b[1]
+ + (uint64_t)a[1] * b[0];
+ VERIFY_BITS(c, 62);
+ /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ d += (uint64_t)a[2] * b[9]
+ + (uint64_t)a[3] * b[8]
+ + (uint64_t)a[4] * b[7]
+ + (uint64_t)a[5] * b[6]
+ + (uint64_t)a[6] * b[5]
+ + (uint64_t)a[7] * b[4]
+ + (uint64_t)a[8] * b[3]
+ + (uint64_t)a[9] * b[2];
+ VERIFY_BITS(d, 63);
+ /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ u1 = d & M; d >>= 26; c += u1 * R0;
+ VERIFY_BITS(u1, 26);
+ VERIFY_BITS(d, 37);
+ VERIFY_BITS(c, 63);
+ /* [d u1 0 t9 0 0 0 0 0 0 0 c-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ t1 = c & M; c >>= 26; c += u1 * R1;
+ VERIFY_BITS(t1, 26);
+ VERIFY_BITS(c, 38);
+ /* [d u1 0 t9 0 0 0 0 0 0 c-u1*R1 t1-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+
+ c += (uint64_t)a[0] * b[2]
+ + (uint64_t)a[1] * b[1]
+ + (uint64_t)a[2] * b[0];
+ VERIFY_BITS(c, 62);
+ /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ d += (uint64_t)a[3] * b[9]
+ + (uint64_t)a[4] * b[8]
+ + (uint64_t)a[5] * b[7]
+ + (uint64_t)a[6] * b[6]
+ + (uint64_t)a[7] * b[5]
+ + (uint64_t)a[8] * b[4]
+ + (uint64_t)a[9] * b[3];
+ VERIFY_BITS(d, 63);
+ /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ u2 = d & M; d >>= 26; c += u2 * R0;
+ VERIFY_BITS(u2, 26);
+ VERIFY_BITS(d, 37);
+ VERIFY_BITS(c, 63);
+ /* [d u2 0 0 t9 0 0 0 0 0 0 c-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ t2 = c & M; c >>= 26; c += u2 * R1;
+ VERIFY_BITS(t2, 26);
+ VERIFY_BITS(c, 38);
+ /* [d u2 0 0 t9 0 0 0 0 0 c-u2*R1 t2-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+
+ c += (uint64_t)a[0] * b[3]
+ + (uint64_t)a[1] * b[2]
+ + (uint64_t)a[2] * b[1]
+ + (uint64_t)a[3] * b[0];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ d += (uint64_t)a[4] * b[9]
+ + (uint64_t)a[5] * b[8]
+ + (uint64_t)a[6] * b[7]
+ + (uint64_t)a[7] * b[6]
+ + (uint64_t)a[8] * b[5]
+ + (uint64_t)a[9] * b[4];
+ VERIFY_BITS(d, 63);
+ /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ u3 = d & M; d >>= 26; c += u3 * R0;
+ VERIFY_BITS(u3, 26);
+ VERIFY_BITS(d, 37);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u3 0 0 0 t9 0 0 0 0 0 c-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ t3 = c & M; c >>= 26; c += u3 * R1;
+ VERIFY_BITS(t3, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u3 0 0 0 t9 0 0 0 0 c-u3*R1 t3-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+
+ c += (uint64_t)a[0] * b[4]
+ + (uint64_t)a[1] * b[3]
+ + (uint64_t)a[2] * b[2]
+ + (uint64_t)a[3] * b[1]
+ + (uint64_t)a[4] * b[0];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ d += (uint64_t)a[5] * b[9]
+ + (uint64_t)a[6] * b[8]
+ + (uint64_t)a[7] * b[7]
+ + (uint64_t)a[8] * b[6]
+ + (uint64_t)a[9] * b[5];
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ u4 = d & M; d >>= 26; c += u4 * R0;
+ VERIFY_BITS(u4, 26);
+ VERIFY_BITS(d, 36);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u4 0 0 0 0 t9 0 0 0 0 c-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ t4 = c & M; c >>= 26; c += u4 * R1;
+ VERIFY_BITS(t4, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u4 0 0 0 0 t9 0 0 0 c-u4*R1 t4-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)a[0] * b[5]
+ + (uint64_t)a[1] * b[4]
+ + (uint64_t)a[2] * b[3]
+ + (uint64_t)a[3] * b[2]
+ + (uint64_t)a[4] * b[1]
+ + (uint64_t)a[5] * b[0];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)a[6] * b[9]
+ + (uint64_t)a[7] * b[8]
+ + (uint64_t)a[8] * b[7]
+ + (uint64_t)a[9] * b[6];
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ u5 = d & M; d >>= 26; c += u5 * R0;
+ VERIFY_BITS(u5, 26);
+ VERIFY_BITS(d, 36);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u5 0 0 0 0 0 t9 0 0 0 c-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ t5 = c & M; c >>= 26; c += u5 * R1;
+ VERIFY_BITS(t5, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u5 0 0 0 0 0 t9 0 0 c-u5*R1 t5-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)a[0] * b[6]
+ + (uint64_t)a[1] * b[5]
+ + (uint64_t)a[2] * b[4]
+ + (uint64_t)a[3] * b[3]
+ + (uint64_t)a[4] * b[2]
+ + (uint64_t)a[5] * b[1]
+ + (uint64_t)a[6] * b[0];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)a[7] * b[9]
+ + (uint64_t)a[8] * b[8]
+ + (uint64_t)a[9] * b[7];
+ VERIFY_BITS(d, 61);
+ /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ u6 = d & M; d >>= 26; c += u6 * R0;
+ VERIFY_BITS(u6, 26);
+ VERIFY_BITS(d, 35);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u6 0 0 0 0 0 0 t9 0 0 c-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ t6 = c & M; c >>= 26; c += u6 * R1;
+ VERIFY_BITS(t6, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u6 0 0 0 0 0 0 t9 0 c-u6*R1 t6-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)a[0] * b[7]
+ + (uint64_t)a[1] * b[6]
+ + (uint64_t)a[2] * b[5]
+ + (uint64_t)a[3] * b[4]
+ + (uint64_t)a[4] * b[3]
+ + (uint64_t)a[5] * b[2]
+ + (uint64_t)a[6] * b[1]
+ + (uint64_t)a[7] * b[0];
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x8000007C00000007ULL);
+ /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)a[8] * b[9]
+ + (uint64_t)a[9] * b[8];
+ VERIFY_BITS(d, 58);
+ /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ u7 = d & M; d >>= 26; c += u7 * R0;
+ VERIFY_BITS(u7, 26);
+ VERIFY_BITS(d, 32);
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x800001703FFFC2F7ULL);
+ /* [d u7 0 0 0 0 0 0 0 t9 0 c-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ t7 = c & M; c >>= 26; c += u7 * R1;
+ VERIFY_BITS(t7, 26);
+ VERIFY_BITS(c, 38);
+ /* [d u7 0 0 0 0 0 0 0 t9 c-u7*R1 t7-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)a[0] * b[8]
+ + (uint64_t)a[1] * b[7]
+ + (uint64_t)a[2] * b[6]
+ + (uint64_t)a[3] * b[5]
+ + (uint64_t)a[4] * b[4]
+ + (uint64_t)a[5] * b[3]
+ + (uint64_t)a[6] * b[2]
+ + (uint64_t)a[7] * b[1]
+ + (uint64_t)a[8] * b[0];
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x9000007B80000008ULL);
+ /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)a[9] * b[9];
+ VERIFY_BITS(d, 57);
+ /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ u8 = d & M; d >>= 26; c += u8 * R0;
+ VERIFY_BITS(u8, 26);
+ VERIFY_BITS(d, 31);
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x9000016FBFFFC2F8ULL);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ r[3] = t3;
+ VERIFY_BITS(r[3], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[4] = t4;
+ VERIFY_BITS(r[4], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[5] = t5;
+ VERIFY_BITS(r[5], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[6] = t6;
+ VERIFY_BITS(r[6], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[7] = t7;
+ VERIFY_BITS(r[7], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ r[8] = c & M; c >>= 26; c += u8 * R1;
+ VERIFY_BITS(r[8], 26);
+ VERIFY_BITS(c, 39);
+ /* [d u8 0 0 0 0 0 0 0 0 t9+c-u8*R1 r8-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 0 0 t9+c r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ c += d * R0 + t9;
+ VERIFY_BITS(c, 45);
+ /* [d 0 0 0 0 0 0 0 0 0 c-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[9] = c & (M >> 4); c >>= 22; c += d * (R1 << 4);
+ VERIFY_BITS(r[9], 22);
+ VERIFY_BITS(c, 46);
+ /* [d 0 0 0 0 0 0 0 0 r9+((c-d*R1<<4)<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ d = c * (R0 >> 4) + t0;
+ VERIFY_BITS(d, 56);
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[0] = d & M; d >>= 26;
+ VERIFY_BITS(r[0], 26);
+ VERIFY_BITS(d, 30);
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += c * (R1 >> 4) + t1;
+ VERIFY_BITS(d, 53);
+ VERIFY_CHECK(d <= 0x10000003FFFFBFULL);
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [r9 r8 r7 r6 r5 r4 r3 t2 d r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[1] = d & M; d >>= 26;
+ VERIFY_BITS(r[1], 26);
+ VERIFY_BITS(d, 27);
+ VERIFY_CHECK(d <= 0x4000000ULL);
+ /* [r9 r8 r7 r6 r5 r4 r3 t2+d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += t2;
+ VERIFY_BITS(d, 27);
+ /* [r9 r8 r7 r6 r5 r4 r3 d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[2] = d;
+ VERIFY_BITS(r[2], 27);
+ /* [r9 r8 r7 r6 r5 r4 r3 r2 r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+}
+
+SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t *a) {
+ uint64_t c, d;
+ uint64_t u0, u1, u2, u3, u4, u5, u6, u7, u8;
+ uint32_t t9, t0, t1, t2, t3, t4, t5, t6, t7;
+ const uint32_t M = 0x3FFFFFFUL, R0 = 0x3D10UL, R1 = 0x400UL;
+
+ VERIFY_BITS(a[0], 30);
+ VERIFY_BITS(a[1], 30);
+ VERIFY_BITS(a[2], 30);
+ VERIFY_BITS(a[3], 30);
+ VERIFY_BITS(a[4], 30);
+ VERIFY_BITS(a[5], 30);
+ VERIFY_BITS(a[6], 30);
+ VERIFY_BITS(a[7], 30);
+ VERIFY_BITS(a[8], 30);
+ VERIFY_BITS(a[9], 26);
+
+ /** [... a b c] is a shorthand for ... + a<<52 + b<<26 + c<<0 mod n.
+ * px is a shorthand for sum(a[i]*a[x-i], i=0..x).
+ * Note that [x 0 0 0 0 0 0 0 0 0 0] = [x*R1 x*R0].
+ */
+
+ d = (uint64_t)(a[0]*2) * a[9]
+ + (uint64_t)(a[1]*2) * a[8]
+ + (uint64_t)(a[2]*2) * a[7]
+ + (uint64_t)(a[3]*2) * a[6]
+ + (uint64_t)(a[4]*2) * a[5];
+ /* VERIFY_BITS(d, 64); */
+ /* [d 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
+ t9 = d & M; d >>= 26;
+ VERIFY_BITS(t9, 26);
+ VERIFY_BITS(d, 38);
+ /* [d t9 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
+
+ c = (uint64_t)a[0] * a[0];
+ VERIFY_BITS(c, 60);
+ /* [d t9 0 0 0 0 0 0 0 0 c] = [p9 0 0 0 0 0 0 0 0 p0] */
+ d += (uint64_t)(a[1]*2) * a[9]
+ + (uint64_t)(a[2]*2) * a[8]
+ + (uint64_t)(a[3]*2) * a[7]
+ + (uint64_t)(a[4]*2) * a[6]
+ + (uint64_t)a[5] * a[5];
+ VERIFY_BITS(d, 63);
+ /* [d t9 0 0 0 0 0 0 0 0 c] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+ u0 = d & M; d >>= 26; c += u0 * R0;
+ VERIFY_BITS(u0, 26);
+ VERIFY_BITS(d, 37);
+ VERIFY_BITS(c, 61);
+ /* [d u0 t9 0 0 0 0 0 0 0 0 c-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+ t0 = c & M; c >>= 26; c += u0 * R1;
+ VERIFY_BITS(t0, 26);
+ VERIFY_BITS(c, 37);
+ /* [d u0 t9 0 0 0 0 0 0 0 c-u0*R1 t0-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+ /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[1];
+ VERIFY_BITS(c, 62);
+ /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ d += (uint64_t)(a[2]*2) * a[9]
+ + (uint64_t)(a[3]*2) * a[8]
+ + (uint64_t)(a[4]*2) * a[7]
+ + (uint64_t)(a[5]*2) * a[6];
+ VERIFY_BITS(d, 63);
+ /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ u1 = d & M; d >>= 26; c += u1 * R0;
+ VERIFY_BITS(u1, 26);
+ VERIFY_BITS(d, 37);
+ VERIFY_BITS(c, 63);
+ /* [d u1 0 t9 0 0 0 0 0 0 0 c-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ t1 = c & M; c >>= 26; c += u1 * R1;
+ VERIFY_BITS(t1, 26);
+ VERIFY_BITS(c, 38);
+ /* [d u1 0 t9 0 0 0 0 0 0 c-u1*R1 t1-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+ /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[2]
+ + (uint64_t)a[1] * a[1];
+ VERIFY_BITS(c, 62);
+ /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ d += (uint64_t)(a[3]*2) * a[9]
+ + (uint64_t)(a[4]*2) * a[8]
+ + (uint64_t)(a[5]*2) * a[7]
+ + (uint64_t)a[6] * a[6];
+ VERIFY_BITS(d, 63);
+ /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ u2 = d & M; d >>= 26; c += u2 * R0;
+ VERIFY_BITS(u2, 26);
+ VERIFY_BITS(d, 37);
+ VERIFY_BITS(c, 63);
+ /* [d u2 0 0 t9 0 0 0 0 0 0 c-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ t2 = c & M; c >>= 26; c += u2 * R1;
+ VERIFY_BITS(t2, 26);
+ VERIFY_BITS(c, 38);
+ /* [d u2 0 0 t9 0 0 0 0 0 c-u2*R1 t2-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+ /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[3]
+ + (uint64_t)(a[1]*2) * a[2];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ d += (uint64_t)(a[4]*2) * a[9]
+ + (uint64_t)(a[5]*2) * a[8]
+ + (uint64_t)(a[6]*2) * a[7];
+ VERIFY_BITS(d, 63);
+ /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ u3 = d & M; d >>= 26; c += u3 * R0;
+ VERIFY_BITS(u3, 26);
+ VERIFY_BITS(d, 37);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u3 0 0 0 t9 0 0 0 0 0 c-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ t3 = c & M; c >>= 26; c += u3 * R1;
+ VERIFY_BITS(t3, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u3 0 0 0 t9 0 0 0 0 c-u3*R1 t3-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[4]
+ + (uint64_t)(a[1]*2) * a[3]
+ + (uint64_t)a[2] * a[2];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ d += (uint64_t)(a[5]*2) * a[9]
+ + (uint64_t)(a[6]*2) * a[8]
+ + (uint64_t)a[7] * a[7];
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ u4 = d & M; d >>= 26; c += u4 * R0;
+ VERIFY_BITS(u4, 26);
+ VERIFY_BITS(d, 36);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u4 0 0 0 0 t9 0 0 0 0 c-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ t4 = c & M; c >>= 26; c += u4 * R1;
+ VERIFY_BITS(t4, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u4 0 0 0 0 t9 0 0 0 c-u4*R1 t4-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[5]
+ + (uint64_t)(a[1]*2) * a[4]
+ + (uint64_t)(a[2]*2) * a[3];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)(a[6]*2) * a[9]
+ + (uint64_t)(a[7]*2) * a[8];
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ u5 = d & M; d >>= 26; c += u5 * R0;
+ VERIFY_BITS(u5, 26);
+ VERIFY_BITS(d, 36);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u5 0 0 0 0 0 t9 0 0 0 c-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ t5 = c & M; c >>= 26; c += u5 * R1;
+ VERIFY_BITS(t5, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u5 0 0 0 0 0 t9 0 0 c-u5*R1 t5-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[6]
+ + (uint64_t)(a[1]*2) * a[5]
+ + (uint64_t)(a[2]*2) * a[4]
+ + (uint64_t)a[3] * a[3];
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)(a[7]*2) * a[9]
+ + (uint64_t)a[8] * a[8];
+ VERIFY_BITS(d, 61);
+ /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ u6 = d & M; d >>= 26; c += u6 * R0;
+ VERIFY_BITS(u6, 26);
+ VERIFY_BITS(d, 35);
+ /* VERIFY_BITS(c, 64); */
+ /* [d u6 0 0 0 0 0 0 t9 0 0 c-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ t6 = c & M; c >>= 26; c += u6 * R1;
+ VERIFY_BITS(t6, 26);
+ VERIFY_BITS(c, 39);
+ /* [d u6 0 0 0 0 0 0 t9 0 c-u6*R1 t6-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[7]
+ + (uint64_t)(a[1]*2) * a[6]
+ + (uint64_t)(a[2]*2) * a[5]
+ + (uint64_t)(a[3]*2) * a[4];
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x8000007C00000007ULL);
+ /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)(a[8]*2) * a[9];
+ VERIFY_BITS(d, 58);
+ /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ u7 = d & M; d >>= 26; c += u7 * R0;
+ VERIFY_BITS(u7, 26);
+ VERIFY_BITS(d, 32);
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x800001703FFFC2F7ULL);
+ /* [d u7 0 0 0 0 0 0 0 t9 0 c-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ t7 = c & M; c >>= 26; c += u7 * R1;
+ VERIFY_BITS(t7, 26);
+ VERIFY_BITS(c, 38);
+ /* [d u7 0 0 0 0 0 0 0 t9 c-u7*R1 t7-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ c += (uint64_t)(a[0]*2) * a[8]
+ + (uint64_t)(a[1]*2) * a[7]
+ + (uint64_t)(a[2]*2) * a[6]
+ + (uint64_t)(a[3]*2) * a[5]
+ + (uint64_t)a[4] * a[4];
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x9000007B80000008ULL);
+ /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint64_t)a[9] * a[9];
+ VERIFY_BITS(d, 57);
+ /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ u8 = d & M; d >>= 26; c += u8 * R0;
+ VERIFY_BITS(u8, 26);
+ VERIFY_BITS(d, 31);
+ /* VERIFY_BITS(c, 64); */
+ VERIFY_CHECK(c <= 0x9000016FBFFFC2F8ULL);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ r[3] = t3;
+ VERIFY_BITS(r[3], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[4] = t4;
+ VERIFY_BITS(r[4], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[5] = t5;
+ VERIFY_BITS(r[5], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[6] = t6;
+ VERIFY_BITS(r[6], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[7] = t7;
+ VERIFY_BITS(r[7], 26);
+ /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ r[8] = c & M; c >>= 26; c += u8 * R1;
+ VERIFY_BITS(r[8], 26);
+ VERIFY_BITS(c, 39);
+ /* [d u8 0 0 0 0 0 0 0 0 t9+c-u8*R1 r8-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 0 0 t9+c r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ c += d * R0 + t9;
+ VERIFY_BITS(c, 45);
+ /* [d 0 0 0 0 0 0 0 0 0 c-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[9] = c & (M >> 4); c >>= 22; c += d * (R1 << 4);
+ VERIFY_BITS(r[9], 22);
+ VERIFY_BITS(c, 46);
+ /* [d 0 0 0 0 0 0 0 0 r9+((c-d*R1<<4)<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ d = c * (R0 >> 4) + t0;
+ VERIFY_BITS(d, 56);
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[0] = d & M; d >>= 26;
+ VERIFY_BITS(r[0], 26);
+ VERIFY_BITS(d, 30);
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += c * (R1 >> 4) + t1;
+ VERIFY_BITS(d, 53);
+ VERIFY_CHECK(d <= 0x10000003FFFFBFULL);
+ /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ /* [r9 r8 r7 r6 r5 r4 r3 t2 d r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[1] = d & M; d >>= 26;
+ VERIFY_BITS(r[1], 26);
+ VERIFY_BITS(d, 27);
+ VERIFY_CHECK(d <= 0x4000000ULL);
+ /* [r9 r8 r7 r6 r5 r4 r3 t2+d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ d += t2;
+ VERIFY_BITS(d, 27);
+ /* [r9 r8 r7 r6 r5 r4 r3 d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[2] = d;
+ VERIFY_BITS(r[2], 27);
+ /* [r9 r8 r7 r6 r5 r4 r3 r2 r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+}
+#endif
+
+static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->magnitude <= 8);
+ VERIFY_CHECK(b->magnitude <= 8);
+ secp256k1_fe_verify(a);
+ secp256k1_fe_verify(b);
+ VERIFY_CHECK(r != b);
+#endif
+ secp256k1_fe_mul_inner(r->n, a->n, b->n);
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->magnitude <= 8);
+ secp256k1_fe_verify(a);
+#endif
+ secp256k1_fe_sqr_inner(r->n, a->n);
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag) {
+ uint32_t mask0, mask1;
+ mask0 = flag + ~((uint32_t)0);
+ mask1 = ~mask0;
+ r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
+ r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
+ r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
+ r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
+ r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
+ r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1);
+ r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1);
+ r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
+ r->n[8] = (r->n[8] & mask0) | (a->n[8] & mask1);
+ r->n[9] = (r->n[9] & mask0) | (a->n[9] & mask1);
+#ifdef VERIFY
+ if (a->magnitude > r->magnitude) {
+ r->magnitude = a->magnitude;
+ }
+ r->normalized &= a->normalized;
+#endif
+}
+
+static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag) {
+ uint32_t mask0, mask1;
+ mask0 = flag + ~((uint32_t)0);
+ mask1 = ~mask0;
+ r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
+ r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
+ r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
+ r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
+ r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
+ r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1);
+ r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1);
+ r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
+}
+
+static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+#endif
+ r->n[0] = a->n[0] | a->n[1] << 26;
+ r->n[1] = a->n[1] >> 6 | a->n[2] << 20;
+ r->n[2] = a->n[2] >> 12 | a->n[3] << 14;
+ r->n[3] = a->n[3] >> 18 | a->n[4] << 8;
+ r->n[4] = a->n[4] >> 24 | a->n[5] << 2 | a->n[6] << 28;
+ r->n[5] = a->n[6] >> 4 | a->n[7] << 22;
+ r->n[6] = a->n[7] >> 10 | a->n[8] << 16;
+ r->n[7] = a->n[8] >> 16 | a->n[9] << 10;
+}
+
+static SECP256K1_INLINE void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a) {
+ r->n[0] = a->n[0] & 0x3FFFFFFUL;
+ r->n[1] = a->n[0] >> 26 | ((a->n[1] << 6) & 0x3FFFFFFUL);
+ r->n[2] = a->n[1] >> 20 | ((a->n[2] << 12) & 0x3FFFFFFUL);
+ r->n[3] = a->n[2] >> 14 | ((a->n[3] << 18) & 0x3FFFFFFUL);
+ r->n[4] = a->n[3] >> 8 | ((a->n[4] << 24) & 0x3FFFFFFUL);
+ r->n[5] = (a->n[4] >> 2) & 0x3FFFFFFUL;
+ r->n[6] = a->n[4] >> 28 | ((a->n[5] << 4) & 0x3FFFFFFUL);
+ r->n[7] = a->n[5] >> 22 | ((a->n[6] << 10) & 0x3FFFFFFUL);
+ r->n[8] = a->n[6] >> 16 | ((a->n[7] << 16) & 0x3FFFFFFUL);
+ r->n[9] = a->n[7] >> 10;
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+#endif
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field_5x52.h b/crypto/secp256k1/libsecp256k1/src/field_5x52.h
new file mode 100644
index 000000000..8e69a560d
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_5x52.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_REPR_
+#define _SECP256K1_FIELD_REPR_
+
+#include <stdint.h>
+
+typedef struct {
+ /* X = sum(i=0..4, elem[i]*2^52) mod n */
+ uint64_t n[5];
+#ifdef VERIFY
+ int magnitude;
+ int normalized;
+#endif
+} secp256k1_fe;
+
+/* Unpacks a constant into a overlapping multi-limbed FE element. */
+#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \
+ (d0) | (((uint64_t)(d1) & 0xFFFFFUL) << 32), \
+ ((uint64_t)(d1) >> 20) | (((uint64_t)(d2)) << 12) | (((uint64_t)(d3) & 0xFFUL) << 44), \
+ ((uint64_t)(d3) >> 8) | (((uint64_t)(d4) & 0xFFFFFFFUL) << 24), \
+ ((uint64_t)(d4) >> 28) | (((uint64_t)(d5)) << 4) | (((uint64_t)(d6) & 0xFFFFUL) << 36), \
+ ((uint64_t)(d6) >> 16) | (((uint64_t)(d7)) << 16) \
+}
+
+#ifdef VERIFY
+#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1}
+#else
+#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))}
+#endif
+
+typedef struct {
+ uint64_t n[4];
+} secp256k1_fe_storage;
+
+#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ \
+ (d0) | (((uint64_t)(d1)) << 32), \
+ (d2) | (((uint64_t)(d3)) << 32), \
+ (d4) | (((uint64_t)(d5)) << 32), \
+ (d6) | (((uint64_t)(d7)) << 32) \
+}}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field_5x52_asm_impl.h b/crypto/secp256k1/libsecp256k1/src/field_5x52_asm_impl.h
new file mode 100644
index 000000000..98cc004bf
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_5x52_asm_impl.h
@@ -0,0 +1,502 @@
+/**********************************************************************
+ * Copyright (c) 2013-2014 Diederik Huys, Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+/**
+ * Changelog:
+ * - March 2013, Diederik Huys: original version
+ * - November 2014, Pieter Wuille: updated to use Peter Dettman's parallel multiplication algorithm
+ * - December 2014, Pieter Wuille: converted from YASM to GCC inline assembly
+ */
+
+#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_
+#define _SECP256K1_FIELD_INNER5X52_IMPL_H_
+
+SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) {
+/**
+ * Registers: rdx:rax = multiplication accumulator
+ * r9:r8 = c
+ * r15:rcx = d
+ * r10-r14 = a0-a4
+ * rbx = b
+ * rdi = r
+ * rsi = a / t?
+ */
+ uint64_t tmp1, tmp2, tmp3;
+__asm__ __volatile__(
+ "movq 0(%%rsi),%%r10\n"
+ "movq 8(%%rsi),%%r11\n"
+ "movq 16(%%rsi),%%r12\n"
+ "movq 24(%%rsi),%%r13\n"
+ "movq 32(%%rsi),%%r14\n"
+
+ /* d += a3 * b0 */
+ "movq 0(%%rbx),%%rax\n"
+ "mulq %%r13\n"
+ "movq %%rax,%%rcx\n"
+ "movq %%rdx,%%r15\n"
+ /* d += a2 * b1 */
+ "movq 8(%%rbx),%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a1 * b2 */
+ "movq 16(%%rbx),%%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d = a0 * b3 */
+ "movq 24(%%rbx),%%rax\n"
+ "mulq %%r10\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* c = a4 * b4 */
+ "movq 32(%%rbx),%%rax\n"
+ "mulq %%r14\n"
+ "movq %%rax,%%r8\n"
+ "movq %%rdx,%%r9\n"
+ /* d += (c & M) * R */
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* c >>= 52 (%%r8 only) */
+ "shrdq $52,%%r9,%%r8\n"
+ /* t3 (tmp1) = d & M */
+ "movq %%rcx,%%rsi\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rsi\n"
+ "movq %%rsi,%q1\n"
+ /* d >>= 52 */
+ "shrdq $52,%%r15,%%rcx\n"
+ "xorq %%r15,%%r15\n"
+ /* d += a4 * b0 */
+ "movq 0(%%rbx),%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a3 * b1 */
+ "movq 8(%%rbx),%%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a2 * b2 */
+ "movq 16(%%rbx),%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a1 * b3 */
+ "movq 24(%%rbx),%%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a0 * b4 */
+ "movq 32(%%rbx),%%rax\n"
+ "mulq %%r10\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += c * R */
+ "movq %%r8,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* t4 = d & M (%%rsi) */
+ "movq %%rcx,%%rsi\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rsi\n"
+ /* d >>= 52 */
+ "shrdq $52,%%r15,%%rcx\n"
+ "xorq %%r15,%%r15\n"
+ /* tx = t4 >> 48 (tmp3) */
+ "movq %%rsi,%%rax\n"
+ "shrq $48,%%rax\n"
+ "movq %%rax,%q3\n"
+ /* t4 &= (M >> 4) (tmp2) */
+ "movq $0xffffffffffff,%%rax\n"
+ "andq %%rax,%%rsi\n"
+ "movq %%rsi,%q2\n"
+ /* c = a0 * b0 */
+ "movq 0(%%rbx),%%rax\n"
+ "mulq %%r10\n"
+ "movq %%rax,%%r8\n"
+ "movq %%rdx,%%r9\n"
+ /* d += a4 * b1 */
+ "movq 8(%%rbx),%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a3 * b2 */
+ "movq 16(%%rbx),%%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a2 * b3 */
+ "movq 24(%%rbx),%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a1 * b4 */
+ "movq 32(%%rbx),%%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* u0 = d & M (%%rsi) */
+ "movq %%rcx,%%rsi\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rsi\n"
+ /* d >>= 52 */
+ "shrdq $52,%%r15,%%rcx\n"
+ "xorq %%r15,%%r15\n"
+ /* u0 = (u0 << 4) | tx (%%rsi) */
+ "shlq $4,%%rsi\n"
+ "movq %q3,%%rax\n"
+ "orq %%rax,%%rsi\n"
+ /* c += u0 * (R >> 4) */
+ "movq $0x1000003d1,%%rax\n"
+ "mulq %%rsi\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* r[0] = c & M */
+ "movq %%r8,%%rax\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rax\n"
+ "movq %%rax,0(%%rdi)\n"
+ /* c >>= 52 */
+ "shrdq $52,%%r9,%%r8\n"
+ "xorq %%r9,%%r9\n"
+ /* c += a1 * b0 */
+ "movq 0(%%rbx),%%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* c += a0 * b1 */
+ "movq 8(%%rbx),%%rax\n"
+ "mulq %%r10\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* d += a4 * b2 */
+ "movq 16(%%rbx),%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a3 * b3 */
+ "movq 24(%%rbx),%%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a2 * b4 */
+ "movq 32(%%rbx),%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* c += (d & M) * R */
+ "movq %%rcx,%%rax\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* d >>= 52 */
+ "shrdq $52,%%r15,%%rcx\n"
+ "xorq %%r15,%%r15\n"
+ /* r[1] = c & M */
+ "movq %%r8,%%rax\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rax\n"
+ "movq %%rax,8(%%rdi)\n"
+ /* c >>= 52 */
+ "shrdq $52,%%r9,%%r8\n"
+ "xorq %%r9,%%r9\n"
+ /* c += a2 * b0 */
+ "movq 0(%%rbx),%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* c += a1 * b1 */
+ "movq 8(%%rbx),%%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* c += a0 * b2 (last use of %%r10 = a0) */
+ "movq 16(%%rbx),%%rax\n"
+ "mulq %%r10\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* fetch t3 (%%r10, overwrites a0), t4 (%%rsi) */
+ "movq %q2,%%rsi\n"
+ "movq %q1,%%r10\n"
+ /* d += a4 * b3 */
+ "movq 24(%%rbx),%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* d += a3 * b4 */
+ "movq 32(%%rbx),%%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax,%%rcx\n"
+ "adcq %%rdx,%%r15\n"
+ /* c += (d & M) * R */
+ "movq %%rcx,%%rax\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* d >>= 52 (%%rcx only) */
+ "shrdq $52,%%r15,%%rcx\n"
+ /* r[2] = c & M */
+ "movq %%r8,%%rax\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rax\n"
+ "movq %%rax,16(%%rdi)\n"
+ /* c >>= 52 */
+ "shrdq $52,%%r9,%%r8\n"
+ "xorq %%r9,%%r9\n"
+ /* c += t3 */
+ "addq %%r10,%%r8\n"
+ /* c += d * R */
+ "movq %%rcx,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* r[3] = c & M */
+ "movq %%r8,%%rax\n"
+ "movq $0xfffffffffffff,%%rdx\n"
+ "andq %%rdx,%%rax\n"
+ "movq %%rax,24(%%rdi)\n"
+ /* c >>= 52 (%%r8 only) */
+ "shrdq $52,%%r9,%%r8\n"
+ /* c += t4 (%%r8 only) */
+ "addq %%rsi,%%r8\n"
+ /* r[4] = c */
+ "movq %%r8,32(%%rdi)\n"
+: "+S"(a), "=m"(tmp1), "=m"(tmp2), "=m"(tmp3)
+: "b"(b), "D"(r)
+: "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "cc", "memory"
+);
+}
+
+SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) {
+/**
+ * Registers: rdx:rax = multiplication accumulator
+ * r9:r8 = c
+ * rcx:rbx = d
+ * r10-r14 = a0-a4
+ * r15 = M (0xfffffffffffff)
+ * rdi = r
+ * rsi = a / t?
+ */
+ uint64_t tmp1, tmp2, tmp3;
+__asm__ __volatile__(
+ "movq 0(%%rsi),%%r10\n"
+ "movq 8(%%rsi),%%r11\n"
+ "movq 16(%%rsi),%%r12\n"
+ "movq 24(%%rsi),%%r13\n"
+ "movq 32(%%rsi),%%r14\n"
+ "movq $0xfffffffffffff,%%r15\n"
+
+ /* d = (a0*2) * a3 */
+ "leaq (%%r10,%%r10,1),%%rax\n"
+ "mulq %%r13\n"
+ "movq %%rax,%%rbx\n"
+ "movq %%rdx,%%rcx\n"
+ /* d += (a1*2) * a2 */
+ "leaq (%%r11,%%r11,1),%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* c = a4 * a4 */
+ "movq %%r14,%%rax\n"
+ "mulq %%r14\n"
+ "movq %%rax,%%r8\n"
+ "movq %%rdx,%%r9\n"
+ /* d += (c & M) * R */
+ "andq %%r15,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* c >>= 52 (%%r8 only) */
+ "shrdq $52,%%r9,%%r8\n"
+ /* t3 (tmp1) = d & M */
+ "movq %%rbx,%%rsi\n"
+ "andq %%r15,%%rsi\n"
+ "movq %%rsi,%q1\n"
+ /* d >>= 52 */
+ "shrdq $52,%%rcx,%%rbx\n"
+ "xorq %%rcx,%%rcx\n"
+ /* a4 *= 2 */
+ "addq %%r14,%%r14\n"
+ /* d += a0 * a4 */
+ "movq %%r10,%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* d+= (a1*2) * a3 */
+ "leaq (%%r11,%%r11,1),%%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* d += a2 * a2 */
+ "movq %%r12,%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* d += c * R */
+ "movq %%r8,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* t4 = d & M (%%rsi) */
+ "movq %%rbx,%%rsi\n"
+ "andq %%r15,%%rsi\n"
+ /* d >>= 52 */
+ "shrdq $52,%%rcx,%%rbx\n"
+ "xorq %%rcx,%%rcx\n"
+ /* tx = t4 >> 48 (tmp3) */
+ "movq %%rsi,%%rax\n"
+ "shrq $48,%%rax\n"
+ "movq %%rax,%q3\n"
+ /* t4 &= (M >> 4) (tmp2) */
+ "movq $0xffffffffffff,%%rax\n"
+ "andq %%rax,%%rsi\n"
+ "movq %%rsi,%q2\n"
+ /* c = a0 * a0 */
+ "movq %%r10,%%rax\n"
+ "mulq %%r10\n"
+ "movq %%rax,%%r8\n"
+ "movq %%rdx,%%r9\n"
+ /* d += a1 * a4 */
+ "movq %%r11,%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* d += (a2*2) * a3 */
+ "leaq (%%r12,%%r12,1),%%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* u0 = d & M (%%rsi) */
+ "movq %%rbx,%%rsi\n"
+ "andq %%r15,%%rsi\n"
+ /* d >>= 52 */
+ "shrdq $52,%%rcx,%%rbx\n"
+ "xorq %%rcx,%%rcx\n"
+ /* u0 = (u0 << 4) | tx (%%rsi) */
+ "shlq $4,%%rsi\n"
+ "movq %q3,%%rax\n"
+ "orq %%rax,%%rsi\n"
+ /* c += u0 * (R >> 4) */
+ "movq $0x1000003d1,%%rax\n"
+ "mulq %%rsi\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* r[0] = c & M */
+ "movq %%r8,%%rax\n"
+ "andq %%r15,%%rax\n"
+ "movq %%rax,0(%%rdi)\n"
+ /* c >>= 52 */
+ "shrdq $52,%%r9,%%r8\n"
+ "xorq %%r9,%%r9\n"
+ /* a0 *= 2 */
+ "addq %%r10,%%r10\n"
+ /* c += a0 * a1 */
+ "movq %%r10,%%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* d += a2 * a4 */
+ "movq %%r12,%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* d += a3 * a3 */
+ "movq %%r13,%%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* c += (d & M) * R */
+ "movq %%rbx,%%rax\n"
+ "andq %%r15,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* d >>= 52 */
+ "shrdq $52,%%rcx,%%rbx\n"
+ "xorq %%rcx,%%rcx\n"
+ /* r[1] = c & M */
+ "movq %%r8,%%rax\n"
+ "andq %%r15,%%rax\n"
+ "movq %%rax,8(%%rdi)\n"
+ /* c >>= 52 */
+ "shrdq $52,%%r9,%%r8\n"
+ "xorq %%r9,%%r9\n"
+ /* c += a0 * a2 (last use of %%r10) */
+ "movq %%r10,%%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* fetch t3 (%%r10, overwrites a0),t4 (%%rsi) */
+ "movq %q2,%%rsi\n"
+ "movq %q1,%%r10\n"
+ /* c += a1 * a1 */
+ "movq %%r11,%%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* d += a3 * a4 */
+ "movq %%r13,%%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax,%%rbx\n"
+ "adcq %%rdx,%%rcx\n"
+ /* c += (d & M) * R */
+ "movq %%rbx,%%rax\n"
+ "andq %%r15,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* d >>= 52 (%%rbx only) */
+ "shrdq $52,%%rcx,%%rbx\n"
+ /* r[2] = c & M */
+ "movq %%r8,%%rax\n"
+ "andq %%r15,%%rax\n"
+ "movq %%rax,16(%%rdi)\n"
+ /* c >>= 52 */
+ "shrdq $52,%%r9,%%r8\n"
+ "xorq %%r9,%%r9\n"
+ /* c += t3 */
+ "addq %%r10,%%r8\n"
+ /* c += d * R */
+ "movq %%rbx,%%rax\n"
+ "movq $0x1000003d10,%%rdx\n"
+ "mulq %%rdx\n"
+ "addq %%rax,%%r8\n"
+ "adcq %%rdx,%%r9\n"
+ /* r[3] = c & M */
+ "movq %%r8,%%rax\n"
+ "andq %%r15,%%rax\n"
+ "movq %%rax,24(%%rdi)\n"
+ /* c >>= 52 (%%r8 only) */
+ "shrdq $52,%%r9,%%r8\n"
+ /* c += t4 (%%r8 only) */
+ "addq %%rsi,%%r8\n"
+ /* r[4] = c */
+ "movq %%r8,32(%%rdi)\n"
+: "+S"(a), "=m"(tmp1), "=m"(tmp2), "=m"(tmp3)
+: "D"(r)
+: "%rax", "%rbx", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "cc", "memory"
+);
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field_5x52_impl.h b/crypto/secp256k1/libsecp256k1/src/field_5x52_impl.h
new file mode 100644
index 000000000..dd88f38c7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_5x52_impl.h
@@ -0,0 +1,451 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_REPR_IMPL_H_
+#define _SECP256K1_FIELD_REPR_IMPL_H_
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#include "util.h"
+#include "num.h"
+#include "field.h"
+
+#if defined(USE_ASM_X86_64)
+#include "field_5x52_asm_impl.h"
+#else
+#include "field_5x52_int128_impl.h"
+#endif
+
+/** Implements arithmetic modulo FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F,
+ * represented as 5 uint64_t's in base 2^52. The values are allowed to contain >52 each. In particular,
+ * each FieldElem has a 'magnitude' associated with it. Internally, a magnitude M means each element
+ * is at most M*(2^53-1), except the most significant one, which is limited to M*(2^49-1). All operations
+ * accept any input with magnitude at most M, and have different rules for propagating magnitude to their
+ * output.
+ */
+
+#ifdef VERIFY
+static void secp256k1_fe_verify(const secp256k1_fe *a) {
+ const uint64_t *d = a->n;
+ int m = a->normalized ? 1 : 2 * a->magnitude, r = 1;
+ /* secp256k1 'p' value defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
+ r &= (d[0] <= 0xFFFFFFFFFFFFFULL * m);
+ r &= (d[1] <= 0xFFFFFFFFFFFFFULL * m);
+ r &= (d[2] <= 0xFFFFFFFFFFFFFULL * m);
+ r &= (d[3] <= 0xFFFFFFFFFFFFFULL * m);
+ r &= (d[4] <= 0x0FFFFFFFFFFFFULL * m);
+ r &= (a->magnitude >= 0);
+ r &= (a->magnitude <= 2048);
+ if (a->normalized) {
+ r &= (a->magnitude <= 1);
+ if (r && (d[4] == 0x0FFFFFFFFFFFFULL) && ((d[3] & d[2] & d[1]) == 0xFFFFFFFFFFFFFULL)) {
+ r &= (d[0] < 0xFFFFEFFFFFC2FULL);
+ }
+ }
+ VERIFY_CHECK(r == 1);
+}
+#endif
+
+static void secp256k1_fe_normalize(secp256k1_fe *r) {
+ uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
+
+ /* Reduce t4 at the start so there will be at most a single carry from the first pass */
+ uint64_t m;
+ uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x1000003D1ULL;
+ t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
+ t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1;
+ t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2;
+ t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3;
+
+ /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t4 >> 49 == 0);
+
+ /* At most a single final reduction is needed; check if the value is >= the field characteristic */
+ x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL)
+ & (t0 >= 0xFFFFEFFFFFC2FULL));
+
+ /* Apply the final reduction (for constant-time behaviour, we do it always) */
+ t0 += x * 0x1000003D1ULL;
+ t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
+ t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;
+ t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;
+ t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;
+
+ /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */
+ VERIFY_CHECK(t4 >> 48 == x);
+
+ /* Mask off the possible multiple of 2^256 from the final reduction */
+ t4 &= 0x0FFFFFFFFFFFFULL;
+
+ r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
+
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static void secp256k1_fe_normalize_weak(secp256k1_fe *r) {
+ uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
+
+ /* Reduce t4 at the start so there will be at most a single carry from the first pass */
+ uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x1000003D1ULL;
+ t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
+ t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;
+ t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;
+ t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;
+
+ /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t4 >> 49 == 0);
+
+ r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
+
+#ifdef VERIFY
+ r->magnitude = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static void secp256k1_fe_normalize_var(secp256k1_fe *r) {
+ uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
+
+ /* Reduce t4 at the start so there will be at most a single carry from the first pass */
+ uint64_t m;
+ uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x1000003D1ULL;
+ t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
+ t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1;
+ t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2;
+ t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3;
+
+ /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t4 >> 49 == 0);
+
+ /* At most a single final reduction is needed; check if the value is >= the field characteristic */
+ x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL)
+ & (t0 >= 0xFFFFEFFFFFC2FULL));
+
+ if (x) {
+ t0 += 0x1000003D1ULL;
+ t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
+ t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;
+ t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;
+ t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;
+
+ /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */
+ VERIFY_CHECK(t4 >> 48 == x);
+
+ /* Mask off the possible multiple of 2^256 from the final reduction */
+ t4 &= 0x0FFFFFFFFFFFFULL;
+ }
+
+ r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
+
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r) {
+ uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
+
+ /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
+ uint64_t z0, z1;
+
+ /* Reduce t4 at the start so there will be at most a single carry from the first pass */
+ uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x1000003D1ULL;
+ t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; z0 = t0; z1 = t0 ^ 0x1000003D0ULL;
+ t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1;
+ t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2;
+ t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3;
+ z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL;
+
+ /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t4 >> 49 == 0);
+
+ return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL);
+}
+
+static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r) {
+ uint64_t t0, t1, t2, t3, t4;
+ uint64_t z0, z1;
+ uint64_t x;
+
+ t0 = r->n[0];
+ t4 = r->n[4];
+
+ /* Reduce t4 at the start so there will be at most a single carry from the first pass */
+ x = t4 >> 48;
+
+ /* The first pass ensures the magnitude is 1, ... */
+ t0 += x * 0x1000003D1ULL;
+
+ /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
+ z0 = t0 & 0xFFFFFFFFFFFFFULL;
+ z1 = z0 ^ 0x1000003D0ULL;
+
+ /* Fast return path should catch the majority of cases */
+ if ((z0 != 0ULL) & (z1 != 0xFFFFFFFFFFFFFULL)) {
+ return 0;
+ }
+
+ t1 = r->n[1];
+ t2 = r->n[2];
+ t3 = r->n[3];
+
+ t4 &= 0x0FFFFFFFFFFFFULL;
+
+ t1 += (t0 >> 52);
+ t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1;
+ t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2;
+ t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3;
+ z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL;
+
+ /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
+ VERIFY_CHECK(t4 >> 49 == 0);
+
+ return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL);
+}
+
+SECP256K1_INLINE static void secp256k1_fe_set_int(secp256k1_fe *r, int a) {
+ r->n[0] = a;
+ r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0;
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+SECP256K1_INLINE static int secp256k1_fe_is_zero(const secp256k1_fe *a) {
+ const uint64_t *t = a->n;
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ secp256k1_fe_verify(a);
+#endif
+ return (t[0] | t[1] | t[2] | t[3] | t[4]) == 0;
+}
+
+SECP256K1_INLINE static int secp256k1_fe_is_odd(const secp256k1_fe *a) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ secp256k1_fe_verify(a);
+#endif
+ return a->n[0] & 1;
+}
+
+SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) {
+ int i;
+#ifdef VERIFY
+ a->magnitude = 0;
+ a->normalized = 1;
+#endif
+ for (i=0; i<5; i++) {
+ a->n[i] = 0;
+ }
+}
+
+static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b) {
+ int i;
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ VERIFY_CHECK(b->normalized);
+ secp256k1_fe_verify(a);
+ secp256k1_fe_verify(b);
+#endif
+ for (i = 4; i >= 0; i--) {
+ if (a->n[i] > b->n[i]) {
+ return 1;
+ }
+ if (a->n[i] < b->n[i]) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a) {
+ int i;
+ r->n[0] = r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0;
+ for (i=0; i<32; i++) {
+ int j;
+ for (j=0; j<2; j++) {
+ int limb = (8*i+4*j)/52;
+ int shift = (8*i+4*j)%52;
+ r->n[limb] |= (uint64_t)((a[31-i] >> (4*j)) & 0xF) << shift;
+ }
+ }
+ if (r->n[4] == 0x0FFFFFFFFFFFFULL && (r->n[3] & r->n[2] & r->n[1]) == 0xFFFFFFFFFFFFFULL && r->n[0] >= 0xFFFFEFFFFFC2FULL) {
+ return 0;
+ }
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+ secp256k1_fe_verify(r);
+#endif
+ return 1;
+}
+
+/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */
+static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a) {
+ int i;
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+ secp256k1_fe_verify(a);
+#endif
+ for (i=0; i<32; i++) {
+ int j;
+ int c = 0;
+ for (j=0; j<2; j++) {
+ int limb = (8*i+4*j)/52;
+ int shift = (8*i+4*j)%52;
+ c |= ((a->n[limb] >> shift) & 0xF) << (4 * j);
+ }
+ r[31-i] = c;
+ }
+}
+
+SECP256K1_INLINE static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->magnitude <= m);
+ secp256k1_fe_verify(a);
+#endif
+ r->n[0] = 0xFFFFEFFFFFC2FULL * 2 * (m + 1) - a->n[0];
+ r->n[1] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[1];
+ r->n[2] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[2];
+ r->n[3] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[3];
+ r->n[4] = 0x0FFFFFFFFFFFFULL * 2 * (m + 1) - a->n[4];
+#ifdef VERIFY
+ r->magnitude = m + 1;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+SECP256K1_INLINE static void secp256k1_fe_mul_int(secp256k1_fe *r, int a) {
+ r->n[0] *= a;
+ r->n[1] *= a;
+ r->n[2] *= a;
+ r->n[3] *= a;
+ r->n[4] *= a;
+#ifdef VERIFY
+ r->magnitude *= a;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+SECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a) {
+#ifdef VERIFY
+ secp256k1_fe_verify(a);
+#endif
+ r->n[0] += a->n[0];
+ r->n[1] += a->n[1];
+ r->n[2] += a->n[2];
+ r->n[3] += a->n[3];
+ r->n[4] += a->n[4];
+#ifdef VERIFY
+ r->magnitude += a->magnitude;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->magnitude <= 8);
+ VERIFY_CHECK(b->magnitude <= 8);
+ secp256k1_fe_verify(a);
+ secp256k1_fe_verify(b);
+ VERIFY_CHECK(r != b);
+#endif
+ secp256k1_fe_mul_inner(r->n, a->n, b->n);
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->magnitude <= 8);
+ secp256k1_fe_verify(a);
+#endif
+ secp256k1_fe_sqr_inner(r->n, a->n);
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 0;
+ secp256k1_fe_verify(r);
+#endif
+}
+
+static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag) {
+ uint64_t mask0, mask1;
+ mask0 = flag + ~((uint64_t)0);
+ mask1 = ~mask0;
+ r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
+ r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
+ r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
+ r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
+ r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
+#ifdef VERIFY
+ if (a->magnitude > r->magnitude) {
+ r->magnitude = a->magnitude;
+ }
+ r->normalized &= a->normalized;
+#endif
+}
+
+static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag) {
+ uint64_t mask0, mask1;
+ mask0 = flag + ~((uint64_t)0);
+ mask1 = ~mask0;
+ r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
+ r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
+ r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
+ r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
+}
+
+static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
+#ifdef VERIFY
+ VERIFY_CHECK(a->normalized);
+#endif
+ r->n[0] = a->n[0] | a->n[1] << 52;
+ r->n[1] = a->n[1] >> 12 | a->n[2] << 40;
+ r->n[2] = a->n[2] >> 24 | a->n[3] << 28;
+ r->n[3] = a->n[3] >> 36 | a->n[4] << 16;
+}
+
+static SECP256K1_INLINE void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a) {
+ r->n[0] = a->n[0] & 0xFFFFFFFFFFFFFULL;
+ r->n[1] = a->n[0] >> 52 | ((a->n[1] << 12) & 0xFFFFFFFFFFFFFULL);
+ r->n[2] = a->n[1] >> 40 | ((a->n[2] << 24) & 0xFFFFFFFFFFFFFULL);
+ r->n[3] = a->n[2] >> 28 | ((a->n[3] << 36) & 0xFFFFFFFFFFFFFULL);
+ r->n[4] = a->n[3] >> 16;
+#ifdef VERIFY
+ r->magnitude = 1;
+ r->normalized = 1;
+#endif
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field_5x52_int128_impl.h b/crypto/secp256k1/libsecp256k1/src/field_5x52_int128_impl.h
new file mode 100644
index 000000000..0bf22bdd3
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_5x52_int128_impl.h
@@ -0,0 +1,277 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_
+#define _SECP256K1_FIELD_INNER5X52_IMPL_H_
+
+#include <stdint.h>
+
+#ifdef VERIFY
+#define VERIFY_BITS(x, n) VERIFY_CHECK(((x) >> (n)) == 0)
+#else
+#define VERIFY_BITS(x, n) do { } while(0)
+#endif
+
+SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) {
+ uint128_t c, d;
+ uint64_t t3, t4, tx, u0;
+ uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];
+ const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;
+
+ VERIFY_BITS(a[0], 56);
+ VERIFY_BITS(a[1], 56);
+ VERIFY_BITS(a[2], 56);
+ VERIFY_BITS(a[3], 56);
+ VERIFY_BITS(a[4], 52);
+ VERIFY_BITS(b[0], 56);
+ VERIFY_BITS(b[1], 56);
+ VERIFY_BITS(b[2], 56);
+ VERIFY_BITS(b[3], 56);
+ VERIFY_BITS(b[4], 52);
+ VERIFY_CHECK(r != b);
+
+ /* [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n.
+ * px is a shorthand for sum(a[i]*b[x-i], i=0..x).
+ * Note that [x 0 0 0 0 0] = [x*R].
+ */
+
+ d = (uint128_t)a0 * b[3]
+ + (uint128_t)a1 * b[2]
+ + (uint128_t)a2 * b[1]
+ + (uint128_t)a3 * b[0];
+ VERIFY_BITS(d, 114);
+ /* [d 0 0 0] = [p3 0 0 0] */
+ c = (uint128_t)a4 * b[4];
+ VERIFY_BITS(c, 112);
+ /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
+ d += (c & M) * R; c >>= 52;
+ VERIFY_BITS(d, 115);
+ VERIFY_BITS(c, 60);
+ /* [c 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
+ t3 = d & M; d >>= 52;
+ VERIFY_BITS(t3, 52);
+ VERIFY_BITS(d, 63);
+ /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
+
+ d += (uint128_t)a0 * b[4]
+ + (uint128_t)a1 * b[3]
+ + (uint128_t)a2 * b[2]
+ + (uint128_t)a3 * b[1]
+ + (uint128_t)a4 * b[0];
+ VERIFY_BITS(d, 115);
+ /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+ d += c * R;
+ VERIFY_BITS(d, 116);
+ /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+ t4 = d & M; d >>= 52;
+ VERIFY_BITS(t4, 52);
+ VERIFY_BITS(d, 64);
+ /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+ tx = (t4 >> 48); t4 &= (M >> 4);
+ VERIFY_BITS(tx, 4);
+ VERIFY_BITS(t4, 48);
+ /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+
+ c = (uint128_t)a0 * b[0];
+ VERIFY_BITS(c, 112);
+ /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */
+ d += (uint128_t)a1 * b[4]
+ + (uint128_t)a2 * b[3]
+ + (uint128_t)a3 * b[2]
+ + (uint128_t)a4 * b[1];
+ VERIFY_BITS(d, 115);
+ /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ u0 = d & M; d >>= 52;
+ VERIFY_BITS(u0, 52);
+ VERIFY_BITS(d, 63);
+ /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ u0 = (u0 << 4) | tx;
+ VERIFY_BITS(u0, 56);
+ /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ c += (uint128_t)u0 * (R >> 4);
+ VERIFY_BITS(c, 115);
+ /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ r[0] = c & M; c >>= 52;
+ VERIFY_BITS(r[0], 52);
+ VERIFY_BITS(c, 61);
+ /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */
+
+ c += (uint128_t)a0 * b[1]
+ + (uint128_t)a1 * b[0];
+ VERIFY_BITS(c, 114);
+ /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */
+ d += (uint128_t)a2 * b[4]
+ + (uint128_t)a3 * b[3]
+ + (uint128_t)a4 * b[2];
+ VERIFY_BITS(d, 114);
+ /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
+ c += (d & M) * R; d >>= 52;
+ VERIFY_BITS(c, 115);
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
+ r[1] = c & M; c >>= 52;
+ VERIFY_BITS(r[1], 52);
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
+
+ c += (uint128_t)a0 * b[2]
+ + (uint128_t)a1 * b[1]
+ + (uint128_t)a2 * b[0];
+ VERIFY_BITS(c, 114);
+ /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint128_t)a3 * b[4]
+ + (uint128_t)a4 * b[3];
+ VERIFY_BITS(d, 114);
+ /* [d 0 0 t4 t3 c t1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ c += (d & M) * R; d >>= 52;
+ VERIFY_BITS(c, 115);
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[2] = c & M; c >>= 52;
+ VERIFY_BITS(r[2], 52);
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ c += d * R + t3;
+ VERIFY_BITS(c, 100);
+ /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[3] = c & M; c >>= 52;
+ VERIFY_BITS(r[3], 52);
+ VERIFY_BITS(c, 48);
+ /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ c += t4;
+ VERIFY_BITS(c, 49);
+ /* [c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[4] = c;
+ VERIFY_BITS(r[4], 49);
+ /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+}
+
+SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) {
+ uint128_t c, d;
+ uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];
+ int64_t t3, t4, tx, u0;
+ const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;
+
+ VERIFY_BITS(a[0], 56);
+ VERIFY_BITS(a[1], 56);
+ VERIFY_BITS(a[2], 56);
+ VERIFY_BITS(a[3], 56);
+ VERIFY_BITS(a[4], 52);
+
+ /** [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n.
+ * px is a shorthand for sum(a[i]*a[x-i], i=0..x).
+ * Note that [x 0 0 0 0 0] = [x*R].
+ */
+
+ d = (uint128_t)(a0*2) * a3
+ + (uint128_t)(a1*2) * a2;
+ VERIFY_BITS(d, 114);
+ /* [d 0 0 0] = [p3 0 0 0] */
+ c = (uint128_t)a4 * a4;
+ VERIFY_BITS(c, 112);
+ /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
+ d += (c & M) * R; c >>= 52;
+ VERIFY_BITS(d, 115);
+ VERIFY_BITS(c, 60);
+ /* [c 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
+ t3 = d & M; d >>= 52;
+ VERIFY_BITS(t3, 52);
+ VERIFY_BITS(d, 63);
+ /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
+
+ a4 *= 2;
+ d += (uint128_t)a0 * a4
+ + (uint128_t)(a1*2) * a3
+ + (uint128_t)a2 * a2;
+ VERIFY_BITS(d, 115);
+ /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+ d += c * R;
+ VERIFY_BITS(d, 116);
+ /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+ t4 = d & M; d >>= 52;
+ VERIFY_BITS(t4, 52);
+ VERIFY_BITS(d, 64);
+ /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+ tx = (t4 >> 48); t4 &= (M >> 4);
+ VERIFY_BITS(tx, 4);
+ VERIFY_BITS(t4, 48);
+ /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
+
+ c = (uint128_t)a0 * a0;
+ VERIFY_BITS(c, 112);
+ /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */
+ d += (uint128_t)a1 * a4
+ + (uint128_t)(a2*2) * a3;
+ VERIFY_BITS(d, 114);
+ /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ u0 = d & M; d >>= 52;
+ VERIFY_BITS(u0, 52);
+ VERIFY_BITS(d, 62);
+ /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ u0 = (u0 << 4) | tx;
+ VERIFY_BITS(u0, 56);
+ /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ c += (uint128_t)u0 * (R >> 4);
+ VERIFY_BITS(c, 113);
+ /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
+ r[0] = c & M; c >>= 52;
+ VERIFY_BITS(r[0], 52);
+ VERIFY_BITS(c, 61);
+ /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */
+
+ a0 *= 2;
+ c += (uint128_t)a0 * a1;
+ VERIFY_BITS(c, 114);
+ /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */
+ d += (uint128_t)a2 * a4
+ + (uint128_t)a3 * a3;
+ VERIFY_BITS(d, 114);
+ /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
+ c += (d & M) * R; d >>= 52;
+ VERIFY_BITS(c, 115);
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
+ r[1] = c & M; c >>= 52;
+ VERIFY_BITS(r[1], 52);
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
+
+ c += (uint128_t)a0 * a2
+ + (uint128_t)a1 * a1;
+ VERIFY_BITS(c, 114);
+ /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */
+ d += (uint128_t)a3 * a4;
+ VERIFY_BITS(d, 114);
+ /* [d 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ c += (d & M) * R; d >>= 52;
+ VERIFY_BITS(c, 115);
+ VERIFY_BITS(d, 62);
+ /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[2] = c & M; c >>= 52;
+ VERIFY_BITS(r[2], 52);
+ VERIFY_BITS(c, 63);
+ /* [d 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+
+ c += d * R + t3;
+ VERIFY_BITS(c, 100);
+ /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[3] = c & M; c >>= 52;
+ VERIFY_BITS(r[3], 52);
+ VERIFY_BITS(c, 48);
+ /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ c += t4;
+ VERIFY_BITS(c, 49);
+ /* [c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+ r[4] = c;
+ VERIFY_BITS(r[4], 49);
+ /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/field_impl.h b/crypto/secp256k1/libsecp256k1/src/field_impl.h
new file mode 100644
index 000000000..5127b279b
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_impl.h
@@ -0,0 +1,315 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_IMPL_H_
+#define _SECP256K1_FIELD_IMPL_H_
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#include "util.h"
+
+#if defined(USE_FIELD_10X26)
+#include "field_10x26_impl.h"
+#elif defined(USE_FIELD_5X52)
+#include "field_5x52_impl.h"
+#else
+#error "Please select field implementation"
+#endif
+
+SECP256K1_INLINE static int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b) {
+ secp256k1_fe na;
+ secp256k1_fe_negate(&na, a, 1);
+ secp256k1_fe_add(&na, b);
+ return secp256k1_fe_normalizes_to_zero(&na);
+}
+
+SECP256K1_INLINE static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b) {
+ secp256k1_fe na;
+ secp256k1_fe_negate(&na, a, 1);
+ secp256k1_fe_add(&na, b);
+ return secp256k1_fe_normalizes_to_zero_var(&na);
+}
+
+static int secp256k1_fe_sqrt(secp256k1_fe *r, const secp256k1_fe *a) {
+ /** Given that p is congruent to 3 mod 4, we can compute the square root of
+ * a mod p as the (p+1)/4'th power of a.
+ *
+ * As (p+1)/4 is an even number, it will have the same result for a and for
+ * (-a). Only one of these two numbers actually has a square root however,
+ * so we test at the end by squaring and comparing to the input.
+ * Also because (p+1)/4 is an even number, the computed square root is
+ * itself always a square (a ** ((p+1)/4) is the square of a ** ((p+1)/8)).
+ */
+ secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1;
+ int j;
+
+ /** The binary representation of (p + 1)/4 has 3 blocks of 1s, with lengths in
+ * { 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block:
+ * 1, [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223]
+ */
+
+ secp256k1_fe_sqr(&x2, a);
+ secp256k1_fe_mul(&x2, &x2, a);
+
+ secp256k1_fe_sqr(&x3, &x2);
+ secp256k1_fe_mul(&x3, &x3, a);
+
+ x6 = x3;
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x6, &x6);
+ }
+ secp256k1_fe_mul(&x6, &x6, &x3);
+
+ x9 = x6;
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x9, &x9);
+ }
+ secp256k1_fe_mul(&x9, &x9, &x3);
+
+ x11 = x9;
+ for (j=0; j<2; j++) {
+ secp256k1_fe_sqr(&x11, &x11);
+ }
+ secp256k1_fe_mul(&x11, &x11, &x2);
+
+ x22 = x11;
+ for (j=0; j<11; j++) {
+ secp256k1_fe_sqr(&x22, &x22);
+ }
+ secp256k1_fe_mul(&x22, &x22, &x11);
+
+ x44 = x22;
+ for (j=0; j<22; j++) {
+ secp256k1_fe_sqr(&x44, &x44);
+ }
+ secp256k1_fe_mul(&x44, &x44, &x22);
+
+ x88 = x44;
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x88, &x88);
+ }
+ secp256k1_fe_mul(&x88, &x88, &x44);
+
+ x176 = x88;
+ for (j=0; j<88; j++) {
+ secp256k1_fe_sqr(&x176, &x176);
+ }
+ secp256k1_fe_mul(&x176, &x176, &x88);
+
+ x220 = x176;
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x220, &x220);
+ }
+ secp256k1_fe_mul(&x220, &x220, &x44);
+
+ x223 = x220;
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x223, &x223);
+ }
+ secp256k1_fe_mul(&x223, &x223, &x3);
+
+ /* The final result is then assembled using a sliding window over the blocks. */
+
+ t1 = x223;
+ for (j=0; j<23; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
+ secp256k1_fe_mul(&t1, &t1, &x22);
+ for (j=0; j<6; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
+ secp256k1_fe_mul(&t1, &t1, &x2);
+ secp256k1_fe_sqr(&t1, &t1);
+ secp256k1_fe_sqr(r, &t1);
+
+ /* Check that a square root was actually calculated */
+
+ secp256k1_fe_sqr(&t1, r);
+ return secp256k1_fe_equal(&t1, a);
+}
+
+static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a) {
+ secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1;
+ int j;
+
+ /** The binary representation of (p - 2) has 5 blocks of 1s, with lengths in
+ * { 1, 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block:
+ * [1], [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223]
+ */
+
+ secp256k1_fe_sqr(&x2, a);
+ secp256k1_fe_mul(&x2, &x2, a);
+
+ secp256k1_fe_sqr(&x3, &x2);
+ secp256k1_fe_mul(&x3, &x3, a);
+
+ x6 = x3;
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x6, &x6);
+ }
+ secp256k1_fe_mul(&x6, &x6, &x3);
+
+ x9 = x6;
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x9, &x9);
+ }
+ secp256k1_fe_mul(&x9, &x9, &x3);
+
+ x11 = x9;
+ for (j=0; j<2; j++) {
+ secp256k1_fe_sqr(&x11, &x11);
+ }
+ secp256k1_fe_mul(&x11, &x11, &x2);
+
+ x22 = x11;
+ for (j=0; j<11; j++) {
+ secp256k1_fe_sqr(&x22, &x22);
+ }
+ secp256k1_fe_mul(&x22, &x22, &x11);
+
+ x44 = x22;
+ for (j=0; j<22; j++) {
+ secp256k1_fe_sqr(&x44, &x44);
+ }
+ secp256k1_fe_mul(&x44, &x44, &x22);
+
+ x88 = x44;
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x88, &x88);
+ }
+ secp256k1_fe_mul(&x88, &x88, &x44);
+
+ x176 = x88;
+ for (j=0; j<88; j++) {
+ secp256k1_fe_sqr(&x176, &x176);
+ }
+ secp256k1_fe_mul(&x176, &x176, &x88);
+
+ x220 = x176;
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x220, &x220);
+ }
+ secp256k1_fe_mul(&x220, &x220, &x44);
+
+ x223 = x220;
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x223, &x223);
+ }
+ secp256k1_fe_mul(&x223, &x223, &x3);
+
+ /* The final result is then assembled using a sliding window over the blocks. */
+
+ t1 = x223;
+ for (j=0; j<23; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
+ secp256k1_fe_mul(&t1, &t1, &x22);
+ for (j=0; j<5; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
+ secp256k1_fe_mul(&t1, &t1, a);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
+ secp256k1_fe_mul(&t1, &t1, &x2);
+ for (j=0; j<2; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
+ secp256k1_fe_mul(r, a, &t1);
+}
+
+static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a) {
+#if defined(USE_FIELD_INV_BUILTIN)
+ secp256k1_fe_inv(r, a);
+#elif defined(USE_FIELD_INV_NUM)
+ secp256k1_num n, m;
+ static const secp256k1_fe negone = SECP256K1_FE_CONST(
+ 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL,
+ 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL, 0xFFFFFC2EUL
+ );
+ /* secp256k1 field prime, value p defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
+ static const unsigned char prime[32] = {
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F
+ };
+ unsigned char b[32];
+ int res;
+ secp256k1_fe c = *a;
+ secp256k1_fe_normalize_var(&c);
+ secp256k1_fe_get_b32(b, &c);
+ secp256k1_num_set_bin(&n, b, 32);
+ secp256k1_num_set_bin(&m, prime, 32);
+ secp256k1_num_mod_inverse(&n, &n, &m);
+ secp256k1_num_get_bin(b, 32, &n);
+ res = secp256k1_fe_set_b32(r, b);
+ (void)res;
+ VERIFY_CHECK(res);
+ /* Verify the result is the (unique) valid inverse using non-GMP code. */
+ secp256k1_fe_mul(&c, &c, r);
+ secp256k1_fe_add(&c, &negone);
+ CHECK(secp256k1_fe_normalizes_to_zero_var(&c));
+#else
+#error "Please select field inverse implementation"
+#endif
+}
+
+static void secp256k1_fe_inv_all_var(secp256k1_fe *r, const secp256k1_fe *a, size_t len) {
+ secp256k1_fe u;
+ size_t i;
+ if (len < 1) {
+ return;
+ }
+
+ VERIFY_CHECK((r + len <= a) || (a + len <= r));
+
+ r[0] = a[0];
+
+ i = 0;
+ while (++i < len) {
+ secp256k1_fe_mul(&r[i], &r[i - 1], &a[i]);
+ }
+
+ secp256k1_fe_inv_var(&u, &r[--i]);
+
+ while (i > 0) {
+ size_t j = i--;
+ secp256k1_fe_mul(&r[j], &r[i], &u);
+ secp256k1_fe_mul(&u, &u, &a[j]);
+ }
+
+ r[0] = u;
+}
+
+static int secp256k1_fe_is_quad_var(const secp256k1_fe *a) {
+#ifndef USE_NUM_NONE
+ unsigned char b[32];
+ secp256k1_num n;
+ secp256k1_num m;
+ /* secp256k1 field prime, value p defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
+ static const unsigned char prime[32] = {
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F
+ };
+
+ secp256k1_fe c = *a;
+ secp256k1_fe_normalize_var(&c);
+ secp256k1_fe_get_b32(b, &c);
+ secp256k1_num_set_bin(&n, b, 32);
+ secp256k1_num_set_bin(&m, prime, 32);
+ return secp256k1_num_jacobi(&n, &m) >= 0;
+#else
+ secp256k1_fe r;
+ return secp256k1_fe_sqrt(&r, a);
+#endif
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/gen_context.c b/crypto/secp256k1/libsecp256k1/src/gen_context.c
new file mode 100644
index 000000000..1835fd491
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/gen_context.c
@@ -0,0 +1,74 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014, 2015 Thomas Daede, Cory Fields *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#define USE_BASIC_CONFIG 1
+
+#include "basic-config.h"
+#include "include/secp256k1.h"
+#include "field_impl.h"
+#include "scalar_impl.h"
+#include "group_impl.h"
+#include "ecmult_gen_impl.h"
+
+static void default_error_callback_fn(const char* str, void* data) {
+ (void)data;
+ fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str);
+ abort();
+}
+
+static const secp256k1_callback default_error_callback = {
+ default_error_callback_fn,
+ NULL
+};
+
+int main(int argc, char **argv) {
+ secp256k1_ecmult_gen_context ctx;
+ int inner;
+ int outer;
+ FILE* fp;
+
+ (void)argc;
+ (void)argv;
+
+ fp = fopen("src/ecmult_static_context.h","w");
+ if (fp == NULL) {
+ fprintf(stderr, "Could not open src/ecmult_static_context.h for writing!\n");
+ return -1;
+ }
+
+ fprintf(fp, "#ifndef _SECP256K1_ECMULT_STATIC_CONTEXT_\n");
+ fprintf(fp, "#define _SECP256K1_ECMULT_STATIC_CONTEXT_\n");
+ fprintf(fp, "#include \"group.h\"\n");
+ fprintf(fp, "#define SC SECP256K1_GE_STORAGE_CONST\n");
+ fprintf(fp, "static const secp256k1_ge_storage secp256k1_ecmult_static_context[64][16] = {\n");
+
+ secp256k1_ecmult_gen_context_init(&ctx);
+ secp256k1_ecmult_gen_context_build(&ctx, &default_error_callback);
+ for(outer = 0; outer != 64; outer++) {
+ fprintf(fp,"{\n");
+ for(inner = 0; inner != 16; inner++) {
+ fprintf(fp," SC(%uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu)", SECP256K1_GE_STORAGE_CONST_GET((*ctx.prec)[outer][inner]));
+ if (inner != 15) {
+ fprintf(fp,",\n");
+ } else {
+ fprintf(fp,"\n");
+ }
+ }
+ if (outer != 63) {
+ fprintf(fp,"},\n");
+ } else {
+ fprintf(fp,"}\n");
+ }
+ }
+ fprintf(fp,"};\n");
+ secp256k1_ecmult_gen_context_clear(&ctx);
+
+ fprintf(fp, "#undef SC\n");
+ fprintf(fp, "#endif\n");
+ fclose(fp);
+
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/group.h b/crypto/secp256k1/libsecp256k1/src/group.h
new file mode 100644
index 000000000..4957b248f
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/group.h
@@ -0,0 +1,144 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_GROUP_
+#define _SECP256K1_GROUP_
+
+#include "num.h"
+#include "field.h"
+
+/** A group element of the secp256k1 curve, in affine coordinates. */
+typedef struct {
+ secp256k1_fe x;
+ secp256k1_fe y;
+ int infinity; /* whether this represents the point at infinity */
+} secp256k1_ge;
+
+#define SECP256K1_GE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), 0}
+#define SECP256K1_GE_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1}
+
+/** A group element of the secp256k1 curve, in jacobian coordinates. */
+typedef struct {
+ secp256k1_fe x; /* actual X: x/z^2 */
+ secp256k1_fe y; /* actual Y: y/z^3 */
+ secp256k1_fe z;
+ int infinity; /* whether this represents the point at infinity */
+} secp256k1_gej;
+
+#define SECP256K1_GEJ_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1), 0}
+#define SECP256K1_GEJ_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1}
+
+typedef struct {
+ secp256k1_fe_storage x;
+ secp256k1_fe_storage y;
+} secp256k1_ge_storage;
+
+#define SECP256K1_GE_STORAGE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_STORAGE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_STORAGE_CONST((i),(j),(k),(l),(m),(n),(o),(p))}
+
+#define SECP256K1_GE_STORAGE_CONST_GET(t) SECP256K1_FE_STORAGE_CONST_GET(t.x), SECP256K1_FE_STORAGE_CONST_GET(t.y)
+
+/** Set a group element equal to the point with given X and Y coordinates */
+static void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y);
+
+/** Set a group element (affine) equal to the point with the given X coordinate
+ * and a Y coordinate that is a quadratic residue modulo p. The return value
+ * is true iff a coordinate with the given X coordinate exists.
+ */
+static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x);
+
+/** Set a group element (affine) equal to the point with the given X coordinate, and given oddness
+ * for Y. Return value indicates whether the result is valid. */
+static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd);
+
+/** Check whether a group element is the point at infinity. */
+static int secp256k1_ge_is_infinity(const secp256k1_ge *a);
+
+/** Check whether a group element is valid (i.e., on the curve). */
+static int secp256k1_ge_is_valid_var(const secp256k1_ge *a);
+
+static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a);
+
+/** Set a group element equal to another which is given in jacobian coordinates */
+static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a);
+
+/** Set a batch of group elements equal to the inputs given in jacobian coordinates */
+static void secp256k1_ge_set_all_gej_var(secp256k1_ge *r, const secp256k1_gej *a, size_t len, const secp256k1_callback *cb);
+
+/** Set a batch of group elements equal to the inputs given in jacobian
+ * coordinates (with known z-ratios). zr must contain the known z-ratios such
+ * that mul(a[i].z, zr[i+1]) == a[i+1].z. zr[0] is ignored. */
+static void secp256k1_ge_set_table_gej_var(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zr, size_t len);
+
+/** Bring a batch inputs given in jacobian coordinates (with known z-ratios) to
+ * the same global z "denominator". zr must contain the known z-ratios such
+ * that mul(a[i].z, zr[i+1]) == a[i+1].z. zr[0] is ignored. The x and y
+ * coordinates of the result are stored in r, the common z coordinate is
+ * stored in globalz. */
+static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp256k1_fe *globalz, const secp256k1_gej *a, const secp256k1_fe *zr);
+
+/** Set a group element (jacobian) equal to the point at infinity. */
+static void secp256k1_gej_set_infinity(secp256k1_gej *r);
+
+/** Set a group element (jacobian) equal to another which is given in affine coordinates. */
+static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a);
+
+/** Compare the X coordinate of a group element (jacobian). */
+static int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a);
+
+/** Set r equal to the inverse of a (i.e., mirrored around the X axis) */
+static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a);
+
+/** Check whether a group element is the point at infinity. */
+static int secp256k1_gej_is_infinity(const secp256k1_gej *a);
+
+/** Check whether a group element's y coordinate is a quadratic residue. */
+static int secp256k1_gej_has_quad_y_var(const secp256k1_gej *a);
+
+/** Set r equal to the double of a. If rzr is not-NULL, r->z = a->z * *rzr (where infinity means an implicit z = 0).
+ * a may not be zero. Constant time. */
+static void secp256k1_gej_double_nonzero(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr);
+
+/** Set r equal to the double of a. If rzr is not-NULL, r->z = a->z * *rzr (where infinity means an implicit z = 0). */
+static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr);
+
+/** Set r equal to the sum of a and b. If rzr is non-NULL, r->z = a->z * *rzr (a cannot be infinity in that case). */
+static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr);
+
+/** Set r equal to the sum of a and b (with b given in affine coordinates, and not infinity). */
+static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b);
+
+/** Set r equal to the sum of a and b (with b given in affine coordinates). This is more efficient
+ than secp256k1_gej_add_var. It is identical to secp256k1_gej_add_ge but without constant-time
+ guarantee, and b is allowed to be infinity. If rzr is non-NULL, r->z = a->z * *rzr (a cannot be infinity in that case). */
+static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr);
+
+/** Set r equal to the sum of a and b (with the inverse of b's Z coordinate passed as bzinv). */
+static void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv);
+
+#ifdef USE_ENDOMORPHISM
+/** Set r to be equal to lambda times a, where lambda is chosen in a way such that this is very fast. */
+static void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a);
+#endif
+
+/** Clear a secp256k1_gej to prevent leaking sensitive information. */
+static void secp256k1_gej_clear(secp256k1_gej *r);
+
+/** Clear a secp256k1_ge to prevent leaking sensitive information. */
+static void secp256k1_ge_clear(secp256k1_ge *r);
+
+/** Convert a group element to the storage type. */
+static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a);
+
+/** Convert a group element back from the storage type. */
+static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a);
+
+/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
+static void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag);
+
+/** Rescale a jacobian point by b which must be non-zero. Constant-time. */
+static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *b);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/group_impl.h b/crypto/secp256k1/libsecp256k1/src/group_impl.h
new file mode 100644
index 000000000..7d723532f
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/group_impl.h
@@ -0,0 +1,700 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_GROUP_IMPL_H_
+#define _SECP256K1_GROUP_IMPL_H_
+
+#include "num.h"
+#include "field.h"
+#include "group.h"
+
+/* These points can be generated in sage as follows:
+ *
+ * 0. Setup a worksheet with the following parameters.
+ * b = 4 # whatever CURVE_B will be set to
+ * F = FiniteField (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F)
+ * C = EllipticCurve ([F (0), F (b)])
+ *
+ * 1. Determine all the small orders available to you. (If there are
+ * no satisfactory ones, go back and change b.)
+ * print C.order().factor(limit=1000)
+ *
+ * 2. Choose an order as one of the prime factors listed in the above step.
+ * (You can also multiply some to get a composite order, though the
+ * tests will crash trying to invert scalars during signing.) We take a
+ * random point and scale it to drop its order to the desired value.
+ * There is some probability this won't work; just try again.
+ * order = 199
+ * P = C.random_point()
+ * P = (int(P.order()) / int(order)) * P
+ * assert(P.order() == order)
+ *
+ * 3. Print the values. You'll need to use a vim macro or something to
+ * split the hex output into 4-byte chunks.
+ * print "%x %x" % P.xy()
+ */
+#if defined(EXHAUSTIVE_TEST_ORDER)
+# if EXHAUSTIVE_TEST_ORDER == 199
+const secp256k1_ge secp256k1_ge_const_g = SECP256K1_GE_CONST(
+ 0xFA7CC9A7, 0x0737F2DB, 0xA749DD39, 0x2B4FB069,
+ 0x3B017A7D, 0xA808C2F1, 0xFB12940C, 0x9EA66C18,
+ 0x78AC123A, 0x5ED8AEF3, 0x8732BC91, 0x1F3A2868,
+ 0x48DF246C, 0x808DAE72, 0xCFE52572, 0x7F0501ED
+);
+
+const int CURVE_B = 4;
+# elif EXHAUSTIVE_TEST_ORDER == 13
+const secp256k1_ge secp256k1_ge_const_g = SECP256K1_GE_CONST(
+ 0xedc60018, 0xa51a786b, 0x2ea91f4d, 0x4c9416c0,
+ 0x9de54c3b, 0xa1316554, 0x6cf4345c, 0x7277ef15,
+ 0x54cb1b6b, 0xdc8c1273, 0x087844ea, 0x43f4603e,
+ 0x0eaf9a43, 0xf6effe55, 0x939f806d, 0x37adf8ac
+);
+const int CURVE_B = 2;
+# else
+# error No known generator for the specified exhaustive test group order.
+# endif
+#else
+/** Generator for secp256k1, value 'g' defined in
+ * "Standards for Efficient Cryptography" (SEC2) 2.7.1.
+ */
+static const secp256k1_ge secp256k1_ge_const_g = SECP256K1_GE_CONST(
+ 0x79BE667EUL, 0xF9DCBBACUL, 0x55A06295UL, 0xCE870B07UL,
+ 0x029BFCDBUL, 0x2DCE28D9UL, 0x59F2815BUL, 0x16F81798UL,
+ 0x483ADA77UL, 0x26A3C465UL, 0x5DA4FBFCUL, 0x0E1108A8UL,
+ 0xFD17B448UL, 0xA6855419UL, 0x9C47D08FUL, 0xFB10D4B8UL
+);
+
+const int CURVE_B = 7;
+#endif
+
+static void secp256k1_ge_set_gej_zinv(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zi) {
+ secp256k1_fe zi2;
+ secp256k1_fe zi3;
+ secp256k1_fe_sqr(&zi2, zi);
+ secp256k1_fe_mul(&zi3, &zi2, zi);
+ secp256k1_fe_mul(&r->x, &a->x, &zi2);
+ secp256k1_fe_mul(&r->y, &a->y, &zi3);
+ r->infinity = a->infinity;
+}
+
+static void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y) {
+ r->infinity = 0;
+ r->x = *x;
+ r->y = *y;
+}
+
+static int secp256k1_ge_is_infinity(const secp256k1_ge *a) {
+ return a->infinity;
+}
+
+static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a) {
+ *r = *a;
+ secp256k1_fe_normalize_weak(&r->y);
+ secp256k1_fe_negate(&r->y, &r->y, 1);
+}
+
+static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a) {
+ secp256k1_fe z2, z3;
+ r->infinity = a->infinity;
+ secp256k1_fe_inv(&a->z, &a->z);
+ secp256k1_fe_sqr(&z2, &a->z);
+ secp256k1_fe_mul(&z3, &a->z, &z2);
+ secp256k1_fe_mul(&a->x, &a->x, &z2);
+ secp256k1_fe_mul(&a->y, &a->y, &z3);
+ secp256k1_fe_set_int(&a->z, 1);
+ r->x = a->x;
+ r->y = a->y;
+}
+
+static void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a) {
+ secp256k1_fe z2, z3;
+ r->infinity = a->infinity;
+ if (a->infinity) {
+ return;
+ }
+ secp256k1_fe_inv_var(&a->z, &a->z);
+ secp256k1_fe_sqr(&z2, &a->z);
+ secp256k1_fe_mul(&z3, &a->z, &z2);
+ secp256k1_fe_mul(&a->x, &a->x, &z2);
+ secp256k1_fe_mul(&a->y, &a->y, &z3);
+ secp256k1_fe_set_int(&a->z, 1);
+ r->x = a->x;
+ r->y = a->y;
+}
+
+static void secp256k1_ge_set_all_gej_var(secp256k1_ge *r, const secp256k1_gej *a, size_t len, const secp256k1_callback *cb) {
+ secp256k1_fe *az;
+ secp256k1_fe *azi;
+ size_t i;
+ size_t count = 0;
+ az = (secp256k1_fe *)checked_malloc(cb, sizeof(secp256k1_fe) * len);
+ for (i = 0; i < len; i++) {
+ if (!a[i].infinity) {
+ az[count++] = a[i].z;
+ }
+ }
+
+ azi = (secp256k1_fe *)checked_malloc(cb, sizeof(secp256k1_fe) * count);
+ secp256k1_fe_inv_all_var(azi, az, count);
+ free(az);
+
+ count = 0;
+ for (i = 0; i < len; i++) {
+ r[i].infinity = a[i].infinity;
+ if (!a[i].infinity) {
+ secp256k1_ge_set_gej_zinv(&r[i], &a[i], &azi[count++]);
+ }
+ }
+ free(azi);
+}
+
+static void secp256k1_ge_set_table_gej_var(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zr, size_t len) {
+ size_t i = len - 1;
+ secp256k1_fe zi;
+
+ if (len > 0) {
+ /* Compute the inverse of the last z coordinate, and use it to compute the last affine output. */
+ secp256k1_fe_inv(&zi, &a[i].z);
+ secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zi);
+
+ /* Work out way backwards, using the z-ratios to scale the x/y values. */
+ while (i > 0) {
+ secp256k1_fe_mul(&zi, &zi, &zr[i]);
+ i--;
+ secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zi);
+ }
+ }
+}
+
+static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp256k1_fe *globalz, const secp256k1_gej *a, const secp256k1_fe *zr) {
+ size_t i = len - 1;
+ secp256k1_fe zs;
+
+ if (len > 0) {
+ /* The z of the final point gives us the "global Z" for the table. */
+ r[i].x = a[i].x;
+ r[i].y = a[i].y;
+ *globalz = a[i].z;
+ r[i].infinity = 0;
+ zs = zr[i];
+
+ /* Work our way backwards, using the z-ratios to scale the x/y values. */
+ while (i > 0) {
+ if (i != len - 1) {
+ secp256k1_fe_mul(&zs, &zs, &zr[i]);
+ }
+ i--;
+ secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zs);
+ }
+ }
+}
+
+static void secp256k1_gej_set_infinity(secp256k1_gej *r) {
+ r->infinity = 1;
+ secp256k1_fe_clear(&r->x);
+ secp256k1_fe_clear(&r->y);
+ secp256k1_fe_clear(&r->z);
+}
+
+static void secp256k1_gej_clear(secp256k1_gej *r) {
+ r->infinity = 0;
+ secp256k1_fe_clear(&r->x);
+ secp256k1_fe_clear(&r->y);
+ secp256k1_fe_clear(&r->z);
+}
+
+static void secp256k1_ge_clear(secp256k1_ge *r) {
+ r->infinity = 0;
+ secp256k1_fe_clear(&r->x);
+ secp256k1_fe_clear(&r->y);
+}
+
+static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x) {
+ secp256k1_fe x2, x3, c;
+ r->x = *x;
+ secp256k1_fe_sqr(&x2, x);
+ secp256k1_fe_mul(&x3, x, &x2);
+ r->infinity = 0;
+ secp256k1_fe_set_int(&c, CURVE_B);
+ secp256k1_fe_add(&c, &x3);
+ return secp256k1_fe_sqrt(&r->y, &c);
+}
+
+static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd) {
+ if (!secp256k1_ge_set_xquad(r, x)) {
+ return 0;
+ }
+ secp256k1_fe_normalize_var(&r->y);
+ if (secp256k1_fe_is_odd(&r->y) != odd) {
+ secp256k1_fe_negate(&r->y, &r->y, 1);
+ }
+ return 1;
+
+}
+
+static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a) {
+ r->infinity = a->infinity;
+ r->x = a->x;
+ r->y = a->y;
+ secp256k1_fe_set_int(&r->z, 1);
+}
+
+static int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a) {
+ secp256k1_fe r, r2;
+ VERIFY_CHECK(!a->infinity);
+ secp256k1_fe_sqr(&r, &a->z); secp256k1_fe_mul(&r, &r, x);
+ r2 = a->x; secp256k1_fe_normalize_weak(&r2);
+ return secp256k1_fe_equal_var(&r, &r2);
+}
+
+static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a) {
+ r->infinity = a->infinity;
+ r->x = a->x;
+ r->y = a->y;
+ r->z = a->z;
+ secp256k1_fe_normalize_weak(&r->y);
+ secp256k1_fe_negate(&r->y, &r->y, 1);
+}
+
+static int secp256k1_gej_is_infinity(const secp256k1_gej *a) {
+ return a->infinity;
+}
+
+static int secp256k1_gej_is_valid_var(const secp256k1_gej *a) {
+ secp256k1_fe y2, x3, z2, z6;
+ if (a->infinity) {
+ return 0;
+ }
+ /** y^2 = x^3 + 7
+ * (Y/Z^3)^2 = (X/Z^2)^3 + 7
+ * Y^2 / Z^6 = X^3 / Z^6 + 7
+ * Y^2 = X^3 + 7*Z^6
+ */
+ secp256k1_fe_sqr(&y2, &a->y);
+ secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);
+ secp256k1_fe_sqr(&z2, &a->z);
+ secp256k1_fe_sqr(&z6, &z2); secp256k1_fe_mul(&z6, &z6, &z2);
+ secp256k1_fe_mul_int(&z6, CURVE_B);
+ secp256k1_fe_add(&x3, &z6);
+ secp256k1_fe_normalize_weak(&x3);
+ return secp256k1_fe_equal_var(&y2, &x3);
+}
+
+static int secp256k1_ge_is_valid_var(const secp256k1_ge *a) {
+ secp256k1_fe y2, x3, c;
+ if (a->infinity) {
+ return 0;
+ }
+ /* y^2 = x^3 + 7 */
+ secp256k1_fe_sqr(&y2, &a->y);
+ secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);
+ secp256k1_fe_set_int(&c, CURVE_B);
+ secp256k1_fe_add(&x3, &c);
+ secp256k1_fe_normalize_weak(&x3);
+ return secp256k1_fe_equal_var(&y2, &x3);
+}
+
+static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) {
+ /* Operations: 3 mul, 4 sqr, 0 normalize, 12 mul_int/add/negate.
+ *
+ * Note that there is an implementation described at
+ * https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
+ * which trades a multiply for a square, but in practice this is actually slower,
+ * mainly because it requires more normalizations.
+ */
+ secp256k1_fe t1,t2,t3,t4;
+ /** For secp256k1, 2Q is infinity if and only if Q is infinity. This is because if 2Q = infinity,
+ * Q must equal -Q, or that Q.y == -(Q.y), or Q.y is 0. For a point on y^2 = x^3 + 7 to have
+ * y=0, x^3 must be -7 mod p. However, -7 has no cube root mod p.
+ *
+ * Having said this, if this function receives a point on a sextic twist, e.g. by
+ * a fault attack, it is possible for y to be 0. This happens for y^2 = x^3 + 6,
+ * since -6 does have a cube root mod p. For this point, this function will not set
+ * the infinity flag even though the point doubles to infinity, and the result
+ * point will be gibberish (z = 0 but infinity = 0).
+ */
+ r->infinity = a->infinity;
+ if (r->infinity) {
+ if (rzr != NULL) {
+ secp256k1_fe_set_int(rzr, 1);
+ }
+ return;
+ }
+
+ if (rzr != NULL) {
+ *rzr = a->y;
+ secp256k1_fe_normalize_weak(rzr);
+ secp256k1_fe_mul_int(rzr, 2);
+ }
+
+ secp256k1_fe_mul(&r->z, &a->z, &a->y);
+ secp256k1_fe_mul_int(&r->z, 2); /* Z' = 2*Y*Z (2) */
+ secp256k1_fe_sqr(&t1, &a->x);
+ secp256k1_fe_mul_int(&t1, 3); /* T1 = 3*X^2 (3) */
+ secp256k1_fe_sqr(&t2, &t1); /* T2 = 9*X^4 (1) */
+ secp256k1_fe_sqr(&t3, &a->y);
+ secp256k1_fe_mul_int(&t3, 2); /* T3 = 2*Y^2 (2) */
+ secp256k1_fe_sqr(&t4, &t3);
+ secp256k1_fe_mul_int(&t4, 2); /* T4 = 8*Y^4 (2) */
+ secp256k1_fe_mul(&t3, &t3, &a->x); /* T3 = 2*X*Y^2 (1) */
+ r->x = t3;
+ secp256k1_fe_mul_int(&r->x, 4); /* X' = 8*X*Y^2 (4) */
+ secp256k1_fe_negate(&r->x, &r->x, 4); /* X' = -8*X*Y^2 (5) */
+ secp256k1_fe_add(&r->x, &t2); /* X' = 9*X^4 - 8*X*Y^2 (6) */
+ secp256k1_fe_negate(&t2, &t2, 1); /* T2 = -9*X^4 (2) */
+ secp256k1_fe_mul_int(&t3, 6); /* T3 = 12*X*Y^2 (6) */
+ secp256k1_fe_add(&t3, &t2); /* T3 = 12*X*Y^2 - 9*X^4 (8) */
+ secp256k1_fe_mul(&r->y, &t1, &t3); /* Y' = 36*X^3*Y^2 - 27*X^6 (1) */
+ secp256k1_fe_negate(&t2, &t4, 2); /* T2 = -8*Y^4 (3) */
+ secp256k1_fe_add(&r->y, &t2); /* Y' = 36*X^3*Y^2 - 27*X^6 - 8*Y^4 (4) */
+}
+
+static SECP256K1_INLINE void secp256k1_gej_double_nonzero(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) {
+ VERIFY_CHECK(!secp256k1_gej_is_infinity(a));
+ secp256k1_gej_double_var(r, a, rzr);
+}
+
+static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr) {
+ /* Operations: 12 mul, 4 sqr, 2 normalize, 12 mul_int/add/negate */
+ secp256k1_fe z22, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
+
+ if (a->infinity) {
+ VERIFY_CHECK(rzr == NULL);
+ *r = *b;
+ return;
+ }
+
+ if (b->infinity) {
+ if (rzr != NULL) {
+ secp256k1_fe_set_int(rzr, 1);
+ }
+ *r = *a;
+ return;
+ }
+
+ r->infinity = 0;
+ secp256k1_fe_sqr(&z22, &b->z);
+ secp256k1_fe_sqr(&z12, &a->z);
+ secp256k1_fe_mul(&u1, &a->x, &z22);
+ secp256k1_fe_mul(&u2, &b->x, &z12);
+ secp256k1_fe_mul(&s1, &a->y, &z22); secp256k1_fe_mul(&s1, &s1, &b->z);
+ secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);
+ secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);
+ secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2);
+ if (secp256k1_fe_normalizes_to_zero_var(&h)) {
+ if (secp256k1_fe_normalizes_to_zero_var(&i)) {
+ secp256k1_gej_double_var(r, a, rzr);
+ } else {
+ if (rzr != NULL) {
+ secp256k1_fe_set_int(rzr, 0);
+ }
+ r->infinity = 1;
+ }
+ return;
+ }
+ secp256k1_fe_sqr(&i2, &i);
+ secp256k1_fe_sqr(&h2, &h);
+ secp256k1_fe_mul(&h3, &h, &h2);
+ secp256k1_fe_mul(&h, &h, &b->z);
+ if (rzr != NULL) {
+ *rzr = h;
+ }
+ secp256k1_fe_mul(&r->z, &a->z, &h);
+ secp256k1_fe_mul(&t, &u1, &h2);
+ r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2);
+ secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i);
+ secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1);
+ secp256k1_fe_add(&r->y, &h3);
+}
+
+static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr) {
+ /* 8 mul, 3 sqr, 4 normalize, 12 mul_int/add/negate */
+ secp256k1_fe z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
+ if (a->infinity) {
+ VERIFY_CHECK(rzr == NULL);
+ secp256k1_gej_set_ge(r, b);
+ return;
+ }
+ if (b->infinity) {
+ if (rzr != NULL) {
+ secp256k1_fe_set_int(rzr, 1);
+ }
+ *r = *a;
+ return;
+ }
+ r->infinity = 0;
+
+ secp256k1_fe_sqr(&z12, &a->z);
+ u1 = a->x; secp256k1_fe_normalize_weak(&u1);
+ secp256k1_fe_mul(&u2, &b->x, &z12);
+ s1 = a->y; secp256k1_fe_normalize_weak(&s1);
+ secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);
+ secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);
+ secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2);
+ if (secp256k1_fe_normalizes_to_zero_var(&h)) {
+ if (secp256k1_fe_normalizes_to_zero_var(&i)) {
+ secp256k1_gej_double_var(r, a, rzr);
+ } else {
+ if (rzr != NULL) {
+ secp256k1_fe_set_int(rzr, 0);
+ }
+ r->infinity = 1;
+ }
+ return;
+ }
+ secp256k1_fe_sqr(&i2, &i);
+ secp256k1_fe_sqr(&h2, &h);
+ secp256k1_fe_mul(&h3, &h, &h2);
+ if (rzr != NULL) {
+ *rzr = h;
+ }
+ secp256k1_fe_mul(&r->z, &a->z, &h);
+ secp256k1_fe_mul(&t, &u1, &h2);
+ r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2);
+ secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i);
+ secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1);
+ secp256k1_fe_add(&r->y, &h3);
+}
+
+static void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv) {
+ /* 9 mul, 3 sqr, 4 normalize, 12 mul_int/add/negate */
+ secp256k1_fe az, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
+
+ if (b->infinity) {
+ *r = *a;
+ return;
+ }
+ if (a->infinity) {
+ secp256k1_fe bzinv2, bzinv3;
+ r->infinity = b->infinity;
+ secp256k1_fe_sqr(&bzinv2, bzinv);
+ secp256k1_fe_mul(&bzinv3, &bzinv2, bzinv);
+ secp256k1_fe_mul(&r->x, &b->x, &bzinv2);
+ secp256k1_fe_mul(&r->y, &b->y, &bzinv3);
+ secp256k1_fe_set_int(&r->z, 1);
+ return;
+ }
+ r->infinity = 0;
+
+ /** We need to calculate (rx,ry,rz) = (ax,ay,az) + (bx,by,1/bzinv). Due to
+ * secp256k1's isomorphism we can multiply the Z coordinates on both sides
+ * by bzinv, and get: (rx,ry,rz*bzinv) = (ax,ay,az*bzinv) + (bx,by,1).
+ * This means that (rx,ry,rz) can be calculated as
+ * (ax,ay,az*bzinv) + (bx,by,1), when not applying the bzinv factor to rz.
+ * The variable az below holds the modified Z coordinate for a, which is used
+ * for the computation of rx and ry, but not for rz.
+ */
+ secp256k1_fe_mul(&az, &a->z, bzinv);
+
+ secp256k1_fe_sqr(&z12, &az);
+ u1 = a->x; secp256k1_fe_normalize_weak(&u1);
+ secp256k1_fe_mul(&u2, &b->x, &z12);
+ s1 = a->y; secp256k1_fe_normalize_weak(&s1);
+ secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &az);
+ secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);
+ secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2);
+ if (secp256k1_fe_normalizes_to_zero_var(&h)) {
+ if (secp256k1_fe_normalizes_to_zero_var(&i)) {
+ secp256k1_gej_double_var(r, a, NULL);
+ } else {
+ r->infinity = 1;
+ }
+ return;
+ }
+ secp256k1_fe_sqr(&i2, &i);
+ secp256k1_fe_sqr(&h2, &h);
+ secp256k1_fe_mul(&h3, &h, &h2);
+ r->z = a->z; secp256k1_fe_mul(&r->z, &r->z, &h);
+ secp256k1_fe_mul(&t, &u1, &h2);
+ r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2);
+ secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i);
+ secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1);
+ secp256k1_fe_add(&r->y, &h3);
+}
+
+
+static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b) {
+ /* Operations: 7 mul, 5 sqr, 4 normalize, 21 mul_int/add/negate/cmov */
+ static const secp256k1_fe fe_1 = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1);
+ secp256k1_fe zz, u1, u2, s1, s2, t, tt, m, n, q, rr;
+ secp256k1_fe m_alt, rr_alt;
+ int infinity, degenerate;
+ VERIFY_CHECK(!b->infinity);
+ VERIFY_CHECK(a->infinity == 0 || a->infinity == 1);
+
+ /** In:
+ * Eric Brier and Marc Joye, Weierstrass Elliptic Curves and Side-Channel Attacks.
+ * In D. Naccache and P. Paillier, Eds., Public Key Cryptography, vol. 2274 of Lecture Notes in Computer Science, pages 335-345. Springer-Verlag, 2002.
+ * we find as solution for a unified addition/doubling formula:
+ * lambda = ((x1 + x2)^2 - x1 * x2 + a) / (y1 + y2), with a = 0 for secp256k1's curve equation.
+ * x3 = lambda^2 - (x1 + x2)
+ * 2*y3 = lambda * (x1 + x2 - 2 * x3) - (y1 + y2).
+ *
+ * Substituting x_i = Xi / Zi^2 and yi = Yi / Zi^3, for i=1,2,3, gives:
+ * U1 = X1*Z2^2, U2 = X2*Z1^2
+ * S1 = Y1*Z2^3, S2 = Y2*Z1^3
+ * Z = Z1*Z2
+ * T = U1+U2
+ * M = S1+S2
+ * Q = T*M^2
+ * R = T^2-U1*U2
+ * X3 = 4*(R^2-Q)
+ * Y3 = 4*(R*(3*Q-2*R^2)-M^4)
+ * Z3 = 2*M*Z
+ * (Note that the paper uses xi = Xi / Zi and yi = Yi / Zi instead.)
+ *
+ * This formula has the benefit of being the same for both addition
+ * of distinct points and doubling. However, it breaks down in the
+ * case that either point is infinity, or that y1 = -y2. We handle
+ * these cases in the following ways:
+ *
+ * - If b is infinity we simply bail by means of a VERIFY_CHECK.
+ *
+ * - If a is infinity, we detect this, and at the end of the
+ * computation replace the result (which will be meaningless,
+ * but we compute to be constant-time) with b.x : b.y : 1.
+ *
+ * - If a = -b, we have y1 = -y2, which is a degenerate case.
+ * But here the answer is infinity, so we simply set the
+ * infinity flag of the result, overriding the computed values
+ * without even needing to cmov.
+ *
+ * - If y1 = -y2 but x1 != x2, which does occur thanks to certain
+ * properties of our curve (specifically, 1 has nontrivial cube
+ * roots in our field, and the curve equation has no x coefficient)
+ * then the answer is not infinity but also not given by the above
+ * equation. In this case, we cmov in place an alternate expression
+ * for lambda. Specifically (y1 - y2)/(x1 - x2). Where both these
+ * expressions for lambda are defined, they are equal, and can be
+ * obtained from each other by multiplication by (y1 + y2)/(y1 + y2)
+ * then substitution of x^3 + 7 for y^2 (using the curve equation).
+ * For all pairs of nonzero points (a, b) at least one is defined,
+ * so this covers everything.
+ */
+
+ secp256k1_fe_sqr(&zz, &a->z); /* z = Z1^2 */
+ u1 = a->x; secp256k1_fe_normalize_weak(&u1); /* u1 = U1 = X1*Z2^2 (1) */
+ secp256k1_fe_mul(&u2, &b->x, &zz); /* u2 = U2 = X2*Z1^2 (1) */
+ s1 = a->y; secp256k1_fe_normalize_weak(&s1); /* s1 = S1 = Y1*Z2^3 (1) */
+ secp256k1_fe_mul(&s2, &b->y, &zz); /* s2 = Y2*Z1^2 (1) */
+ secp256k1_fe_mul(&s2, &s2, &a->z); /* s2 = S2 = Y2*Z1^3 (1) */
+ t = u1; secp256k1_fe_add(&t, &u2); /* t = T = U1+U2 (2) */
+ m = s1; secp256k1_fe_add(&m, &s2); /* m = M = S1+S2 (2) */
+ secp256k1_fe_sqr(&rr, &t); /* rr = T^2 (1) */
+ secp256k1_fe_negate(&m_alt, &u2, 1); /* Malt = -X2*Z1^2 */
+ secp256k1_fe_mul(&tt, &u1, &m_alt); /* tt = -U1*U2 (2) */
+ secp256k1_fe_add(&rr, &tt); /* rr = R = T^2-U1*U2 (3) */
+ /** If lambda = R/M = 0/0 we have a problem (except in the "trivial"
+ * case that Z = z1z2 = 0, and this is special-cased later on). */
+ degenerate = secp256k1_fe_normalizes_to_zero(&m) &
+ secp256k1_fe_normalizes_to_zero(&rr);
+ /* This only occurs when y1 == -y2 and x1^3 == x2^3, but x1 != x2.
+ * This means either x1 == beta*x2 or beta*x1 == x2, where beta is
+ * a nontrivial cube root of one. In either case, an alternate
+ * non-indeterminate expression for lambda is (y1 - y2)/(x1 - x2),
+ * so we set R/M equal to this. */
+ rr_alt = s1;
+ secp256k1_fe_mul_int(&rr_alt, 2); /* rr = Y1*Z2^3 - Y2*Z1^3 (2) */
+ secp256k1_fe_add(&m_alt, &u1); /* Malt = X1*Z2^2 - X2*Z1^2 */
+
+ secp256k1_fe_cmov(&rr_alt, &rr, !degenerate);
+ secp256k1_fe_cmov(&m_alt, &m, !degenerate);
+ /* Now Ralt / Malt = lambda and is guaranteed not to be 0/0.
+ * From here on out Ralt and Malt represent the numerator
+ * and denominator of lambda; R and M represent the explicit
+ * expressions x1^2 + x2^2 + x1x2 and y1 + y2. */
+ secp256k1_fe_sqr(&n, &m_alt); /* n = Malt^2 (1) */
+ secp256k1_fe_mul(&q, &n, &t); /* q = Q = T*Malt^2 (1) */
+ /* These two lines use the observation that either M == Malt or M == 0,
+ * so M^3 * Malt is either Malt^4 (which is computed by squaring), or
+ * zero (which is "computed" by cmov). So the cost is one squaring
+ * versus two multiplications. */
+ secp256k1_fe_sqr(&n, &n);
+ secp256k1_fe_cmov(&n, &m, degenerate); /* n = M^3 * Malt (2) */
+ secp256k1_fe_sqr(&t, &rr_alt); /* t = Ralt^2 (1) */
+ secp256k1_fe_mul(&r->z, &a->z, &m_alt); /* r->z = Malt*Z (1) */
+ infinity = secp256k1_fe_normalizes_to_zero(&r->z) * (1 - a->infinity);
+ secp256k1_fe_mul_int(&r->z, 2); /* r->z = Z3 = 2*Malt*Z (2) */
+ secp256k1_fe_negate(&q, &q, 1); /* q = -Q (2) */
+ secp256k1_fe_add(&t, &q); /* t = Ralt^2-Q (3) */
+ secp256k1_fe_normalize_weak(&t);
+ r->x = t; /* r->x = Ralt^2-Q (1) */
+ secp256k1_fe_mul_int(&t, 2); /* t = 2*x3 (2) */
+ secp256k1_fe_add(&t, &q); /* t = 2*x3 - Q: (4) */
+ secp256k1_fe_mul(&t, &t, &rr_alt); /* t = Ralt*(2*x3 - Q) (1) */
+ secp256k1_fe_add(&t, &n); /* t = Ralt*(2*x3 - Q) + M^3*Malt (3) */
+ secp256k1_fe_negate(&r->y, &t, 3); /* r->y = Ralt*(Q - 2x3) - M^3*Malt (4) */
+ secp256k1_fe_normalize_weak(&r->y);
+ secp256k1_fe_mul_int(&r->x, 4); /* r->x = X3 = 4*(Ralt^2-Q) */
+ secp256k1_fe_mul_int(&r->y, 4); /* r->y = Y3 = 4*Ralt*(Q - 2x3) - 4*M^3*Malt (4) */
+
+ /** In case a->infinity == 1, replace r with (b->x, b->y, 1). */
+ secp256k1_fe_cmov(&r->x, &b->x, a->infinity);
+ secp256k1_fe_cmov(&r->y, &b->y, a->infinity);
+ secp256k1_fe_cmov(&r->z, &fe_1, a->infinity);
+ r->infinity = infinity;
+}
+
+static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *s) {
+ /* Operations: 4 mul, 1 sqr */
+ secp256k1_fe zz;
+ VERIFY_CHECK(!secp256k1_fe_is_zero(s));
+ secp256k1_fe_sqr(&zz, s);
+ secp256k1_fe_mul(&r->x, &r->x, &zz); /* r->x *= s^2 */
+ secp256k1_fe_mul(&r->y, &r->y, &zz);
+ secp256k1_fe_mul(&r->y, &r->y, s); /* r->y *= s^3 */
+ secp256k1_fe_mul(&r->z, &r->z, s); /* r->z *= s */
+}
+
+static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a) {
+ secp256k1_fe x, y;
+ VERIFY_CHECK(!a->infinity);
+ x = a->x;
+ secp256k1_fe_normalize(&x);
+ y = a->y;
+ secp256k1_fe_normalize(&y);
+ secp256k1_fe_to_storage(&r->x, &x);
+ secp256k1_fe_to_storage(&r->y, &y);
+}
+
+static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a) {
+ secp256k1_fe_from_storage(&r->x, &a->x);
+ secp256k1_fe_from_storage(&r->y, &a->y);
+ r->infinity = 0;
+}
+
+static SECP256K1_INLINE void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag) {
+ secp256k1_fe_storage_cmov(&r->x, &a->x, flag);
+ secp256k1_fe_storage_cmov(&r->y, &a->y, flag);
+}
+
+#ifdef USE_ENDOMORPHISM
+static void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a) {
+ static const secp256k1_fe beta = SECP256K1_FE_CONST(
+ 0x7ae96a2bul, 0x657c0710ul, 0x6e64479eul, 0xac3434e9ul,
+ 0x9cf04975ul, 0x12f58995ul, 0xc1396c28ul, 0x719501eeul
+ );
+ *r = *a;
+ secp256k1_fe_mul(&r->x, &r->x, &beta);
+}
+#endif
+
+static int secp256k1_gej_has_quad_y_var(const secp256k1_gej *a) {
+ secp256k1_fe yz;
+
+ if (a->infinity) {
+ return 0;
+ }
+
+ /* We rely on the fact that the Jacobi symbol of 1 / a->z^3 is the same as
+ * that of a->z. Thus a->y / a->z^3 is a quadratic residue iff a->y * a->z
+ is */
+ secp256k1_fe_mul(&yz, &a->y, &a->z);
+ return secp256k1_fe_is_quad_var(&yz);
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/hash.h b/crypto/secp256k1/libsecp256k1/src/hash.h
new file mode 100644
index 000000000..fca98cab9
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/hash.h
@@ -0,0 +1,41 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_HASH_
+#define _SECP256K1_HASH_
+
+#include <stdlib.h>
+#include <stdint.h>
+
+typedef struct {
+ uint32_t s[8];
+ uint32_t buf[16]; /* In big endian */
+ size_t bytes;
+} secp256k1_sha256_t;
+
+static void secp256k1_sha256_initialize(secp256k1_sha256_t *hash);
+static void secp256k1_sha256_write(secp256k1_sha256_t *hash, const unsigned char *data, size_t size);
+static void secp256k1_sha256_finalize(secp256k1_sha256_t *hash, unsigned char *out32);
+
+typedef struct {
+ secp256k1_sha256_t inner, outer;
+} secp256k1_hmac_sha256_t;
+
+static void secp256k1_hmac_sha256_initialize(secp256k1_hmac_sha256_t *hash, const unsigned char *key, size_t size);
+static void secp256k1_hmac_sha256_write(secp256k1_hmac_sha256_t *hash, const unsigned char *data, size_t size);
+static void secp256k1_hmac_sha256_finalize(secp256k1_hmac_sha256_t *hash, unsigned char *out32);
+
+typedef struct {
+ unsigned char v[32];
+ unsigned char k[32];
+ int retry;
+} secp256k1_rfc6979_hmac_sha256_t;
+
+static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen);
+static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen);
+static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/hash_impl.h b/crypto/secp256k1/libsecp256k1/src/hash_impl.h
new file mode 100644
index 000000000..b47e65f83
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/hash_impl.h
@@ -0,0 +1,281 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_HASH_IMPL_H_
+#define _SECP256K1_HASH_IMPL_H_
+
+#include "hash.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#define Ch(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
+#define Maj(x,y,z) (((x) & (y)) | ((z) & ((x) | (y))))
+#define Sigma0(x) (((x) >> 2 | (x) << 30) ^ ((x) >> 13 | (x) << 19) ^ ((x) >> 22 | (x) << 10))
+#define Sigma1(x) (((x) >> 6 | (x) << 26) ^ ((x) >> 11 | (x) << 21) ^ ((x) >> 25 | (x) << 7))
+#define sigma0(x) (((x) >> 7 | (x) << 25) ^ ((x) >> 18 | (x) << 14) ^ ((x) >> 3))
+#define sigma1(x) (((x) >> 17 | (x) << 15) ^ ((x) >> 19 | (x) << 13) ^ ((x) >> 10))
+
+#define Round(a,b,c,d,e,f,g,h,k,w) do { \
+ uint32_t t1 = (h) + Sigma1(e) + Ch((e), (f), (g)) + (k) + (w); \
+ uint32_t t2 = Sigma0(a) + Maj((a), (b), (c)); \
+ (d) += t1; \
+ (h) = t1 + t2; \
+} while(0)
+
+#ifdef WORDS_BIGENDIAN
+#define BE32(x) (x)
+#else
+#define BE32(p) ((((p) & 0xFF) << 24) | (((p) & 0xFF00) << 8) | (((p) & 0xFF0000) >> 8) | (((p) & 0xFF000000) >> 24))
+#endif
+
+static void secp256k1_sha256_initialize(secp256k1_sha256_t *hash) {
+ hash->s[0] = 0x6a09e667ul;
+ hash->s[1] = 0xbb67ae85ul;
+ hash->s[2] = 0x3c6ef372ul;
+ hash->s[3] = 0xa54ff53aul;
+ hash->s[4] = 0x510e527ful;
+ hash->s[5] = 0x9b05688cul;
+ hash->s[6] = 0x1f83d9abul;
+ hash->s[7] = 0x5be0cd19ul;
+ hash->bytes = 0;
+}
+
+/** Perform one SHA-256 transformation, processing 16 big endian 32-bit words. */
+static void secp256k1_sha256_transform(uint32_t* s, const uint32_t* chunk) {
+ uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7];
+ uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
+
+ Round(a, b, c, d, e, f, g, h, 0x428a2f98, w0 = BE32(chunk[0]));
+ Round(h, a, b, c, d, e, f, g, 0x71374491, w1 = BE32(chunk[1]));
+ Round(g, h, a, b, c, d, e, f, 0xb5c0fbcf, w2 = BE32(chunk[2]));
+ Round(f, g, h, a, b, c, d, e, 0xe9b5dba5, w3 = BE32(chunk[3]));
+ Round(e, f, g, h, a, b, c, d, 0x3956c25b, w4 = BE32(chunk[4]));
+ Round(d, e, f, g, h, a, b, c, 0x59f111f1, w5 = BE32(chunk[5]));
+ Round(c, d, e, f, g, h, a, b, 0x923f82a4, w6 = BE32(chunk[6]));
+ Round(b, c, d, e, f, g, h, a, 0xab1c5ed5, w7 = BE32(chunk[7]));
+ Round(a, b, c, d, e, f, g, h, 0xd807aa98, w8 = BE32(chunk[8]));
+ Round(h, a, b, c, d, e, f, g, 0x12835b01, w9 = BE32(chunk[9]));
+ Round(g, h, a, b, c, d, e, f, 0x243185be, w10 = BE32(chunk[10]));
+ Round(f, g, h, a, b, c, d, e, 0x550c7dc3, w11 = BE32(chunk[11]));
+ Round(e, f, g, h, a, b, c, d, 0x72be5d74, w12 = BE32(chunk[12]));
+ Round(d, e, f, g, h, a, b, c, 0x80deb1fe, w13 = BE32(chunk[13]));
+ Round(c, d, e, f, g, h, a, b, 0x9bdc06a7, w14 = BE32(chunk[14]));
+ Round(b, c, d, e, f, g, h, a, 0xc19bf174, w15 = BE32(chunk[15]));
+
+ Round(a, b, c, d, e, f, g, h, 0xe49b69c1, w0 += sigma1(w14) + w9 + sigma0(w1));
+ Round(h, a, b, c, d, e, f, g, 0xefbe4786, w1 += sigma1(w15) + w10 + sigma0(w2));
+ Round(g, h, a, b, c, d, e, f, 0x0fc19dc6, w2 += sigma1(w0) + w11 + sigma0(w3));
+ Round(f, g, h, a, b, c, d, e, 0x240ca1cc, w3 += sigma1(w1) + w12 + sigma0(w4));
+ Round(e, f, g, h, a, b, c, d, 0x2de92c6f, w4 += sigma1(w2) + w13 + sigma0(w5));
+ Round(d, e, f, g, h, a, b, c, 0x4a7484aa, w5 += sigma1(w3) + w14 + sigma0(w6));
+ Round(c, d, e, f, g, h, a, b, 0x5cb0a9dc, w6 += sigma1(w4) + w15 + sigma0(w7));
+ Round(b, c, d, e, f, g, h, a, 0x76f988da, w7 += sigma1(w5) + w0 + sigma0(w8));
+ Round(a, b, c, d, e, f, g, h, 0x983e5152, w8 += sigma1(w6) + w1 + sigma0(w9));
+ Round(h, a, b, c, d, e, f, g, 0xa831c66d, w9 += sigma1(w7) + w2 + sigma0(w10));
+ Round(g, h, a, b, c, d, e, f, 0xb00327c8, w10 += sigma1(w8) + w3 + sigma0(w11));
+ Round(f, g, h, a, b, c, d, e, 0xbf597fc7, w11 += sigma1(w9) + w4 + sigma0(w12));
+ Round(e, f, g, h, a, b, c, d, 0xc6e00bf3, w12 += sigma1(w10) + w5 + sigma0(w13));
+ Round(d, e, f, g, h, a, b, c, 0xd5a79147, w13 += sigma1(w11) + w6 + sigma0(w14));
+ Round(c, d, e, f, g, h, a, b, 0x06ca6351, w14 += sigma1(w12) + w7 + sigma0(w15));
+ Round(b, c, d, e, f, g, h, a, 0x14292967, w15 += sigma1(w13) + w8 + sigma0(w0));
+
+ Round(a, b, c, d, e, f, g, h, 0x27b70a85, w0 += sigma1(w14) + w9 + sigma0(w1));
+ Round(h, a, b, c, d, e, f, g, 0x2e1b2138, w1 += sigma1(w15) + w10 + sigma0(w2));
+ Round(g, h, a, b, c, d, e, f, 0x4d2c6dfc, w2 += sigma1(w0) + w11 + sigma0(w3));
+ Round(f, g, h, a, b, c, d, e, 0x53380d13, w3 += sigma1(w1) + w12 + sigma0(w4));
+ Round(e, f, g, h, a, b, c, d, 0x650a7354, w4 += sigma1(w2) + w13 + sigma0(w5));
+ Round(d, e, f, g, h, a, b, c, 0x766a0abb, w5 += sigma1(w3) + w14 + sigma0(w6));
+ Round(c, d, e, f, g, h, a, b, 0x81c2c92e, w6 += sigma1(w4) + w15 + sigma0(w7));
+ Round(b, c, d, e, f, g, h, a, 0x92722c85, w7 += sigma1(w5) + w0 + sigma0(w8));
+ Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1, w8 += sigma1(w6) + w1 + sigma0(w9));
+ Round(h, a, b, c, d, e, f, g, 0xa81a664b, w9 += sigma1(w7) + w2 + sigma0(w10));
+ Round(g, h, a, b, c, d, e, f, 0xc24b8b70, w10 += sigma1(w8) + w3 + sigma0(w11));
+ Round(f, g, h, a, b, c, d, e, 0xc76c51a3, w11 += sigma1(w9) + w4 + sigma0(w12));
+ Round(e, f, g, h, a, b, c, d, 0xd192e819, w12 += sigma1(w10) + w5 + sigma0(w13));
+ Round(d, e, f, g, h, a, b, c, 0xd6990624, w13 += sigma1(w11) + w6 + sigma0(w14));
+ Round(c, d, e, f, g, h, a, b, 0xf40e3585, w14 += sigma1(w12) + w7 + sigma0(w15));
+ Round(b, c, d, e, f, g, h, a, 0x106aa070, w15 += sigma1(w13) + w8 + sigma0(w0));
+
+ Round(a, b, c, d, e, f, g, h, 0x19a4c116, w0 += sigma1(w14) + w9 + sigma0(w1));
+ Round(h, a, b, c, d, e, f, g, 0x1e376c08, w1 += sigma1(w15) + w10 + sigma0(w2));
+ Round(g, h, a, b, c, d, e, f, 0x2748774c, w2 += sigma1(w0) + w11 + sigma0(w3));
+ Round(f, g, h, a, b, c, d, e, 0x34b0bcb5, w3 += sigma1(w1) + w12 + sigma0(w4));
+ Round(e, f, g, h, a, b, c, d, 0x391c0cb3, w4 += sigma1(w2) + w13 + sigma0(w5));
+ Round(d, e, f, g, h, a, b, c, 0x4ed8aa4a, w5 += sigma1(w3) + w14 + sigma0(w6));
+ Round(c, d, e, f, g, h, a, b, 0x5b9cca4f, w6 += sigma1(w4) + w15 + sigma0(w7));
+ Round(b, c, d, e, f, g, h, a, 0x682e6ff3, w7 += sigma1(w5) + w0 + sigma0(w8));
+ Round(a, b, c, d, e, f, g, h, 0x748f82ee, w8 += sigma1(w6) + w1 + sigma0(w9));
+ Round(h, a, b, c, d, e, f, g, 0x78a5636f, w9 += sigma1(w7) + w2 + sigma0(w10));
+ Round(g, h, a, b, c, d, e, f, 0x84c87814, w10 += sigma1(w8) + w3 + sigma0(w11));
+ Round(f, g, h, a, b, c, d, e, 0x8cc70208, w11 += sigma1(w9) + w4 + sigma0(w12));
+ Round(e, f, g, h, a, b, c, d, 0x90befffa, w12 += sigma1(w10) + w5 + sigma0(w13));
+ Round(d, e, f, g, h, a, b, c, 0xa4506ceb, w13 += sigma1(w11) + w6 + sigma0(w14));
+ Round(c, d, e, f, g, h, a, b, 0xbef9a3f7, w14 + sigma1(w12) + w7 + sigma0(w15));
+ Round(b, c, d, e, f, g, h, a, 0xc67178f2, w15 + sigma1(w13) + w8 + sigma0(w0));
+
+ s[0] += a;
+ s[1] += b;
+ s[2] += c;
+ s[3] += d;
+ s[4] += e;
+ s[5] += f;
+ s[6] += g;
+ s[7] += h;
+}
+
+static void secp256k1_sha256_write(secp256k1_sha256_t *hash, const unsigned char *data, size_t len) {
+ size_t bufsize = hash->bytes & 0x3F;
+ hash->bytes += len;
+ while (bufsize + len >= 64) {
+ /* Fill the buffer, and process it. */
+ memcpy(((unsigned char*)hash->buf) + bufsize, data, 64 - bufsize);
+ data += 64 - bufsize;
+ len -= 64 - bufsize;
+ secp256k1_sha256_transform(hash->s, hash->buf);
+ bufsize = 0;
+ }
+ if (len) {
+ /* Fill the buffer with what remains. */
+ memcpy(((unsigned char*)hash->buf) + bufsize, data, len);
+ }
+}
+
+static void secp256k1_sha256_finalize(secp256k1_sha256_t *hash, unsigned char *out32) {
+ static const unsigned char pad[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ uint32_t sizedesc[2];
+ uint32_t out[8];
+ int i = 0;
+ sizedesc[0] = BE32(hash->bytes >> 29);
+ sizedesc[1] = BE32(hash->bytes << 3);
+ secp256k1_sha256_write(hash, pad, 1 + ((119 - (hash->bytes % 64)) % 64));
+ secp256k1_sha256_write(hash, (const unsigned char*)sizedesc, 8);
+ for (i = 0; i < 8; i++) {
+ out[i] = BE32(hash->s[i]);
+ hash->s[i] = 0;
+ }
+ memcpy(out32, (const unsigned char*)out, 32);
+}
+
+static void secp256k1_hmac_sha256_initialize(secp256k1_hmac_sha256_t *hash, const unsigned char *key, size_t keylen) {
+ int n;
+ unsigned char rkey[64];
+ if (keylen <= 64) {
+ memcpy(rkey, key, keylen);
+ memset(rkey + keylen, 0, 64 - keylen);
+ } else {
+ secp256k1_sha256_t sha256;
+ secp256k1_sha256_initialize(&sha256);
+ secp256k1_sha256_write(&sha256, key, keylen);
+ secp256k1_sha256_finalize(&sha256, rkey);
+ memset(rkey + 32, 0, 32);
+ }
+
+ secp256k1_sha256_initialize(&hash->outer);
+ for (n = 0; n < 64; n++) {
+ rkey[n] ^= 0x5c;
+ }
+ secp256k1_sha256_write(&hash->outer, rkey, 64);
+
+ secp256k1_sha256_initialize(&hash->inner);
+ for (n = 0; n < 64; n++) {
+ rkey[n] ^= 0x5c ^ 0x36;
+ }
+ secp256k1_sha256_write(&hash->inner, rkey, 64);
+ memset(rkey, 0, 64);
+}
+
+static void secp256k1_hmac_sha256_write(secp256k1_hmac_sha256_t *hash, const unsigned char *data, size_t size) {
+ secp256k1_sha256_write(&hash->inner, data, size);
+}
+
+static void secp256k1_hmac_sha256_finalize(secp256k1_hmac_sha256_t *hash, unsigned char *out32) {
+ unsigned char temp[32];
+ secp256k1_sha256_finalize(&hash->inner, temp);
+ secp256k1_sha256_write(&hash->outer, temp, 32);
+ memset(temp, 0, 32);
+ secp256k1_sha256_finalize(&hash->outer, out32);
+}
+
+
+static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen) {
+ secp256k1_hmac_sha256_t hmac;
+ static const unsigned char zero[1] = {0x00};
+ static const unsigned char one[1] = {0x01};
+
+ memset(rng->v, 0x01, 32); /* RFC6979 3.2.b. */
+ memset(rng->k, 0x00, 32); /* RFC6979 3.2.c. */
+
+ /* RFC6979 3.2.d. */
+ secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
+ secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
+ secp256k1_hmac_sha256_write(&hmac, zero, 1);
+ secp256k1_hmac_sha256_write(&hmac, key, keylen);
+ secp256k1_hmac_sha256_finalize(&hmac, rng->k);
+ secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
+ secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
+ secp256k1_hmac_sha256_finalize(&hmac, rng->v);
+
+ /* RFC6979 3.2.f. */
+ secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
+ secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
+ secp256k1_hmac_sha256_write(&hmac, one, 1);
+ secp256k1_hmac_sha256_write(&hmac, key, keylen);
+ secp256k1_hmac_sha256_finalize(&hmac, rng->k);
+ secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
+ secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
+ secp256k1_hmac_sha256_finalize(&hmac, rng->v);
+ rng->retry = 0;
+}
+
+static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen) {
+ /* RFC6979 3.2.h. */
+ static const unsigned char zero[1] = {0x00};
+ if (rng->retry) {
+ secp256k1_hmac_sha256_t hmac;
+ secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
+ secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
+ secp256k1_hmac_sha256_write(&hmac, zero, 1);
+ secp256k1_hmac_sha256_finalize(&hmac, rng->k);
+ secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
+ secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
+ secp256k1_hmac_sha256_finalize(&hmac, rng->v);
+ }
+
+ while (outlen > 0) {
+ secp256k1_hmac_sha256_t hmac;
+ int now = outlen;
+ secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
+ secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
+ secp256k1_hmac_sha256_finalize(&hmac, rng->v);
+ if (now > 32) {
+ now = 32;
+ }
+ memcpy(out, rng->v, now);
+ out += now;
+ outlen -= now;
+ }
+
+ rng->retry = 1;
+}
+
+static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng) {
+ memset(rng->k, 0, 32);
+ memset(rng->v, 0, 32);
+ rng->retry = 0;
+}
+
+#undef BE32
+#undef Round
+#undef sigma1
+#undef sigma0
+#undef Sigma1
+#undef Sigma0
+#undef Maj
+#undef Ch
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1.java b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1.java
new file mode 100644
index 000000000..1c67802fb
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1.java
@@ -0,0 +1,446 @@
+/*
+ * Copyright 2013 Google Inc.
+ * Copyright 2014-2016 the libsecp256k1 contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.bitcoin;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+import java.math.BigInteger;
+import com.google.common.base.Preconditions;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import static org.bitcoin.NativeSecp256k1Util.*;
+
+/**
+ * <p>This class holds native methods to handle ECDSA verification.</p>
+ *
+ * <p>You can find an example library that can be used for this at https://github.com/bitcoin/secp256k1</p>
+ *
+ * <p>To build secp256k1 for use with bitcoinj, run
+ * `./configure --enable-jni --enable-experimental --enable-module-ecdh`
+ * and `make` then copy `.libs/libsecp256k1.so` to your system library path
+ * or point the JVM to the folder containing it with -Djava.library.path
+ * </p>
+ */
+public class NativeSecp256k1 {
+
+ private static final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
+ private static final Lock r = rwl.readLock();
+ private static final Lock w = rwl.writeLock();
+ private static ThreadLocal<ByteBuffer> nativeECDSABuffer = new ThreadLocal<ByteBuffer>();
+ /**
+ * Verifies the given secp256k1 signature in native code.
+ * Calling when enabled == false is undefined (probably library not loaded)
+ *
+ * @param data The data which was signed, must be exactly 32 bytes
+ * @param signature The signature
+ * @param pub The public key which did the signing
+ */
+ public static boolean verify(byte[] data, byte[] signature, byte[] pub) throws AssertFailException{
+ Preconditions.checkArgument(data.length == 32 && signature.length <= 520 && pub.length <= 520);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < 520) {
+ byteBuff = ByteBuffer.allocateDirect(520);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(data);
+ byteBuff.put(signature);
+ byteBuff.put(pub);
+
+ byte[][] retByteArray;
+
+ r.lock();
+ try {
+ return secp256k1_ecdsa_verify(byteBuff, Secp256k1Context.getContext(), signature.length, pub.length) == 1;
+ } finally {
+ r.unlock();
+ }
+ }
+
+ /**
+ * libsecp256k1 Create an ECDSA signature.
+ *
+ * @param data Message hash, 32 bytes
+ * @param key Secret key, 32 bytes
+ *
+ * Return values
+ * @param sig byte array of signature
+ */
+ public static byte[] sign(byte[] data, byte[] sec) throws AssertFailException{
+ Preconditions.checkArgument(data.length == 32 && sec.length <= 32);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < 32 + 32) {
+ byteBuff = ByteBuffer.allocateDirect(32 + 32);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(data);
+ byteBuff.put(sec);
+
+ byte[][] retByteArray;
+
+ r.lock();
+ try {
+ retByteArray = secp256k1_ecdsa_sign(byteBuff, Secp256k1Context.getContext());
+ } finally {
+ r.unlock();
+ }
+
+ byte[] sigArr = retByteArray[0];
+ int sigLen = new BigInteger(new byte[] { retByteArray[1][0] }).intValue();
+ int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
+
+ assertEquals(sigArr.length, sigLen, "Got bad signature length.");
+
+ return retVal == 0 ? new byte[0] : sigArr;
+ }
+
+ /**
+ * libsecp256k1 Seckey Verify - returns 1 if valid, 0 if invalid
+ *
+ * @param seckey ECDSA Secret key, 32 bytes
+ */
+ public static boolean secKeyVerify(byte[] seckey) {
+ Preconditions.checkArgument(seckey.length == 32);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < seckey.length) {
+ byteBuff = ByteBuffer.allocateDirect(seckey.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(seckey);
+
+ r.lock();
+ try {
+ return secp256k1_ec_seckey_verify(byteBuff,Secp256k1Context.getContext()) == 1;
+ } finally {
+ r.unlock();
+ }
+ }
+
+
+ /**
+ * libsecp256k1 Compute Pubkey - computes public key from secret key
+ *
+ * @param seckey ECDSA Secret key, 32 bytes
+ *
+ * Return values
+ * @param pubkey ECDSA Public key, 33 or 65 bytes
+ */
+ //TODO add a 'compressed' arg
+ public static byte[] computePubkey(byte[] seckey) throws AssertFailException{
+ Preconditions.checkArgument(seckey.length == 32);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < seckey.length) {
+ byteBuff = ByteBuffer.allocateDirect(seckey.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(seckey);
+
+ byte[][] retByteArray;
+
+ r.lock();
+ try {
+ retByteArray = secp256k1_ec_pubkey_create(byteBuff, Secp256k1Context.getContext());
+ } finally {
+ r.unlock();
+ }
+
+ byte[] pubArr = retByteArray[0];
+ int pubLen = new BigInteger(new byte[] { retByteArray[1][0] }).intValue();
+ int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
+
+ assertEquals(pubArr.length, pubLen, "Got bad pubkey length.");
+
+ return retVal == 0 ? new byte[0]: pubArr;
+ }
+
+ /**
+ * libsecp256k1 Cleanup - This destroys the secp256k1 context object
+ * This should be called at the end of the program for proper cleanup of the context.
+ */
+ public static synchronized void cleanup() {
+ w.lock();
+ try {
+ secp256k1_destroy_context(Secp256k1Context.getContext());
+ } finally {
+ w.unlock();
+ }
+ }
+
+ public static long cloneContext() {
+ r.lock();
+ try {
+ return secp256k1_ctx_clone(Secp256k1Context.getContext());
+ } finally { r.unlock(); }
+ }
+
+ /**
+ * libsecp256k1 PrivKey Tweak-Mul - Tweak privkey by multiplying to it
+ *
+ * @param tweak some bytes to tweak with
+ * @param seckey 32-byte seckey
+ */
+ public static byte[] privKeyTweakMul(byte[] privkey, byte[] tweak) throws AssertFailException{
+ Preconditions.checkArgument(privkey.length == 32);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < privkey.length + tweak.length) {
+ byteBuff = ByteBuffer.allocateDirect(privkey.length + tweak.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(privkey);
+ byteBuff.put(tweak);
+
+ byte[][] retByteArray;
+ r.lock();
+ try {
+ retByteArray = secp256k1_privkey_tweak_mul(byteBuff,Secp256k1Context.getContext());
+ } finally {
+ r.unlock();
+ }
+
+ byte[] privArr = retByteArray[0];
+
+ int privLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
+ int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
+
+ assertEquals(privArr.length, privLen, "Got bad pubkey length.");
+
+ assertEquals(retVal, 1, "Failed return value check.");
+
+ return privArr;
+ }
+
+ /**
+ * libsecp256k1 PrivKey Tweak-Add - Tweak privkey by adding to it
+ *
+ * @param tweak some bytes to tweak with
+ * @param seckey 32-byte seckey
+ */
+ public static byte[] privKeyTweakAdd(byte[] privkey, byte[] tweak) throws AssertFailException{
+ Preconditions.checkArgument(privkey.length == 32);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < privkey.length + tweak.length) {
+ byteBuff = ByteBuffer.allocateDirect(privkey.length + tweak.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(privkey);
+ byteBuff.put(tweak);
+
+ byte[][] retByteArray;
+ r.lock();
+ try {
+ retByteArray = secp256k1_privkey_tweak_add(byteBuff,Secp256k1Context.getContext());
+ } finally {
+ r.unlock();
+ }
+
+ byte[] privArr = retByteArray[0];
+
+ int privLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
+ int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
+
+ assertEquals(privArr.length, privLen, "Got bad pubkey length.");
+
+ assertEquals(retVal, 1, "Failed return value check.");
+
+ return privArr;
+ }
+
+ /**
+ * libsecp256k1 PubKey Tweak-Add - Tweak pubkey by adding to it
+ *
+ * @param tweak some bytes to tweak with
+ * @param pubkey 32-byte seckey
+ */
+ public static byte[] pubKeyTweakAdd(byte[] pubkey, byte[] tweak) throws AssertFailException{
+ Preconditions.checkArgument(pubkey.length == 33 || pubkey.length == 65);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < pubkey.length + tweak.length) {
+ byteBuff = ByteBuffer.allocateDirect(pubkey.length + tweak.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(pubkey);
+ byteBuff.put(tweak);
+
+ byte[][] retByteArray;
+ r.lock();
+ try {
+ retByteArray = secp256k1_pubkey_tweak_add(byteBuff,Secp256k1Context.getContext(), pubkey.length);
+ } finally {
+ r.unlock();
+ }
+
+ byte[] pubArr = retByteArray[0];
+
+ int pubLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
+ int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
+
+ assertEquals(pubArr.length, pubLen, "Got bad pubkey length.");
+
+ assertEquals(retVal, 1, "Failed return value check.");
+
+ return pubArr;
+ }
+
+ /**
+ * libsecp256k1 PubKey Tweak-Mul - Tweak pubkey by multiplying to it
+ *
+ * @param tweak some bytes to tweak with
+ * @param pubkey 32-byte seckey
+ */
+ public static byte[] pubKeyTweakMul(byte[] pubkey, byte[] tweak) throws AssertFailException{
+ Preconditions.checkArgument(pubkey.length == 33 || pubkey.length == 65);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < pubkey.length + tweak.length) {
+ byteBuff = ByteBuffer.allocateDirect(pubkey.length + tweak.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(pubkey);
+ byteBuff.put(tweak);
+
+ byte[][] retByteArray;
+ r.lock();
+ try {
+ retByteArray = secp256k1_pubkey_tweak_mul(byteBuff,Secp256k1Context.getContext(), pubkey.length);
+ } finally {
+ r.unlock();
+ }
+
+ byte[] pubArr = retByteArray[0];
+
+ int pubLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
+ int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
+
+ assertEquals(pubArr.length, pubLen, "Got bad pubkey length.");
+
+ assertEquals(retVal, 1, "Failed return value check.");
+
+ return pubArr;
+ }
+
+ /**
+ * libsecp256k1 create ECDH secret - constant time ECDH calculation
+ *
+ * @param seckey byte array of secret key used in exponentiaion
+ * @param pubkey byte array of public key used in exponentiaion
+ */
+ public static byte[] createECDHSecret(byte[] seckey, byte[] pubkey) throws AssertFailException{
+ Preconditions.checkArgument(seckey.length <= 32 && pubkey.length <= 65);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < 32 + pubkey.length) {
+ byteBuff = ByteBuffer.allocateDirect(32 + pubkey.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(seckey);
+ byteBuff.put(pubkey);
+
+ byte[][] retByteArray;
+ r.lock();
+ try {
+ retByteArray = secp256k1_ecdh(byteBuff, Secp256k1Context.getContext(), pubkey.length);
+ } finally {
+ r.unlock();
+ }
+
+ byte[] resArr = retByteArray[0];
+ int retVal = new BigInteger(new byte[] { retByteArray[1][0] }).intValue();
+
+ assertEquals(resArr.length, 32, "Got bad result length.");
+ assertEquals(retVal, 1, "Failed return value check.");
+
+ return resArr;
+ }
+
+ /**
+ * libsecp256k1 randomize - updates the context randomization
+ *
+ * @param seed 32-byte random seed
+ */
+ public static synchronized boolean randomize(byte[] seed) throws AssertFailException{
+ Preconditions.checkArgument(seed.length == 32 || seed == null);
+
+ ByteBuffer byteBuff = nativeECDSABuffer.get();
+ if (byteBuff == null || byteBuff.capacity() < seed.length) {
+ byteBuff = ByteBuffer.allocateDirect(seed.length);
+ byteBuff.order(ByteOrder.nativeOrder());
+ nativeECDSABuffer.set(byteBuff);
+ }
+ byteBuff.rewind();
+ byteBuff.put(seed);
+
+ w.lock();
+ try {
+ return secp256k1_context_randomize(byteBuff, Secp256k1Context.getContext()) == 1;
+ } finally {
+ w.unlock();
+ }
+ }
+
+ private static native long secp256k1_ctx_clone(long context);
+
+ private static native int secp256k1_context_randomize(ByteBuffer byteBuff, long context);
+
+ private static native byte[][] secp256k1_privkey_tweak_add(ByteBuffer byteBuff, long context);
+
+ private static native byte[][] secp256k1_privkey_tweak_mul(ByteBuffer byteBuff, long context);
+
+ private static native byte[][] secp256k1_pubkey_tweak_add(ByteBuffer byteBuff, long context, int pubLen);
+
+ private static native byte[][] secp256k1_pubkey_tweak_mul(ByteBuffer byteBuff, long context, int pubLen);
+
+ private static native void secp256k1_destroy_context(long context);
+
+ private static native int secp256k1_ecdsa_verify(ByteBuffer byteBuff, long context, int sigLen, int pubLen);
+
+ private static native byte[][] secp256k1_ecdsa_sign(ByteBuffer byteBuff, long context);
+
+ private static native int secp256k1_ec_seckey_verify(ByteBuffer byteBuff, long context);
+
+ private static native byte[][] secp256k1_ec_pubkey_create(ByteBuffer byteBuff, long context);
+
+ private static native byte[][] secp256k1_ec_pubkey_parse(ByteBuffer byteBuff, long context, int inputLen);
+
+ private static native byte[][] secp256k1_ecdh(ByteBuffer byteBuff, long context, int inputLen);
+
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java
new file mode 100644
index 000000000..c00d08899
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java
@@ -0,0 +1,226 @@
+package org.bitcoin;
+
+import com.google.common.io.BaseEncoding;
+import java.util.Arrays;
+import java.math.BigInteger;
+import javax.xml.bind.DatatypeConverter;
+import static org.bitcoin.NativeSecp256k1Util.*;
+
+/**
+ * This class holds test cases defined for testing this library.
+ */
+public class NativeSecp256k1Test {
+
+ //TODO improve comments/add more tests
+ /**
+ * This tests verify() for a valid signature
+ */
+ public static void testVerifyPos() throws AssertFailException{
+ boolean result = false;
+ byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing"
+ byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase());
+ byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
+
+ result = NativeSecp256k1.verify( data, sig, pub);
+ assertEquals( result, true , "testVerifyPos");
+ }
+
+ /**
+ * This tests verify() for a non-valid signature
+ */
+ public static void testVerifyNeg() throws AssertFailException{
+ boolean result = false;
+ byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A91".toLowerCase()); //sha256hash of "testing"
+ byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase());
+ byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
+
+ result = NativeSecp256k1.verify( data, sig, pub);
+ //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16));
+ assertEquals( result, false , "testVerifyNeg");
+ }
+
+ /**
+ * This tests secret key verify() for a valid secretkey
+ */
+ public static void testSecKeyVerifyPos() throws AssertFailException{
+ boolean result = false;
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
+
+ result = NativeSecp256k1.secKeyVerify( sec );
+ //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16));
+ assertEquals( result, true , "testSecKeyVerifyPos");
+ }
+
+ /**
+ * This tests secret key verify() for a invalid secretkey
+ */
+ public static void testSecKeyVerifyNeg() throws AssertFailException{
+ boolean result = false;
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase());
+
+ result = NativeSecp256k1.secKeyVerify( sec );
+ //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16));
+ assertEquals( result, false , "testSecKeyVerifyNeg");
+ }
+
+ /**
+ * This tests public key create() for a valid secretkey
+ */
+ public static void testPubKeyCreatePos() throws AssertFailException{
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
+
+ byte[] resultArr = NativeSecp256k1.computePubkey( sec);
+ String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( pubkeyString , "04C591A8FF19AC9C4E4E5793673B83123437E975285E7B442F4EE2654DFFCA5E2D2103ED494718C697AC9AEBCFD19612E224DB46661011863ED2FC54E71861E2A6" , "testPubKeyCreatePos");
+ }
+
+ /**
+ * This tests public key create() for a invalid secretkey
+ */
+ public static void testPubKeyCreateNeg() throws AssertFailException{
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase());
+
+ byte[] resultArr = NativeSecp256k1.computePubkey( sec);
+ String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( pubkeyString, "" , "testPubKeyCreateNeg");
+ }
+
+ /**
+ * This tests sign() for a valid secretkey
+ */
+ public static void testSignPos() throws AssertFailException{
+
+ byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing"
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
+
+ byte[] resultArr = NativeSecp256k1.sign(data, sec);
+ String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( sigString, "30440220182A108E1448DC8F1FB467D06A0F3BB8EA0533584CB954EF8DA112F1D60E39A202201C66F36DA211C087F3AF88B50EDF4F9BDAA6CF5FD6817E74DCA34DB12390C6E9" , "testSignPos");
+ }
+
+ /**
+ * This tests sign() for a invalid secretkey
+ */
+ public static void testSignNeg() throws AssertFailException{
+ byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing"
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase());
+
+ byte[] resultArr = NativeSecp256k1.sign(data, sec);
+ String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( sigString, "" , "testSignNeg");
+ }
+
+ /**
+ * This tests private key tweak-add
+ */
+ public static void testPrivKeyTweakAdd_1() throws AssertFailException {
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
+ byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
+
+ byte[] resultArr = NativeSecp256k1.privKeyTweakAdd( sec , data );
+ String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( sigString , "A168571E189E6F9A7E2D657A4B53AE99B909F7E712D1C23CED28093CD57C88F3" , "testPrivKeyAdd_1");
+ }
+
+ /**
+ * This tests private key tweak-mul
+ */
+ public static void testPrivKeyTweakMul_1() throws AssertFailException {
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
+ byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
+
+ byte[] resultArr = NativeSecp256k1.privKeyTweakMul( sec , data );
+ String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( sigString , "97F8184235F101550F3C71C927507651BD3F1CDB4A5A33B8986ACF0DEE20FFFC" , "testPrivKeyMul_1");
+ }
+
+ /**
+ * This tests private key tweak-add uncompressed
+ */
+ public static void testPrivKeyTweakAdd_2() throws AssertFailException {
+ byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
+ byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
+
+ byte[] resultArr = NativeSecp256k1.pubKeyTweakAdd( pub , data );
+ String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( sigString , "0411C6790F4B663CCE607BAAE08C43557EDC1A4D11D88DFCB3D841D0C6A941AF525A268E2A863C148555C48FB5FBA368E88718A46E205FABC3DBA2CCFFAB0796EF" , "testPrivKeyAdd_2");
+ }
+
+ /**
+ * This tests private key tweak-mul uncompressed
+ */
+ public static void testPrivKeyTweakMul_2() throws AssertFailException {
+ byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
+ byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
+
+ byte[] resultArr = NativeSecp256k1.pubKeyTweakMul( pub , data );
+ String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( sigString , "04E0FE6FE55EBCA626B98A807F6CAF654139E14E5E3698F01A9A658E21DC1D2791EC060D4F412A794D5370F672BC94B722640B5F76914151CFCA6E712CA48CC589" , "testPrivKeyMul_2");
+ }
+
+ /**
+ * This tests seed randomization
+ */
+ public static void testRandomize() throws AssertFailException {
+ byte[] seed = BaseEncoding.base16().lowerCase().decode("A441B15FE9A3CF56661190A0B93B9DEC7D04127288CC87250967CF3B52894D11".toLowerCase()); //sha256hash of "random"
+ boolean result = NativeSecp256k1.randomize(seed);
+ assertEquals( result, true, "testRandomize");
+ }
+
+ public static void testCreateECDHSecret() throws AssertFailException{
+
+ byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
+ byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
+
+ byte[] resultArr = NativeSecp256k1.createECDHSecret(sec, pub);
+ String ecdhString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
+ assertEquals( ecdhString, "2A2A67007A926E6594AF3EB564FC74005B37A9C8AEF2033C4552051B5C87F043" , "testCreateECDHSecret");
+ }
+
+ public static void main(String[] args) throws AssertFailException{
+
+
+ System.out.println("\n libsecp256k1 enabled: " + Secp256k1Context.isEnabled() + "\n");
+
+ assertEquals( Secp256k1Context.isEnabled(), true, "isEnabled" );
+
+ //Test verify() success/fail
+ testVerifyPos();
+ testVerifyNeg();
+
+ //Test secKeyVerify() success/fail
+ testSecKeyVerifyPos();
+ testSecKeyVerifyNeg();
+
+ //Test computePubkey() success/fail
+ testPubKeyCreatePos();
+ testPubKeyCreateNeg();
+
+ //Test sign() success/fail
+ testSignPos();
+ testSignNeg();
+
+ //Test privKeyTweakAdd() 1
+ testPrivKeyTweakAdd_1();
+
+ //Test privKeyTweakMul() 2
+ testPrivKeyTweakMul_1();
+
+ //Test privKeyTweakAdd() 3
+ testPrivKeyTweakAdd_2();
+
+ //Test privKeyTweakMul() 4
+ testPrivKeyTweakMul_2();
+
+ //Test randomize()
+ testRandomize();
+
+ //Test ECDH
+ testCreateECDHSecret();
+
+ NativeSecp256k1.cleanup();
+
+ System.out.println(" All tests passed." );
+
+ }
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java
new file mode 100644
index 000000000..04732ba04
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2014-2016 the libsecp256k1 contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.bitcoin;
+
+public class NativeSecp256k1Util{
+
+ public static void assertEquals( int val, int val2, String message ) throws AssertFailException{
+ if( val != val2 )
+ throw new AssertFailException("FAIL: " + message);
+ }
+
+ public static void assertEquals( boolean val, boolean val2, String message ) throws AssertFailException{
+ if( val != val2 )
+ throw new AssertFailException("FAIL: " + message);
+ else
+ System.out.println("PASS: " + message);
+ }
+
+ public static void assertEquals( String val, String val2, String message ) throws AssertFailException{
+ if( !val.equals(val2) )
+ throw new AssertFailException("FAIL: " + message);
+ else
+ System.out.println("PASS: " + message);
+ }
+
+ public static class AssertFailException extends Exception {
+ public AssertFailException(String message) {
+ super( message );
+ }
+ }
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/Secp256k1Context.java b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/Secp256k1Context.java
new file mode 100644
index 000000000..216c986a8
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/Secp256k1Context.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2014-2016 the libsecp256k1 contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.bitcoin;
+
+/**
+ * This class holds the context reference used in native methods
+ * to handle ECDSA operations.
+ */
+public class Secp256k1Context {
+ private static final boolean enabled; //true if the library is loaded
+ private static final long context; //ref to pointer to context obj
+
+ static { //static initializer
+ boolean isEnabled = true;
+ long contextRef = -1;
+ try {
+ System.loadLibrary("secp256k1");
+ contextRef = secp256k1_init_context();
+ } catch (UnsatisfiedLinkError e) {
+ System.out.println("UnsatisfiedLinkError: " + e.toString());
+ isEnabled = false;
+ }
+ enabled = isEnabled;
+ context = contextRef;
+ }
+
+ public static boolean isEnabled() {
+ return enabled;
+ }
+
+ public static long getContext() {
+ if(!enabled) return -1; //sanity check
+ return context;
+ }
+
+ private static native long secp256k1_init_context();
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.c b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.c
new file mode 100644
index 000000000..bcef7b32c
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.c
@@ -0,0 +1,377 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "org_bitcoin_NativeSecp256k1.h"
+#include "include/secp256k1.h"
+#include "include/secp256k1_ecdh.h"
+#include "include/secp256k1_recovery.h"
+
+
+SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ctx_1clone
+ (JNIEnv* env, jclass classObject, jlong ctx_l)
+{
+ const secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+
+ jlong ctx_clone_l = (uintptr_t) secp256k1_context_clone(ctx);
+
+ (void)classObject;(void)env;
+
+ return ctx_clone_l;
+
+}
+
+SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1context_1randomize
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+
+ const unsigned char* seed = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
+
+ (void)classObject;
+
+ return secp256k1_context_randomize(ctx, seed);
+
+}
+
+SECP256K1_API void JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1destroy_1context
+ (JNIEnv* env, jclass classObject, jlong ctx_l)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+
+ secp256k1_context_destroy(ctx);
+
+ (void)classObject;(void)env;
+}
+
+SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1verify
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint siglen, jint publen)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+
+ unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
+ const unsigned char* sigdata = { (unsigned char*) (data + 32) };
+ const unsigned char* pubdata = { (unsigned char*) (data + siglen + 32) };
+
+ secp256k1_ecdsa_signature sig;
+ secp256k1_pubkey pubkey;
+
+ int ret = secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigdata, siglen);
+
+ if( ret ) {
+ ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen);
+
+ if( ret ) {
+ ret = secp256k1_ecdsa_verify(ctx, &sig, data, &pubkey);
+ }
+ }
+
+ (void)classObject;
+
+ return ret;
+}
+
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+ unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
+ unsigned char* secKey = (unsigned char*) (data + 32);
+
+ jobjectArray retArray;
+ jbyteArray sigArray, intsByteArray;
+ unsigned char intsarray[2];
+
+ secp256k1_ecdsa_signature sig[72];
+
+ int ret = secp256k1_ecdsa_sign(ctx, sig, data, secKey, NULL, NULL );
+
+ unsigned char outputSer[72];
+ size_t outputLen = 72;
+
+ if( ret ) {
+ int ret2 = secp256k1_ecdsa_signature_serialize_der(ctx,outputSer, &outputLen, sig ); (void)ret2;
+ }
+
+ intsarray[0] = outputLen;
+ intsarray[1] = ret;
+
+ retArray = (*env)->NewObjectArray(env, 2,
+ (*env)->FindClass(env, "[B"),
+ (*env)->NewByteArray(env, 1));
+
+ sigArray = (*env)->NewByteArray(env, outputLen);
+ (*env)->SetByteArrayRegion(env, sigArray, 0, outputLen, (jbyte*)outputSer);
+ (*env)->SetObjectArrayElement(env, retArray, 0, sigArray);
+
+ intsByteArray = (*env)->NewByteArray(env, 2);
+ (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
+ (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
+
+ (void)classObject;
+
+ return retArray;
+}
+
+SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+ unsigned char* secKey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
+
+ (void)classObject;
+
+ return secp256k1_ec_seckey_verify(ctx, secKey);
+}
+
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1create
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+ const unsigned char* secKey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
+
+ secp256k1_pubkey pubkey;
+
+ jobjectArray retArray;
+ jbyteArray pubkeyArray, intsByteArray;
+ unsigned char intsarray[2];
+
+ int ret = secp256k1_ec_pubkey_create(ctx, &pubkey, secKey);
+
+ unsigned char outputSer[65];
+ size_t outputLen = 65;
+
+ if( ret ) {
+ int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2;
+ }
+
+ intsarray[0] = outputLen;
+ intsarray[1] = ret;
+
+ retArray = (*env)->NewObjectArray(env, 2,
+ (*env)->FindClass(env, "[B"),
+ (*env)->NewByteArray(env, 1));
+
+ pubkeyArray = (*env)->NewByteArray(env, outputLen);
+ (*env)->SetByteArrayRegion(env, pubkeyArray, 0, outputLen, (jbyte*)outputSer);
+ (*env)->SetObjectArrayElement(env, retArray, 0, pubkeyArray);
+
+ intsByteArray = (*env)->NewByteArray(env, 2);
+ (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
+ (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
+
+ (void)classObject;
+
+ return retArray;
+
+}
+
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1add
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+ unsigned char* privkey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
+ const unsigned char* tweak = (unsigned char*) (privkey + 32);
+
+ jobjectArray retArray;
+ jbyteArray privArray, intsByteArray;
+ unsigned char intsarray[2];
+
+ int privkeylen = 32;
+
+ int ret = secp256k1_ec_privkey_tweak_add(ctx, privkey, tweak);
+
+ intsarray[0] = privkeylen;
+ intsarray[1] = ret;
+
+ retArray = (*env)->NewObjectArray(env, 2,
+ (*env)->FindClass(env, "[B"),
+ (*env)->NewByteArray(env, 1));
+
+ privArray = (*env)->NewByteArray(env, privkeylen);
+ (*env)->SetByteArrayRegion(env, privArray, 0, privkeylen, (jbyte*)privkey);
+ (*env)->SetObjectArrayElement(env, retArray, 0, privArray);
+
+ intsByteArray = (*env)->NewByteArray(env, 2);
+ (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
+ (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
+
+ (void)classObject;
+
+ return retArray;
+}
+
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1mul
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+ unsigned char* privkey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
+ const unsigned char* tweak = (unsigned char*) (privkey + 32);
+
+ jobjectArray retArray;
+ jbyteArray privArray, intsByteArray;
+ unsigned char intsarray[2];
+
+ int privkeylen = 32;
+
+ int ret = secp256k1_ec_privkey_tweak_mul(ctx, privkey, tweak);
+
+ intsarray[0] = privkeylen;
+ intsarray[1] = ret;
+
+ retArray = (*env)->NewObjectArray(env, 2,
+ (*env)->FindClass(env, "[B"),
+ (*env)->NewByteArray(env, 1));
+
+ privArray = (*env)->NewByteArray(env, privkeylen);
+ (*env)->SetByteArrayRegion(env, privArray, 0, privkeylen, (jbyte*)privkey);
+ (*env)->SetObjectArrayElement(env, retArray, 0, privArray);
+
+ intsByteArray = (*env)->NewByteArray(env, 2);
+ (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
+ (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
+
+ (void)classObject;
+
+ return retArray;
+}
+
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1add
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+/* secp256k1_pubkey* pubkey = (secp256k1_pubkey*) (*env)->GetDirectBufferAddress(env, byteBufferObject);*/
+ unsigned char* pkey = (*env)->GetDirectBufferAddress(env, byteBufferObject);
+ const unsigned char* tweak = (unsigned char*) (pkey + publen);
+
+ jobjectArray retArray;
+ jbyteArray pubArray, intsByteArray;
+ unsigned char intsarray[2];
+ unsigned char outputSer[65];
+ size_t outputLen = 65;
+
+ secp256k1_pubkey pubkey;
+ int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pkey, publen);
+
+ if( ret ) {
+ ret = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, tweak);
+ }
+
+ if( ret ) {
+ int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2;
+ }
+
+ intsarray[0] = outputLen;
+ intsarray[1] = ret;
+
+ retArray = (*env)->NewObjectArray(env, 2,
+ (*env)->FindClass(env, "[B"),
+ (*env)->NewByteArray(env, 1));
+
+ pubArray = (*env)->NewByteArray(env, outputLen);
+ (*env)->SetByteArrayRegion(env, pubArray, 0, outputLen, (jbyte*)outputSer);
+ (*env)->SetObjectArrayElement(env, retArray, 0, pubArray);
+
+ intsByteArray = (*env)->NewByteArray(env, 2);
+ (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
+ (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
+
+ (void)classObject;
+
+ return retArray;
+}
+
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1mul
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+ unsigned char* pkey = (*env)->GetDirectBufferAddress(env, byteBufferObject);
+ const unsigned char* tweak = (unsigned char*) (pkey + publen);
+
+ jobjectArray retArray;
+ jbyteArray pubArray, intsByteArray;
+ unsigned char intsarray[2];
+ unsigned char outputSer[65];
+ size_t outputLen = 65;
+
+ secp256k1_pubkey pubkey;
+ int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pkey, publen);
+
+ if ( ret ) {
+ ret = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, tweak);
+ }
+
+ if( ret ) {
+ int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2;
+ }
+
+ intsarray[0] = outputLen;
+ intsarray[1] = ret;
+
+ retArray = (*env)->NewObjectArray(env, 2,
+ (*env)->FindClass(env, "[B"),
+ (*env)->NewByteArray(env, 1));
+
+ pubArray = (*env)->NewByteArray(env, outputLen);
+ (*env)->SetByteArrayRegion(env, pubArray, 0, outputLen, (jbyte*)outputSer);
+ (*env)->SetObjectArrayElement(env, retArray, 0, pubArray);
+
+ intsByteArray = (*env)->NewByteArray(env, 2);
+ (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
+ (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
+
+ (void)classObject;
+
+ return retArray;
+}
+
+SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1pubkey_1combine
+ (JNIEnv * env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint numkeys)
+{
+ (void)classObject;(void)env;(void)byteBufferObject;(void)ctx_l;(void)numkeys;
+
+ return 0;
+}
+
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdh
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen)
+{
+ secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
+ const unsigned char* secdata = (*env)->GetDirectBufferAddress(env, byteBufferObject);
+ const unsigned char* pubdata = (const unsigned char*) (secdata + 32);
+
+ jobjectArray retArray;
+ jbyteArray outArray, intsByteArray;
+ unsigned char intsarray[1];
+ secp256k1_pubkey pubkey;
+ unsigned char nonce_res[32];
+ size_t outputLen = 32;
+
+ int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen);
+
+ if (ret) {
+ ret = secp256k1_ecdh(
+ ctx,
+ nonce_res,
+ &pubkey,
+ secdata
+ );
+ }
+
+ intsarray[0] = ret;
+
+ retArray = (*env)->NewObjectArray(env, 2,
+ (*env)->FindClass(env, "[B"),
+ (*env)->NewByteArray(env, 1));
+
+ outArray = (*env)->NewByteArray(env, outputLen);
+ (*env)->SetByteArrayRegion(env, outArray, 0, 32, (jbyte*)nonce_res);
+ (*env)->SetObjectArrayElement(env, retArray, 0, outArray);
+
+ intsByteArray = (*env)->NewByteArray(env, 1);
+ (*env)->SetByteArrayRegion(env, intsByteArray, 0, 1, (jbyte*)intsarray);
+ (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
+
+ (void)classObject;
+
+ return retArray;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.h b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.h
new file mode 100644
index 000000000..fe613c9e9
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.h
@@ -0,0 +1,119 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+#include "include/secp256k1.h"
+/* Header for class org_bitcoin_NativeSecp256k1 */
+
+#ifndef _Included_org_bitcoin_NativeSecp256k1
+#define _Included_org_bitcoin_NativeSecp256k1
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_ctx_clone
+ * Signature: (J)J
+ */
+SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ctx_1clone
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_context_randomize
+ * Signature: (Ljava/nio/ByteBuffer;J)I
+ */
+SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1context_1randomize
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_privkey_tweak_add
+ * Signature: (Ljava/nio/ByteBuffer;J)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1add
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_privkey_tweak_mul
+ * Signature: (Ljava/nio/ByteBuffer;J)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1mul
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_pubkey_tweak_add
+ * Signature: (Ljava/nio/ByteBuffer;JI)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1add
+ (JNIEnv *, jclass, jobject, jlong, jint);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_pubkey_tweak_mul
+ * Signature: (Ljava/nio/ByteBuffer;JI)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1mul
+ (JNIEnv *, jclass, jobject, jlong, jint);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_destroy_context
+ * Signature: (J)V
+ */
+SECP256K1_API void JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1destroy_1context
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_ecdsa_verify
+ * Signature: (Ljava/nio/ByteBuffer;JII)I
+ */
+SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1verify
+ (JNIEnv *, jclass, jobject, jlong, jint, jint);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_ecdsa_sign
+ * Signature: (Ljava/nio/ByteBuffer;J)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_ec_seckey_verify
+ * Signature: (Ljava/nio/ByteBuffer;J)I
+ */
+SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_ec_pubkey_create
+ * Signature: (Ljava/nio/ByteBuffer;J)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1create
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_ec_pubkey_parse
+ * Signature: (Ljava/nio/ByteBuffer;JI)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1parse
+ (JNIEnv *, jclass, jobject, jlong, jint);
+
+/*
+ * Class: org_bitcoin_NativeSecp256k1
+ * Method: secp256k1_ecdh
+ * Signature: (Ljava/nio/ByteBuffer;JI)[[B
+ */
+SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdh
+ (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c
new file mode 100644
index 000000000..a52939e7e
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c
@@ -0,0 +1,15 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include "org_bitcoin_Secp256k1Context.h"
+#include "include/secp256k1.h"
+
+SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context
+ (JNIEnv* env, jclass classObject)
+{
+ secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+
+ (void)classObject;(void)env;
+
+ return (uintptr_t)ctx;
+}
+
diff --git a/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.h b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.h
new file mode 100644
index 000000000..0d2bc84b7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.h
@@ -0,0 +1,22 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+#include "include/secp256k1.h"
+/* Header for class org_bitcoin_Secp256k1Context */
+
+#ifndef _Included_org_bitcoin_Secp256k1Context
+#define _Included_org_bitcoin_Secp256k1Context
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: org_bitcoin_Secp256k1Context
+ * Method: secp256k1_init_context
+ * Signature: ()J
+ */
+SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context
+ (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/dummy.go
new file mode 100644
index 000000000..3c7a69643
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package module
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/ecdh/Makefile.am.include b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/Makefile.am.include
new file mode 100644
index 000000000..e3088b469
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/Makefile.am.include
@@ -0,0 +1,8 @@
+include_HEADERS += include/secp256k1_ecdh.h
+noinst_HEADERS += src/modules/ecdh/main_impl.h
+noinst_HEADERS += src/modules/ecdh/tests_impl.h
+if USE_BENCHMARK
+noinst_PROGRAMS += bench_ecdh
+bench_ecdh_SOURCES = src/bench_ecdh.c
+bench_ecdh_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB)
+endif
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go
new file mode 100644
index 000000000..b6fc38327
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package ecdh
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/ecdh/main_impl.h b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/main_impl.h
new file mode 100644
index 000000000..9e30fb73d
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/main_impl.h
@@ -0,0 +1,54 @@
+/**********************************************************************
+ * Copyright (c) 2015 Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_MODULE_ECDH_MAIN_
+#define _SECP256K1_MODULE_ECDH_MAIN_
+
+#include "include/secp256k1_ecdh.h"
+#include "ecmult_const_impl.h"
+
+int secp256k1_ecdh(const secp256k1_context* ctx, unsigned char *result, const secp256k1_pubkey *point, const unsigned char *scalar) {
+ int ret = 0;
+ int overflow = 0;
+ secp256k1_gej res;
+ secp256k1_ge pt;
+ secp256k1_scalar s;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(result != NULL);
+ ARG_CHECK(point != NULL);
+ ARG_CHECK(scalar != NULL);
+
+ secp256k1_pubkey_load(ctx, &pt, point);
+ secp256k1_scalar_set_b32(&s, scalar, &overflow);
+ if (overflow || secp256k1_scalar_is_zero(&s)) {
+ ret = 0;
+ } else {
+ unsigned char x[32];
+ unsigned char y[1];
+ secp256k1_sha256_t sha;
+
+ secp256k1_ecmult_const(&res, &pt, &s);
+ secp256k1_ge_set_gej(&pt, &res);
+ /* Compute a hash of the point in compressed form
+ * Note we cannot use secp256k1_eckey_pubkey_serialize here since it does not
+ * expect its output to be secret and has a timing sidechannel. */
+ secp256k1_fe_normalize(&pt.x);
+ secp256k1_fe_normalize(&pt.y);
+ secp256k1_fe_get_b32(x, &pt.x);
+ y[0] = 0x02 | secp256k1_fe_is_odd(&pt.y);
+
+ secp256k1_sha256_initialize(&sha);
+ secp256k1_sha256_write(&sha, y, sizeof(y));
+ secp256k1_sha256_write(&sha, x, sizeof(x));
+ secp256k1_sha256_finalize(&sha, result);
+ ret = 1;
+ }
+
+ secp256k1_scalar_clear(&s);
+ return ret;
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/ecdh/tests_impl.h b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/tests_impl.h
new file mode 100644
index 000000000..85a5d0a9a
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/tests_impl.h
@@ -0,0 +1,105 @@
+/**********************************************************************
+ * Copyright (c) 2015 Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_MODULE_ECDH_TESTS_
+#define _SECP256K1_MODULE_ECDH_TESTS_
+
+void test_ecdh_api(void) {
+ /* Setup context that just counts errors */
+ secp256k1_context *tctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
+ secp256k1_pubkey point;
+ unsigned char res[32];
+ unsigned char s_one[32] = { 0 };
+ int32_t ecount = 0;
+ s_one[31] = 1;
+
+ secp256k1_context_set_error_callback(tctx, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_illegal_callback(tctx, counting_illegal_callback_fn, &ecount);
+ CHECK(secp256k1_ec_pubkey_create(tctx, &point, s_one) == 1);
+
+ /* Check all NULLs are detected */
+ CHECK(secp256k1_ecdh(tctx, res, &point, s_one) == 1);
+ CHECK(ecount == 0);
+ CHECK(secp256k1_ecdh(tctx, NULL, &point, s_one) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdh(tctx, res, NULL, s_one) == 0);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdh(tctx, res, &point, NULL) == 0);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_ecdh(tctx, res, &point, s_one) == 1);
+ CHECK(ecount == 3);
+
+ /* Cleanup */
+ secp256k1_context_destroy(tctx);
+}
+
+void test_ecdh_generator_basepoint(void) {
+ unsigned char s_one[32] = { 0 };
+ secp256k1_pubkey point[2];
+ int i;
+
+ s_one[31] = 1;
+ /* Check against pubkey creation when the basepoint is the generator */
+ for (i = 0; i < 100; ++i) {
+ secp256k1_sha256_t sha;
+ unsigned char s_b32[32];
+ unsigned char output_ecdh[32];
+ unsigned char output_ser[32];
+ unsigned char point_ser[33];
+ size_t point_ser_len = sizeof(point_ser);
+ secp256k1_scalar s;
+
+ random_scalar_order(&s);
+ secp256k1_scalar_get_b32(s_b32, &s);
+
+ /* compute using ECDH function */
+ CHECK(secp256k1_ec_pubkey_create(ctx, &point[0], s_one) == 1);
+ CHECK(secp256k1_ecdh(ctx, output_ecdh, &point[0], s_b32) == 1);
+ /* compute "explicitly" */
+ CHECK(secp256k1_ec_pubkey_create(ctx, &point[1], s_b32) == 1);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, point_ser, &point_ser_len, &point[1], SECP256K1_EC_COMPRESSED) == 1);
+ CHECK(point_ser_len == sizeof(point_ser));
+ secp256k1_sha256_initialize(&sha);
+ secp256k1_sha256_write(&sha, point_ser, point_ser_len);
+ secp256k1_sha256_finalize(&sha, output_ser);
+ /* compare */
+ CHECK(memcmp(output_ecdh, output_ser, sizeof(output_ser)) == 0);
+ }
+}
+
+void test_bad_scalar(void) {
+ unsigned char s_zero[32] = { 0 };
+ unsigned char s_overflow[32] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
+ 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41
+ };
+ unsigned char s_rand[32] = { 0 };
+ unsigned char output[32];
+ secp256k1_scalar rand;
+ secp256k1_pubkey point;
+
+ /* Create random point */
+ random_scalar_order(&rand);
+ secp256k1_scalar_get_b32(s_rand, &rand);
+ CHECK(secp256k1_ec_pubkey_create(ctx, &point, s_rand) == 1);
+
+ /* Try to multiply it by bad values */
+ CHECK(secp256k1_ecdh(ctx, output, &point, s_zero) == 0);
+ CHECK(secp256k1_ecdh(ctx, output, &point, s_overflow) == 0);
+ /* ...and a good one */
+ s_overflow[31] -= 1;
+ CHECK(secp256k1_ecdh(ctx, output, &point, s_overflow) == 1);
+}
+
+void run_ecdh_tests(void) {
+ test_ecdh_api();
+ test_ecdh_generator_basepoint();
+ test_bad_scalar();
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/recovery/Makefile.am.include b/crypto/secp256k1/libsecp256k1/src/modules/recovery/Makefile.am.include
new file mode 100644
index 000000000..bf23c26e7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/recovery/Makefile.am.include
@@ -0,0 +1,8 @@
+include_HEADERS += include/secp256k1_recovery.h
+noinst_HEADERS += src/modules/recovery/main_impl.h
+noinst_HEADERS += src/modules/recovery/tests_impl.h
+if USE_BENCHMARK
+noinst_PROGRAMS += bench_recover
+bench_recover_SOURCES = src/bench_recover.c
+bench_recover_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB)
+endif
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go
new file mode 100644
index 000000000..b9491f0cb
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package recovery
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h b/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h
new file mode 100644
index 000000000..c6fbe2398
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h
@@ -0,0 +1,193 @@
+/**********************************************************************
+ * Copyright (c) 2013-2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_MODULE_RECOVERY_MAIN_
+#define _SECP256K1_MODULE_RECOVERY_MAIN_
+
+#include "include/secp256k1_recovery.h"
+
+static void secp256k1_ecdsa_recoverable_signature_load(const secp256k1_context* ctx, secp256k1_scalar* r, secp256k1_scalar* s, int* recid, const secp256k1_ecdsa_recoverable_signature* sig) {
+ (void)ctx;
+ if (sizeof(secp256k1_scalar) == 32) {
+ /* When the secp256k1_scalar type is exactly 32 byte, use its
+ * representation inside secp256k1_ecdsa_signature, as conversion is very fast.
+ * Note that secp256k1_ecdsa_signature_save must use the same representation. */
+ memcpy(r, &sig->data[0], 32);
+ memcpy(s, &sig->data[32], 32);
+ } else {
+ secp256k1_scalar_set_b32(r, &sig->data[0], NULL);
+ secp256k1_scalar_set_b32(s, &sig->data[32], NULL);
+ }
+ *recid = sig->data[64];
+}
+
+static void secp256k1_ecdsa_recoverable_signature_save(secp256k1_ecdsa_recoverable_signature* sig, const secp256k1_scalar* r, const secp256k1_scalar* s, int recid) {
+ if (sizeof(secp256k1_scalar) == 32) {
+ memcpy(&sig->data[0], r, 32);
+ memcpy(&sig->data[32], s, 32);
+ } else {
+ secp256k1_scalar_get_b32(&sig->data[0], r);
+ secp256k1_scalar_get_b32(&sig->data[32], s);
+ }
+ sig->data[64] = recid;
+}
+
+int secp256k1_ecdsa_recoverable_signature_parse_compact(const secp256k1_context* ctx, secp256k1_ecdsa_recoverable_signature* sig, const unsigned char *input64, int recid) {
+ secp256k1_scalar r, s;
+ int ret = 1;
+ int overflow = 0;
+
+ (void)ctx;
+ ARG_CHECK(sig != NULL);
+ ARG_CHECK(input64 != NULL);
+ ARG_CHECK(recid >= 0 && recid <= 3);
+
+ secp256k1_scalar_set_b32(&r, &input64[0], &overflow);
+ ret &= !overflow;
+ secp256k1_scalar_set_b32(&s, &input64[32], &overflow);
+ ret &= !overflow;
+ if (ret) {
+ secp256k1_ecdsa_recoverable_signature_save(sig, &r, &s, recid);
+ } else {
+ memset(sig, 0, sizeof(*sig));
+ }
+ return ret;
+}
+
+int secp256k1_ecdsa_recoverable_signature_serialize_compact(const secp256k1_context* ctx, unsigned char *output64, int *recid, const secp256k1_ecdsa_recoverable_signature* sig) {
+ secp256k1_scalar r, s;
+
+ (void)ctx;
+ ARG_CHECK(output64 != NULL);
+ ARG_CHECK(sig != NULL);
+ ARG_CHECK(recid != NULL);
+
+ secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, recid, sig);
+ secp256k1_scalar_get_b32(&output64[0], &r);
+ secp256k1_scalar_get_b32(&output64[32], &s);
+ return 1;
+}
+
+int secp256k1_ecdsa_recoverable_signature_convert(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const secp256k1_ecdsa_recoverable_signature* sigin) {
+ secp256k1_scalar r, s;
+ int recid;
+
+ (void)ctx;
+ ARG_CHECK(sig != NULL);
+ ARG_CHECK(sigin != NULL);
+
+ secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, sigin);
+ secp256k1_ecdsa_signature_save(sig, &r, &s);
+ return 1;
+}
+
+static int secp256k1_ecdsa_sig_recover(const secp256k1_ecmult_context *ctx, const secp256k1_scalar *sigr, const secp256k1_scalar* sigs, secp256k1_ge *pubkey, const secp256k1_scalar *message, int recid) {
+ unsigned char brx[32];
+ secp256k1_fe fx;
+ secp256k1_ge x;
+ secp256k1_gej xj;
+ secp256k1_scalar rn, u1, u2;
+ secp256k1_gej qj;
+ int r;
+
+ if (secp256k1_scalar_is_zero(sigr) || secp256k1_scalar_is_zero(sigs)) {
+ return 0;
+ }
+
+ secp256k1_scalar_get_b32(brx, sigr);
+ r = secp256k1_fe_set_b32(&fx, brx);
+ (void)r;
+ VERIFY_CHECK(r); /* brx comes from a scalar, so is less than the order; certainly less than p */
+ if (recid & 2) {
+ if (secp256k1_fe_cmp_var(&fx, &secp256k1_ecdsa_const_p_minus_order) >= 0) {
+ return 0;
+ }
+ secp256k1_fe_add(&fx, &secp256k1_ecdsa_const_order_as_fe);
+ }
+ if (!secp256k1_ge_set_xo_var(&x, &fx, recid & 1)) {
+ return 0;
+ }
+ secp256k1_gej_set_ge(&xj, &x);
+ secp256k1_scalar_inverse_var(&rn, sigr);
+ secp256k1_scalar_mul(&u1, &rn, message);
+ secp256k1_scalar_negate(&u1, &u1);
+ secp256k1_scalar_mul(&u2, &rn, sigs);
+ secp256k1_ecmult(ctx, &qj, &xj, &u2, &u1);
+ secp256k1_ge_set_gej_var(pubkey, &qj);
+ return !secp256k1_gej_is_infinity(&qj);
+}
+
+int secp256k1_ecdsa_sign_recoverable(const secp256k1_context* ctx, secp256k1_ecdsa_recoverable_signature *signature, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void* noncedata) {
+ secp256k1_scalar r, s;
+ secp256k1_scalar sec, non, msg;
+ int recid;
+ int ret = 0;
+ int overflow = 0;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
+ ARG_CHECK(msg32 != NULL);
+ ARG_CHECK(signature != NULL);
+ ARG_CHECK(seckey != NULL);
+ if (noncefp == NULL) {
+ noncefp = secp256k1_nonce_function_default;
+ }
+
+ secp256k1_scalar_set_b32(&sec, seckey, &overflow);
+ /* Fail if the secret key is invalid. */
+ if (!overflow && !secp256k1_scalar_is_zero(&sec)) {
+ unsigned char nonce32[32];
+ unsigned int count = 0;
+ secp256k1_scalar_set_b32(&msg, msg32, NULL);
+ while (1) {
+ ret = noncefp(nonce32, msg32, seckey, NULL, (void*)noncedata, count);
+ if (!ret) {
+ break;
+ }
+ secp256k1_scalar_set_b32(&non, nonce32, &overflow);
+ if (!secp256k1_scalar_is_zero(&non) && !overflow) {
+ if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &r, &s, &sec, &msg, &non, &recid)) {
+ break;
+ }
+ }
+ count++;
+ }
+ memset(nonce32, 0, 32);
+ secp256k1_scalar_clear(&msg);
+ secp256k1_scalar_clear(&non);
+ secp256k1_scalar_clear(&sec);
+ }
+ if (ret) {
+ secp256k1_ecdsa_recoverable_signature_save(signature, &r, &s, recid);
+ } else {
+ memset(signature, 0, sizeof(*signature));
+ }
+ return ret;
+}
+
+int secp256k1_ecdsa_recover(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const secp256k1_ecdsa_recoverable_signature *signature, const unsigned char *msg32) {
+ secp256k1_ge q;
+ secp256k1_scalar r, s;
+ secp256k1_scalar m;
+ int recid;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
+ ARG_CHECK(msg32 != NULL);
+ ARG_CHECK(signature != NULL);
+ ARG_CHECK(pubkey != NULL);
+
+ secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, signature);
+ VERIFY_CHECK(recid >= 0 && recid < 4); /* should have been caught in parse_compact */
+ secp256k1_scalar_set_b32(&m, msg32, NULL);
+ if (secp256k1_ecdsa_sig_recover(&ctx->ecmult_ctx, &r, &s, &q, &m, recid)) {
+ secp256k1_pubkey_save(pubkey, &q);
+ return 1;
+ } else {
+ memset(pubkey, 0, sizeof(*pubkey));
+ return 0;
+ }
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/recovery/tests_impl.h b/crypto/secp256k1/libsecp256k1/src/modules/recovery/tests_impl.h
new file mode 100644
index 000000000..765c7dd81
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/recovery/tests_impl.h
@@ -0,0 +1,393 @@
+/**********************************************************************
+ * Copyright (c) 2013-2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_MODULE_RECOVERY_TESTS_
+#define _SECP256K1_MODULE_RECOVERY_TESTS_
+
+static int recovery_test_nonce_function(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
+ (void) msg32;
+ (void) key32;
+ (void) algo16;
+ (void) data;
+
+ /* On the first run, return 0 to force a second run */
+ if (counter == 0) {
+ memset(nonce32, 0, 32);
+ return 1;
+ }
+ /* On the second run, return an overflow to force a third run */
+ if (counter == 1) {
+ memset(nonce32, 0xff, 32);
+ return 1;
+ }
+ /* On the next run, return a valid nonce, but flip a coin as to whether or not to fail signing. */
+ memset(nonce32, 1, 32);
+ return secp256k1_rand_bits(1);
+}
+
+void test_ecdsa_recovery_api(void) {
+ /* Setup contexts that just count errors */
+ secp256k1_context *none = secp256k1_context_create(SECP256K1_CONTEXT_NONE);
+ secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
+ secp256k1_context *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
+ secp256k1_context *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+ secp256k1_pubkey pubkey;
+ secp256k1_pubkey recpubkey;
+ secp256k1_ecdsa_signature normal_sig;
+ secp256k1_ecdsa_recoverable_signature recsig;
+ unsigned char privkey[32] = { 1 };
+ unsigned char message[32] = { 2 };
+ int32_t ecount = 0;
+ int recid = 0;
+ unsigned char sig[74];
+ unsigned char zero_privkey[32] = { 0 };
+ unsigned char over_privkey[32] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+
+ secp256k1_context_set_error_callback(none, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_error_callback(sign, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_error_callback(vrfy, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_error_callback(both, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_illegal_callback(none, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_illegal_callback(sign, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_illegal_callback(vrfy, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_illegal_callback(both, counting_illegal_callback_fn, &ecount);
+
+ /* Construct and verify corresponding public key. */
+ CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1);
+
+ /* Check bad contexts and NULLs for signing */
+ ecount = 0;
+ CHECK(secp256k1_ecdsa_sign_recoverable(none, &recsig, message, privkey, NULL, NULL) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdsa_sign_recoverable(sign, &recsig, message, privkey, NULL, NULL) == 1);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdsa_sign_recoverable(vrfy, &recsig, message, privkey, NULL, NULL) == 0);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, NULL, NULL) == 1);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, NULL, message, privkey, NULL, NULL) == 0);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, NULL, privkey, NULL, NULL) == 0);
+ CHECK(ecount == 4);
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, NULL, NULL, NULL) == 0);
+ CHECK(ecount == 5);
+ /* This will fail or succeed randomly, and in either case will not ARG_CHECK failure */
+ secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, recovery_test_nonce_function, NULL);
+ CHECK(ecount == 5);
+ /* These will all fail, but not in ARG_CHECK way */
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, zero_privkey, NULL, NULL) == 0);
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, over_privkey, NULL, NULL) == 0);
+ /* This one will succeed. */
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, NULL, NULL) == 1);
+ CHECK(ecount == 5);
+
+ /* Check signing with a goofy nonce function */
+
+ /* Check bad contexts and NULLs for recovery */
+ ecount = 0;
+ CHECK(secp256k1_ecdsa_recover(none, &recpubkey, &recsig, message) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdsa_recover(sign, &recpubkey, &recsig, message) == 0);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_recover(vrfy, &recpubkey, &recsig, message) == 1);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_recover(both, &recpubkey, &recsig, message) == 1);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_recover(both, NULL, &recsig, message) == 0);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_ecdsa_recover(both, &recpubkey, NULL, message) == 0);
+ CHECK(ecount == 4);
+ CHECK(secp256k1_ecdsa_recover(both, &recpubkey, &recsig, NULL) == 0);
+ CHECK(ecount == 5);
+
+ /* Check NULLs for conversion */
+ CHECK(secp256k1_ecdsa_sign(both, &normal_sig, message, privkey, NULL, NULL) == 1);
+ ecount = 0;
+ CHECK(secp256k1_ecdsa_recoverable_signature_convert(both, NULL, &recsig) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdsa_recoverable_signature_convert(both, &normal_sig, NULL) == 0);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_recoverable_signature_convert(both, &normal_sig, &recsig) == 1);
+
+ /* Check NULLs for de/serialization */
+ CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, NULL, NULL) == 1);
+ ecount = 0;
+ CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, NULL, &recid, &recsig) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, sig, NULL, &recsig) == 0);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, sig, &recid, NULL) == 0);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, sig, &recid, &recsig) == 1);
+
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, NULL, sig, recid) == 0);
+ CHECK(ecount == 4);
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, NULL, recid) == 0);
+ CHECK(ecount == 5);
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, sig, -1) == 0);
+ CHECK(ecount == 6);
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, sig, 5) == 0);
+ CHECK(ecount == 7);
+ /* overflow in signature will fail but not affect ecount */
+ memcpy(sig, over_privkey, 32);
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, sig, recid) == 0);
+ CHECK(ecount == 7);
+
+ /* cleanup */
+ secp256k1_context_destroy(none);
+ secp256k1_context_destroy(sign);
+ secp256k1_context_destroy(vrfy);
+ secp256k1_context_destroy(both);
+}
+
+void test_ecdsa_recovery_end_to_end(void) {
+ unsigned char extra[32] = {0x00};
+ unsigned char privkey[32];
+ unsigned char message[32];
+ secp256k1_ecdsa_signature signature[5];
+ secp256k1_ecdsa_recoverable_signature rsignature[5];
+ unsigned char sig[74];
+ secp256k1_pubkey pubkey;
+ secp256k1_pubkey recpubkey;
+ int recid = 0;
+
+ /* Generate a random key and message. */
+ {
+ secp256k1_scalar msg, key;
+ random_scalar_order_test(&msg);
+ random_scalar_order_test(&key);
+ secp256k1_scalar_get_b32(privkey, &key);
+ secp256k1_scalar_get_b32(message, &msg);
+ }
+
+ /* Construct and verify corresponding public key. */
+ CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1);
+
+ /* Serialize/parse compact and verify/recover. */
+ extra[0] = 0;
+ CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[0], message, privkey, NULL, NULL) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, &signature[0], message, privkey, NULL, NULL) == 1);
+ CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[4], message, privkey, NULL, NULL) == 1);
+ CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[1], message, privkey, NULL, extra) == 1);
+ extra[31] = 1;
+ CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[2], message, privkey, NULL, extra) == 1);
+ extra[31] = 0;
+ extra[0] = 1;
+ CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[3], message, privkey, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1);
+ CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1);
+ CHECK(memcmp(&signature[4], &signature[0], 64) == 0);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1);
+ memset(&rsignature[4], 0, sizeof(rsignature[4]));
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1);
+ CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1);
+ /* Parse compact (with recovery id) and recover. */
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1);
+ CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 1);
+ CHECK(memcmp(&pubkey, &recpubkey, sizeof(pubkey)) == 0);
+ /* Serialize/destroy/parse signature and verify again. */
+ CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1);
+ sig[secp256k1_rand_bits(6)] += 1 + secp256k1_rand_int(255);
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1);
+ CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 0);
+ /* Recover again */
+ CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 0 ||
+ memcmp(&pubkey, &recpubkey, sizeof(pubkey)) != 0);
+}
+
+/* Tests several edge cases. */
+void test_ecdsa_recovery_edge_cases(void) {
+ const unsigned char msg32[32] = {
+ 'T', 'h', 'i', 's', ' ', 'i', 's', ' ',
+ 'a', ' ', 'v', 'e', 'r', 'y', ' ', 's',
+ 'e', 'c', 'r', 'e', 't', ' ', 'm', 'e',
+ 's', 's', 'a', 'g', 'e', '.', '.', '.'
+ };
+ const unsigned char sig64[64] = {
+ /* Generated by signing the above message with nonce 'This is the nonce we will use...'
+ * and secret key 0 (which is not valid), resulting in recid 0. */
+ 0x67, 0xCB, 0x28, 0x5F, 0x9C, 0xD1, 0x94, 0xE8,
+ 0x40, 0xD6, 0x29, 0x39, 0x7A, 0xF5, 0x56, 0x96,
+ 0x62, 0xFD, 0xE4, 0x46, 0x49, 0x99, 0x59, 0x63,
+ 0x17, 0x9A, 0x7D, 0xD1, 0x7B, 0xD2, 0x35, 0x32,
+ 0x4B, 0x1B, 0x7D, 0xF3, 0x4C, 0xE1, 0xF6, 0x8E,
+ 0x69, 0x4F, 0xF6, 0xF1, 0x1A, 0xC7, 0x51, 0xDD,
+ 0x7D, 0xD7, 0x3E, 0x38, 0x7E, 0xE4, 0xFC, 0x86,
+ 0x6E, 0x1B, 0xE8, 0xEC, 0xC7, 0xDD, 0x95, 0x57
+ };
+ secp256k1_pubkey pubkey;
+ /* signature (r,s) = (4,4), which can be recovered with all 4 recids. */
+ const unsigned char sigb64[64] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ };
+ secp256k1_pubkey pubkeyb;
+ secp256k1_ecdsa_recoverable_signature rsig;
+ secp256k1_ecdsa_signature sig;
+ int recid;
+
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 0));
+ CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 1));
+ CHECK(secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 2));
+ CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 3));
+ CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
+
+ for (recid = 0; recid < 4; recid++) {
+ int i;
+ int recid2;
+ /* (4,4) encoded in DER. */
+ unsigned char sigbder[8] = {0x30, 0x06, 0x02, 0x01, 0x04, 0x02, 0x01, 0x04};
+ unsigned char sigcder_zr[7] = {0x30, 0x05, 0x02, 0x00, 0x02, 0x01, 0x01};
+ unsigned char sigcder_zs[7] = {0x30, 0x05, 0x02, 0x01, 0x01, 0x02, 0x00};
+ unsigned char sigbderalt1[39] = {
+ 0x30, 0x25, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x04,
+ };
+ unsigned char sigbderalt2[39] = {
+ 0x30, 0x25, 0x02, 0x01, 0x04, 0x02, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ };
+ unsigned char sigbderalt3[40] = {
+ 0x30, 0x26, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x04,
+ };
+ unsigned char sigbderalt4[40] = {
+ 0x30, 0x26, 0x02, 0x01, 0x04, 0x02, 0x21, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ };
+ /* (order + r,4) encoded in DER. */
+ unsigned char sigbderlong[40] = {
+ 0x30, 0x26, 0x02, 0x21, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC,
+ 0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E,
+ 0x8C, 0xD0, 0x36, 0x41, 0x45, 0x02, 0x01, 0x04
+ };
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigb64, recid) == 1);
+ CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 1);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 1);
+ for (recid2 = 0; recid2 < 4; recid2++) {
+ secp256k1_pubkey pubkey2b;
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigb64, recid2) == 1);
+ CHECK(secp256k1_ecdsa_recover(ctx, &pubkey2b, &rsig, msg32) == 1);
+ /* Verifying with (order + r,4) should always fail. */
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderlong, sizeof(sigbderlong)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
+ }
+ /* DER parsing tests. */
+ /* Zero length r/s. */
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder_zr, sizeof(sigcder_zr)) == 0);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder_zs, sizeof(sigcder_zs)) == 0);
+ /* Leading zeros. */
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt1, sizeof(sigbderalt1)) == 0);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt2, sizeof(sigbderalt2)) == 0);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt3, sizeof(sigbderalt3)) == 0);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt4, sizeof(sigbderalt4)) == 0);
+ sigbderalt3[4] = 1;
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt3, sizeof(sigbderalt3)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
+ sigbderalt4[7] = 1;
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt4, sizeof(sigbderalt4)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
+ /* Damage signature. */
+ sigbder[7]++;
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
+ sigbder[7]--;
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, 6) == 0);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder) - 1) == 0);
+ for(i = 0; i < 8; i++) {
+ int c;
+ unsigned char orig = sigbder[i];
+ /*Try every single-byte change.*/
+ for (c = 0; c < 256; c++) {
+ if (c == orig ) {
+ continue;
+ }
+ sigbder[i] = c;
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 0 || secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
+ }
+ sigbder[i] = orig;
+ }
+ }
+
+ /* Test r/s equal to zero */
+ {
+ /* (1,1) encoded in DER. */
+ unsigned char sigcder[8] = {0x30, 0x06, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01};
+ unsigned char sigc64[64] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ };
+ secp256k1_pubkey pubkeyc;
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1);
+ CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyc, &rsig, msg32) == 1);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 1);
+ sigcder[4] = 0;
+ sigc64[31] = 0;
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1);
+ CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 0);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 0);
+ sigcder[4] = 1;
+ sigcder[7] = 0;
+ sigc64[31] = 1;
+ sigc64[63] = 0;
+ CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1);
+ CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 0);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 0);
+ }
+}
+
+void run_recovery_tests(void) {
+ int i;
+ for (i = 0; i < count; i++) {
+ test_ecdsa_recovery_api();
+ }
+ for (i = 0; i < 64*count; i++) {
+ test_ecdsa_recovery_end_to_end();
+ }
+ test_ecdsa_recovery_edge_cases();
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/num.h b/crypto/secp256k1/libsecp256k1/src/num.h
new file mode 100644
index 000000000..eff842200
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/num.h
@@ -0,0 +1,74 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_NUM_
+#define _SECP256K1_NUM_
+
+#ifndef USE_NUM_NONE
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#if defined(USE_NUM_GMP)
+#include "num_gmp.h"
+#else
+#error "Please select num implementation"
+#endif
+
+/** Copy a number. */
+static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a);
+
+/** Convert a number's absolute value to a binary big-endian string.
+ * There must be enough place. */
+static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a);
+
+/** Set a number to the value of a binary big-endian string. */
+static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen);
+
+/** Compute a modular inverse. The input must be less than the modulus. */
+static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m);
+
+/** Compute the jacobi symbol (a|b). b must be positive and odd. */
+static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b);
+
+/** Compare the absolute value of two numbers. */
+static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b);
+
+/** Test whether two number are equal (including sign). */
+static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b);
+
+/** Add two (signed) numbers. */
+static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
+
+/** Subtract two (signed) numbers. */
+static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
+
+/** Multiply two (signed) numbers. */
+static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
+
+/** Replace a number by its remainder modulo m. M's sign is ignored. The result is a number between 0 and m-1,
+ even if r was negative. */
+static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m);
+
+/** Right-shift the passed number by bits. */
+static void secp256k1_num_shift(secp256k1_num *r, int bits);
+
+/** Check whether a number is zero. */
+static int secp256k1_num_is_zero(const secp256k1_num *a);
+
+/** Check whether a number is one. */
+static int secp256k1_num_is_one(const secp256k1_num *a);
+
+/** Check whether a number is strictly negative. */
+static int secp256k1_num_is_neg(const secp256k1_num *a);
+
+/** Change a number's sign. */
+static void secp256k1_num_negate(secp256k1_num *r);
+
+#endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/num_gmp.h b/crypto/secp256k1/libsecp256k1/src/num_gmp.h
new file mode 100644
index 000000000..7dd813088
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/num_gmp.h
@@ -0,0 +1,20 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_NUM_REPR_
+#define _SECP256K1_NUM_REPR_
+
+#include <gmp.h>
+
+#define NUM_LIMBS ((256+GMP_NUMB_BITS-1)/GMP_NUMB_BITS)
+
+typedef struct {
+ mp_limb_t data[2*NUM_LIMBS];
+ int neg;
+ int limbs;
+} secp256k1_num;
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/num_gmp_impl.h b/crypto/secp256k1/libsecp256k1/src/num_gmp_impl.h
new file mode 100644
index 000000000..3a46495ee
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/num_gmp_impl.h
@@ -0,0 +1,288 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_NUM_REPR_IMPL_H_
+#define _SECP256K1_NUM_REPR_IMPL_H_
+
+#include <string.h>
+#include <stdlib.h>
+#include <gmp.h>
+
+#include "util.h"
+#include "num.h"
+
+#ifdef VERIFY
+static void secp256k1_num_sanity(const secp256k1_num *a) {
+ VERIFY_CHECK(a->limbs == 1 || (a->limbs > 1 && a->data[a->limbs-1] != 0));
+}
+#else
+#define secp256k1_num_sanity(a) do { } while(0)
+#endif
+
+static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a) {
+ *r = *a;
+}
+
+static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a) {
+ unsigned char tmp[65];
+ int len = 0;
+ int shift = 0;
+ if (a->limbs>1 || a->data[0] != 0) {
+ len = mpn_get_str(tmp, 256, (mp_limb_t*)a->data, a->limbs);
+ }
+ while (shift < len && tmp[shift] == 0) shift++;
+ VERIFY_CHECK(len-shift <= (int)rlen);
+ memset(r, 0, rlen - len + shift);
+ if (len > shift) {
+ memcpy(r + rlen - len + shift, tmp + shift, len - shift);
+ }
+ memset(tmp, 0, sizeof(tmp));
+}
+
+static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen) {
+ int len;
+ VERIFY_CHECK(alen > 0);
+ VERIFY_CHECK(alen <= 64);
+ len = mpn_set_str(r->data, a, alen, 256);
+ if (len == 0) {
+ r->data[0] = 0;
+ len = 1;
+ }
+ VERIFY_CHECK(len <= NUM_LIMBS*2);
+ r->limbs = len;
+ r->neg = 0;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
+}
+
+static void secp256k1_num_add_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
+ mp_limb_t c = mpn_add(r->data, a->data, a->limbs, b->data, b->limbs);
+ r->limbs = a->limbs;
+ if (c != 0) {
+ VERIFY_CHECK(r->limbs < 2*NUM_LIMBS);
+ r->data[r->limbs++] = c;
+ }
+}
+
+static void secp256k1_num_sub_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
+ mp_limb_t c = mpn_sub(r->data, a->data, a->limbs, b->data, b->limbs);
+ (void)c;
+ VERIFY_CHECK(c == 0);
+ r->limbs = a->limbs;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
+}
+
+static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m) {
+ secp256k1_num_sanity(r);
+ secp256k1_num_sanity(m);
+
+ if (r->limbs >= m->limbs) {
+ mp_limb_t t[2*NUM_LIMBS];
+ mpn_tdiv_qr(t, r->data, 0, r->data, r->limbs, m->data, m->limbs);
+ memset(t, 0, sizeof(t));
+ r->limbs = m->limbs;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
+ }
+
+ if (r->neg && (r->limbs > 1 || r->data[0] != 0)) {
+ secp256k1_num_sub_abs(r, m, r);
+ r->neg = 0;
+ }
+}
+
+static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m) {
+ int i;
+ mp_limb_t g[NUM_LIMBS+1];
+ mp_limb_t u[NUM_LIMBS+1];
+ mp_limb_t v[NUM_LIMBS+1];
+ mp_size_t sn;
+ mp_size_t gn;
+ secp256k1_num_sanity(a);
+ secp256k1_num_sanity(m);
+
+ /** mpn_gcdext computes: (G,S) = gcdext(U,V), where
+ * * G = gcd(U,V)
+ * * G = U*S + V*T
+ * * U has equal or more limbs than V, and V has no padding
+ * If we set U to be (a padded version of) a, and V = m:
+ * G = a*S + m*T
+ * G = a*S mod m
+ * Assuming G=1:
+ * S = 1/a mod m
+ */
+ VERIFY_CHECK(m->limbs <= NUM_LIMBS);
+ VERIFY_CHECK(m->data[m->limbs-1] != 0);
+ for (i = 0; i < m->limbs; i++) {
+ u[i] = (i < a->limbs) ? a->data[i] : 0;
+ v[i] = m->data[i];
+ }
+ sn = NUM_LIMBS+1;
+ gn = mpn_gcdext(g, r->data, &sn, u, m->limbs, v, m->limbs);
+ (void)gn;
+ VERIFY_CHECK(gn == 1);
+ VERIFY_CHECK(g[0] == 1);
+ r->neg = a->neg ^ m->neg;
+ if (sn < 0) {
+ mpn_sub(r->data, m->data, m->limbs, r->data, -sn);
+ r->limbs = m->limbs;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
+ } else {
+ r->limbs = sn;
+ }
+ memset(g, 0, sizeof(g));
+ memset(u, 0, sizeof(u));
+ memset(v, 0, sizeof(v));
+}
+
+static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b) {
+ int ret;
+ mpz_t ga, gb;
+ secp256k1_num_sanity(a);
+ secp256k1_num_sanity(b);
+ VERIFY_CHECK(!b->neg && (b->limbs > 0) && (b->data[0] & 1));
+
+ mpz_inits(ga, gb, NULL);
+
+ mpz_import(gb, b->limbs, -1, sizeof(mp_limb_t), 0, 0, b->data);
+ mpz_import(ga, a->limbs, -1, sizeof(mp_limb_t), 0, 0, a->data);
+ if (a->neg) {
+ mpz_neg(ga, ga);
+ }
+
+ ret = mpz_jacobi(ga, gb);
+
+ mpz_clears(ga, gb, NULL);
+
+ return ret;
+}
+
+static int secp256k1_num_is_one(const secp256k1_num *a) {
+ return (a->limbs == 1 && a->data[0] == 1);
+}
+
+static int secp256k1_num_is_zero(const secp256k1_num *a) {
+ return (a->limbs == 1 && a->data[0] == 0);
+}
+
+static int secp256k1_num_is_neg(const secp256k1_num *a) {
+ return (a->limbs > 1 || a->data[0] != 0) && a->neg;
+}
+
+static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b) {
+ if (a->limbs > b->limbs) {
+ return 1;
+ }
+ if (a->limbs < b->limbs) {
+ return -1;
+ }
+ return mpn_cmp(a->data, b->data, a->limbs);
+}
+
+static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b) {
+ if (a->limbs > b->limbs) {
+ return 0;
+ }
+ if (a->limbs < b->limbs) {
+ return 0;
+ }
+ if ((a->neg && !secp256k1_num_is_zero(a)) != (b->neg && !secp256k1_num_is_zero(b))) {
+ return 0;
+ }
+ return mpn_cmp(a->data, b->data, a->limbs) == 0;
+}
+
+static void secp256k1_num_subadd(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b, int bneg) {
+ if (!(b->neg ^ bneg ^ a->neg)) { /* a and b have the same sign */
+ r->neg = a->neg;
+ if (a->limbs >= b->limbs) {
+ secp256k1_num_add_abs(r, a, b);
+ } else {
+ secp256k1_num_add_abs(r, b, a);
+ }
+ } else {
+ if (secp256k1_num_cmp(a, b) > 0) {
+ r->neg = a->neg;
+ secp256k1_num_sub_abs(r, a, b);
+ } else {
+ r->neg = b->neg ^ bneg;
+ secp256k1_num_sub_abs(r, b, a);
+ }
+ }
+}
+
+static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
+ secp256k1_num_sanity(a);
+ secp256k1_num_sanity(b);
+ secp256k1_num_subadd(r, a, b, 0);
+}
+
+static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
+ secp256k1_num_sanity(a);
+ secp256k1_num_sanity(b);
+ secp256k1_num_subadd(r, a, b, 1);
+}
+
+static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
+ mp_limb_t tmp[2*NUM_LIMBS+1];
+ secp256k1_num_sanity(a);
+ secp256k1_num_sanity(b);
+
+ VERIFY_CHECK(a->limbs + b->limbs <= 2*NUM_LIMBS+1);
+ if ((a->limbs==1 && a->data[0]==0) || (b->limbs==1 && b->data[0]==0)) {
+ r->limbs = 1;
+ r->neg = 0;
+ r->data[0] = 0;
+ return;
+ }
+ if (a->limbs >= b->limbs) {
+ mpn_mul(tmp, a->data, a->limbs, b->data, b->limbs);
+ } else {
+ mpn_mul(tmp, b->data, b->limbs, a->data, a->limbs);
+ }
+ r->limbs = a->limbs + b->limbs;
+ if (r->limbs > 1 && tmp[r->limbs - 1]==0) {
+ r->limbs--;
+ }
+ VERIFY_CHECK(r->limbs <= 2*NUM_LIMBS);
+ mpn_copyi(r->data, tmp, r->limbs);
+ r->neg = a->neg ^ b->neg;
+ memset(tmp, 0, sizeof(tmp));
+}
+
+static void secp256k1_num_shift(secp256k1_num *r, int bits) {
+ if (bits % GMP_NUMB_BITS) {
+ /* Shift within limbs. */
+ mpn_rshift(r->data, r->data, r->limbs, bits % GMP_NUMB_BITS);
+ }
+ if (bits >= GMP_NUMB_BITS) {
+ int i;
+ /* Shift full limbs. */
+ for (i = 0; i < r->limbs; i++) {
+ int index = i + (bits / GMP_NUMB_BITS);
+ if (index < r->limbs && index < 2*NUM_LIMBS) {
+ r->data[i] = r->data[index];
+ } else {
+ r->data[i] = 0;
+ }
+ }
+ }
+ while (r->limbs>1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
+}
+
+static void secp256k1_num_negate(secp256k1_num *r) {
+ r->neg ^= 1;
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/num_impl.h b/crypto/secp256k1/libsecp256k1/src/num_impl.h
new file mode 100644
index 000000000..0b0e3a072
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/num_impl.h
@@ -0,0 +1,24 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_NUM_IMPL_H_
+#define _SECP256K1_NUM_IMPL_H_
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#include "num.h"
+
+#if defined(USE_NUM_GMP)
+#include "num_gmp_impl.h"
+#elif defined(USE_NUM_NONE)
+/* Nothing. */
+#else
+#error "Please select num implementation"
+#endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar.h b/crypto/secp256k1/libsecp256k1/src/scalar.h
new file mode 100644
index 000000000..27e9d8375
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar.h
@@ -0,0 +1,106 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_
+#define _SECP256K1_SCALAR_
+
+#include "num.h"
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#if defined(EXHAUSTIVE_TEST_ORDER)
+#include "scalar_low.h"
+#elif defined(USE_SCALAR_4X64)
+#include "scalar_4x64.h"
+#elif defined(USE_SCALAR_8X32)
+#include "scalar_8x32.h"
+#else
+#error "Please select scalar implementation"
+#endif
+
+/** Clear a scalar to prevent the leak of sensitive data. */
+static void secp256k1_scalar_clear(secp256k1_scalar *r);
+
+/** Access bits from a scalar. All requested bits must belong to the same 32-bit limb. */
+static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count);
+
+/** Access bits from a scalar. Not constant time. */
+static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count);
+
+/** Set a scalar from a big endian byte array. */
+static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow);
+
+/** Set a scalar to an unsigned integer. */
+static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v);
+
+/** Convert a scalar to a byte array. */
+static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a);
+
+/** Add two scalars together (modulo the group order). Returns whether it overflowed. */
+static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b);
+
+/** Conditionally add a power of two to a scalar. The result is not allowed to overflow. */
+static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag);
+
+/** Multiply two scalars (modulo the group order). */
+static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b);
+
+/** Shift a scalar right by some amount strictly between 0 and 16, returning
+ * the low bits that were shifted off */
+static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n);
+
+/** Compute the square of a scalar (modulo the group order). */
+static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a);
+
+/** Compute the inverse of a scalar (modulo the group order). */
+static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *a);
+
+/** Compute the inverse of a scalar (modulo the group order), without constant-time guarantee. */
+static void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *a);
+
+/** Compute the complement of a scalar (modulo the group order). */
+static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a);
+
+/** Check whether a scalar equals zero. */
+static int secp256k1_scalar_is_zero(const secp256k1_scalar *a);
+
+/** Check whether a scalar equals one. */
+static int secp256k1_scalar_is_one(const secp256k1_scalar *a);
+
+/** Check whether a scalar, considered as an nonnegative integer, is even. */
+static int secp256k1_scalar_is_even(const secp256k1_scalar *a);
+
+/** Check whether a scalar is higher than the group order divided by 2. */
+static int secp256k1_scalar_is_high(const secp256k1_scalar *a);
+
+/** Conditionally negate a number, in constant time.
+ * Returns -1 if the number was negated, 1 otherwise */
+static int secp256k1_scalar_cond_negate(secp256k1_scalar *a, int flag);
+
+#ifndef USE_NUM_NONE
+/** Convert a scalar to a number. */
+static void secp256k1_scalar_get_num(secp256k1_num *r, const secp256k1_scalar *a);
+
+/** Get the order of the group as a number. */
+static void secp256k1_scalar_order_get_num(secp256k1_num *r);
+#endif
+
+/** Compare two scalars. */
+static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b);
+
+#ifdef USE_ENDOMORPHISM
+/** Find r1 and r2 such that r1+r2*2^128 = a. */
+static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a);
+/** Find r1 and r2 such that r1+r2*lambda = a, and r1 and r2 are maximum 128 bits long (see secp256k1_gej_mul_lambda). */
+static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a);
+#endif
+
+/** Multiply a and b (without taking the modulus!), divide by 2**shift, and round to the nearest integer. Shift must be at least 256. */
+static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar_4x64.h b/crypto/secp256k1/libsecp256k1/src/scalar_4x64.h
new file mode 100644
index 000000000..cff406038
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar_4x64.h
@@ -0,0 +1,19 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_REPR_
+#define _SECP256K1_SCALAR_REPR_
+
+#include <stdint.h>
+
+/** A scalar modulo the group order of the secp256k1 curve. */
+typedef struct {
+ uint64_t d[4];
+} secp256k1_scalar;
+
+#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{((uint64_t)(d1)) << 32 | (d0), ((uint64_t)(d3)) << 32 | (d2), ((uint64_t)(d5)) << 32 | (d4), ((uint64_t)(d7)) << 32 | (d6)}}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar_4x64_impl.h b/crypto/secp256k1/libsecp256k1/src/scalar_4x64_impl.h
new file mode 100644
index 000000000..56e7bd82a
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar_4x64_impl.h
@@ -0,0 +1,949 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_
+#define _SECP256K1_SCALAR_REPR_IMPL_H_
+
+/* Limbs of the secp256k1 order. */
+#define SECP256K1_N_0 ((uint64_t)0xBFD25E8CD0364141ULL)
+#define SECP256K1_N_1 ((uint64_t)0xBAAEDCE6AF48A03BULL)
+#define SECP256K1_N_2 ((uint64_t)0xFFFFFFFFFFFFFFFEULL)
+#define SECP256K1_N_3 ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
+
+/* Limbs of 2^256 minus the secp256k1 order. */
+#define SECP256K1_N_C_0 (~SECP256K1_N_0 + 1)
+#define SECP256K1_N_C_1 (~SECP256K1_N_1)
+#define SECP256K1_N_C_2 (1)
+
+/* Limbs of half the secp256k1 order. */
+#define SECP256K1_N_H_0 ((uint64_t)0xDFE92F46681B20A0ULL)
+#define SECP256K1_N_H_1 ((uint64_t)0x5D576E7357A4501DULL)
+#define SECP256K1_N_H_2 ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
+#define SECP256K1_N_H_3 ((uint64_t)0x7FFFFFFFFFFFFFFFULL)
+
+SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) {
+ r->d[0] = 0;
+ r->d[1] = 0;
+ r->d[2] = 0;
+ r->d[3] = 0;
+}
+
+SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) {
+ r->d[0] = v;
+ r->d[1] = 0;
+ r->d[2] = 0;
+ r->d[3] = 0;
+}
+
+SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
+ VERIFY_CHECK((offset + count - 1) >> 6 == offset >> 6);
+ return (a->d[offset >> 6] >> (offset & 0x3F)) & ((((uint64_t)1) << count) - 1);
+}
+
+SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
+ VERIFY_CHECK(count < 32);
+ VERIFY_CHECK(offset + count <= 256);
+ if ((offset + count - 1) >> 6 == offset >> 6) {
+ return secp256k1_scalar_get_bits(a, offset, count);
+ } else {
+ VERIFY_CHECK((offset >> 6) + 1 < 4);
+ return ((a->d[offset >> 6] >> (offset & 0x3F)) | (a->d[(offset >> 6) + 1] << (64 - (offset & 0x3F)))) & ((((uint64_t)1) << count) - 1);
+ }
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) {
+ int yes = 0;
+ int no = 0;
+ no |= (a->d[3] < SECP256K1_N_3); /* No need for a > check. */
+ no |= (a->d[2] < SECP256K1_N_2);
+ yes |= (a->d[2] > SECP256K1_N_2) & ~no;
+ no |= (a->d[1] < SECP256K1_N_1);
+ yes |= (a->d[1] > SECP256K1_N_1) & ~no;
+ yes |= (a->d[0] >= SECP256K1_N_0) & ~no;
+ return yes;
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_reduce(secp256k1_scalar *r, unsigned int overflow) {
+ uint128_t t;
+ VERIFY_CHECK(overflow <= 1);
+ t = (uint128_t)r->d[0] + overflow * SECP256K1_N_C_0;
+ r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)r->d[1] + overflow * SECP256K1_N_C_1;
+ r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)r->d[2] + overflow * SECP256K1_N_C_2;
+ r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint64_t)r->d[3];
+ r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL;
+ return overflow;
+}
+
+static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ int overflow;
+ uint128_t t = (uint128_t)a->d[0] + b->d[0];
+ r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)a->d[1] + b->d[1];
+ r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)a->d[2] + b->d[2];
+ r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)a->d[3] + b->d[3];
+ r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ overflow = t + secp256k1_scalar_check_overflow(r);
+ VERIFY_CHECK(overflow == 0 || overflow == 1);
+ secp256k1_scalar_reduce(r, overflow);
+ return overflow;
+}
+
+static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {
+ uint128_t t;
+ VERIFY_CHECK(bit < 256);
+ bit += ((uint32_t) flag - 1) & 0x100; /* forcing (bit >> 6) > 3 makes this a noop */
+ t = (uint128_t)r->d[0] + (((uint64_t)((bit >> 6) == 0)) << (bit & 0x3F));
+ r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)r->d[1] + (((uint64_t)((bit >> 6) == 1)) << (bit & 0x3F));
+ r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)r->d[2] + (((uint64_t)((bit >> 6) == 2)) << (bit & 0x3F));
+ r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
+ t += (uint128_t)r->d[3] + (((uint64_t)((bit >> 6) == 3)) << (bit & 0x3F));
+ r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL;
+#ifdef VERIFY
+ VERIFY_CHECK((t >> 64) == 0);
+ VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);
+#endif
+}
+
+static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) {
+ int over;
+ r->d[0] = (uint64_t)b32[31] | (uint64_t)b32[30] << 8 | (uint64_t)b32[29] << 16 | (uint64_t)b32[28] << 24 | (uint64_t)b32[27] << 32 | (uint64_t)b32[26] << 40 | (uint64_t)b32[25] << 48 | (uint64_t)b32[24] << 56;
+ r->d[1] = (uint64_t)b32[23] | (uint64_t)b32[22] << 8 | (uint64_t)b32[21] << 16 | (uint64_t)b32[20] << 24 | (uint64_t)b32[19] << 32 | (uint64_t)b32[18] << 40 | (uint64_t)b32[17] << 48 | (uint64_t)b32[16] << 56;
+ r->d[2] = (uint64_t)b32[15] | (uint64_t)b32[14] << 8 | (uint64_t)b32[13] << 16 | (uint64_t)b32[12] << 24 | (uint64_t)b32[11] << 32 | (uint64_t)b32[10] << 40 | (uint64_t)b32[9] << 48 | (uint64_t)b32[8] << 56;
+ r->d[3] = (uint64_t)b32[7] | (uint64_t)b32[6] << 8 | (uint64_t)b32[5] << 16 | (uint64_t)b32[4] << 24 | (uint64_t)b32[3] << 32 | (uint64_t)b32[2] << 40 | (uint64_t)b32[1] << 48 | (uint64_t)b32[0] << 56;
+ over = secp256k1_scalar_reduce(r, secp256k1_scalar_check_overflow(r));
+ if (overflow) {
+ *overflow = over;
+ }
+}
+
+static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) {
+ bin[0] = a->d[3] >> 56; bin[1] = a->d[3] >> 48; bin[2] = a->d[3] >> 40; bin[3] = a->d[3] >> 32; bin[4] = a->d[3] >> 24; bin[5] = a->d[3] >> 16; bin[6] = a->d[3] >> 8; bin[7] = a->d[3];
+ bin[8] = a->d[2] >> 56; bin[9] = a->d[2] >> 48; bin[10] = a->d[2] >> 40; bin[11] = a->d[2] >> 32; bin[12] = a->d[2] >> 24; bin[13] = a->d[2] >> 16; bin[14] = a->d[2] >> 8; bin[15] = a->d[2];
+ bin[16] = a->d[1] >> 56; bin[17] = a->d[1] >> 48; bin[18] = a->d[1] >> 40; bin[19] = a->d[1] >> 32; bin[20] = a->d[1] >> 24; bin[21] = a->d[1] >> 16; bin[22] = a->d[1] >> 8; bin[23] = a->d[1];
+ bin[24] = a->d[0] >> 56; bin[25] = a->d[0] >> 48; bin[26] = a->d[0] >> 40; bin[27] = a->d[0] >> 32; bin[28] = a->d[0] >> 24; bin[29] = a->d[0] >> 16; bin[30] = a->d[0] >> 8; bin[31] = a->d[0];
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) {
+ return (a->d[0] | a->d[1] | a->d[2] | a->d[3]) == 0;
+}
+
+static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) {
+ uint64_t nonzero = 0xFFFFFFFFFFFFFFFFULL * (secp256k1_scalar_is_zero(a) == 0);
+ uint128_t t = (uint128_t)(~a->d[0]) + SECP256K1_N_0 + 1;
+ r->d[0] = t & nonzero; t >>= 64;
+ t += (uint128_t)(~a->d[1]) + SECP256K1_N_1;
+ r->d[1] = t & nonzero; t >>= 64;
+ t += (uint128_t)(~a->d[2]) + SECP256K1_N_2;
+ r->d[2] = t & nonzero; t >>= 64;
+ t += (uint128_t)(~a->d[3]) + SECP256K1_N_3;
+ r->d[3] = t & nonzero;
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) {
+ return ((a->d[0] ^ 1) | a->d[1] | a->d[2] | a->d[3]) == 0;
+}
+
+static int secp256k1_scalar_is_high(const secp256k1_scalar *a) {
+ int yes = 0;
+ int no = 0;
+ no |= (a->d[3] < SECP256K1_N_H_3);
+ yes |= (a->d[3] > SECP256K1_N_H_3) & ~no;
+ no |= (a->d[2] < SECP256K1_N_H_2) & ~yes; /* No need for a > check. */
+ no |= (a->d[1] < SECP256K1_N_H_1) & ~yes;
+ yes |= (a->d[1] > SECP256K1_N_H_1) & ~no;
+ yes |= (a->d[0] > SECP256K1_N_H_0) & ~no;
+ return yes;
+}
+
+static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {
+ /* If we are flag = 0, mask = 00...00 and this is a no-op;
+ * if we are flag = 1, mask = 11...11 and this is identical to secp256k1_scalar_negate */
+ uint64_t mask = !flag - 1;
+ uint64_t nonzero = (secp256k1_scalar_is_zero(r) != 0) - 1;
+ uint128_t t = (uint128_t)(r->d[0] ^ mask) + ((SECP256K1_N_0 + 1) & mask);
+ r->d[0] = t & nonzero; t >>= 64;
+ t += (uint128_t)(r->d[1] ^ mask) + (SECP256K1_N_1 & mask);
+ r->d[1] = t & nonzero; t >>= 64;
+ t += (uint128_t)(r->d[2] ^ mask) + (SECP256K1_N_2 & mask);
+ r->d[2] = t & nonzero; t >>= 64;
+ t += (uint128_t)(r->d[3] ^ mask) + (SECP256K1_N_3 & mask);
+ r->d[3] = t & nonzero;
+ return 2 * (mask == 0) - 1;
+}
+
+/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */
+
+/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
+#define muladd(a,b) { \
+ uint64_t tl, th; \
+ { \
+ uint128_t t = (uint128_t)a * b; \
+ th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \
+ tl = t; \
+ } \
+ c0 += tl; /* overflow is handled on the next line */ \
+ th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \
+ c1 += th; /* overflow is handled on the next line */ \
+ c2 += (c1 < th) ? 1 : 0; /* never overflows by contract (verified in the next line) */ \
+ VERIFY_CHECK((c1 >= th) || (c2 != 0)); \
+}
+
+/** Add a*b to the number defined by (c0,c1). c1 must never overflow. */
+#define muladd_fast(a,b) { \
+ uint64_t tl, th; \
+ { \
+ uint128_t t = (uint128_t)a * b; \
+ th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \
+ tl = t; \
+ } \
+ c0 += tl; /* overflow is handled on the next line */ \
+ th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \
+ c1 += th; /* never overflows by contract (verified in the next line) */ \
+ VERIFY_CHECK(c1 >= th); \
+}
+
+/** Add 2*a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
+#define muladd2(a,b) { \
+ uint64_t tl, th, th2, tl2; \
+ { \
+ uint128_t t = (uint128_t)a * b; \
+ th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \
+ tl = t; \
+ } \
+ th2 = th + th; /* at most 0xFFFFFFFFFFFFFFFE (in case th was 0x7FFFFFFFFFFFFFFF) */ \
+ c2 += (th2 < th) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((th2 >= th) || (c2 != 0)); \
+ tl2 = tl + tl; /* at most 0xFFFFFFFFFFFFFFFE (in case the lowest 63 bits of tl were 0x7FFFFFFFFFFFFFFF) */ \
+ th2 += (tl2 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \
+ c0 += tl2; /* overflow is handled on the next line */ \
+ th2 += (c0 < tl2) ? 1 : 0; /* second overflow is handled on the next line */ \
+ c2 += (c0 < tl2) & (th2 == 0); /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((c0 >= tl2) || (th2 != 0) || (c2 != 0)); \
+ c1 += th2; /* overflow is handled on the next line */ \
+ c2 += (c1 < th2) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((c1 >= th2) || (c2 != 0)); \
+}
+
+/** Add a to the number defined by (c0,c1,c2). c2 must never overflow. */
+#define sumadd(a) { \
+ unsigned int over; \
+ c0 += (a); /* overflow is handled on the next line */ \
+ over = (c0 < (a)) ? 1 : 0; \
+ c1 += over; /* overflow is handled on the next line */ \
+ c2 += (c1 < over) ? 1 : 0; /* never overflows by contract */ \
+}
+
+/** Add a to the number defined by (c0,c1). c1 must never overflow, c2 must be zero. */
+#define sumadd_fast(a) { \
+ c0 += (a); /* overflow is handled on the next line */ \
+ c1 += (c0 < (a)) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((c1 != 0) | (c0 >= (a))); \
+ VERIFY_CHECK(c2 == 0); \
+}
+
+/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. */
+#define extract(n) { \
+ (n) = c0; \
+ c0 = c1; \
+ c1 = c2; \
+ c2 = 0; \
+}
+
+/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. c2 is required to be zero. */
+#define extract_fast(n) { \
+ (n) = c0; \
+ c0 = c1; \
+ c1 = 0; \
+ VERIFY_CHECK(c2 == 0); \
+}
+
+static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint64_t *l) {
+#ifdef USE_ASM_X86_64
+ /* Reduce 512 bits into 385. */
+ uint64_t m0, m1, m2, m3, m4, m5, m6;
+ uint64_t p0, p1, p2, p3, p4;
+ uint64_t c;
+
+ __asm__ __volatile__(
+ /* Preload. */
+ "movq 32(%%rsi), %%r11\n"
+ "movq 40(%%rsi), %%r12\n"
+ "movq 48(%%rsi), %%r13\n"
+ "movq 56(%%rsi), %%r14\n"
+ /* Initialize r8,r9,r10 */
+ "movq 0(%%rsi), %%r8\n"
+ "xorq %%r9, %%r9\n"
+ "xorq %%r10, %%r10\n"
+ /* (r8,r9) += n0 * c0 */
+ "movq %8, %%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ /* extract m0 */
+ "movq %%r8, %q0\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r10) += l1 */
+ "addq 8(%%rsi), %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r9,r10,r8) += n1 * c0 */
+ "movq %8, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r10,r8) += n0 * c1 */
+ "movq %9, %%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* extract m1 */
+ "movq %%r9, %q1\n"
+ "xorq %%r9, %%r9\n"
+ /* (r10,r8,r9) += l2 */
+ "addq 16(%%rsi), %%r10\n"
+ "adcq $0, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += n2 * c0 */
+ "movq %8, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += n1 * c1 */
+ "movq %9, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += n0 */
+ "addq %%r11, %%r10\n"
+ "adcq $0, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* extract m2 */
+ "movq %%r10, %q2\n"
+ "xorq %%r10, %%r10\n"
+ /* (r8,r9,r10) += l3 */
+ "addq 24(%%rsi), %%r8\n"
+ "adcq $0, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r8,r9,r10) += n3 * c0 */
+ "movq %8, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r8,r9,r10) += n2 * c1 */
+ "movq %9, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r8,r9,r10) += n1 */
+ "addq %%r12, %%r8\n"
+ "adcq $0, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* extract m3 */
+ "movq %%r8, %q3\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r10,r8) += n3 * c1 */
+ "movq %9, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r10,r8) += n2 */
+ "addq %%r13, %%r9\n"
+ "adcq $0, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* extract m4 */
+ "movq %%r9, %q4\n"
+ /* (r10,r8) += n3 */
+ "addq %%r14, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* extract m5 */
+ "movq %%r10, %q5\n"
+ /* extract m6 */
+ "movq %%r8, %q6\n"
+ : "=g"(m0), "=g"(m1), "=g"(m2), "=g"(m3), "=g"(m4), "=g"(m5), "=g"(m6)
+ : "S"(l), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
+ : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc");
+
+ /* Reduce 385 bits into 258. */
+ __asm__ __volatile__(
+ /* Preload */
+ "movq %q9, %%r11\n"
+ "movq %q10, %%r12\n"
+ "movq %q11, %%r13\n"
+ /* Initialize (r8,r9,r10) */
+ "movq %q5, %%r8\n"
+ "xorq %%r9, %%r9\n"
+ "xorq %%r10, %%r10\n"
+ /* (r8,r9) += m4 * c0 */
+ "movq %12, %%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ /* extract p0 */
+ "movq %%r8, %q0\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r10) += m1 */
+ "addq %q6, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r9,r10,r8) += m5 * c0 */
+ "movq %12, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r10,r8) += m4 * c1 */
+ "movq %13, %%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* extract p1 */
+ "movq %%r9, %q1\n"
+ "xorq %%r9, %%r9\n"
+ /* (r10,r8,r9) += m2 */
+ "addq %q7, %%r10\n"
+ "adcq $0, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += m6 * c0 */
+ "movq %12, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += m5 * c1 */
+ "movq %13, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += m4 */
+ "addq %%r11, %%r10\n"
+ "adcq $0, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* extract p2 */
+ "movq %%r10, %q2\n"
+ /* (r8,r9) += m3 */
+ "addq %q8, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r8,r9) += m6 * c1 */
+ "movq %13, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ /* (r8,r9) += m5 */
+ "addq %%r12, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* extract p3 */
+ "movq %%r8, %q3\n"
+ /* (r9) += m6 */
+ "addq %%r13, %%r9\n"
+ /* extract p4 */
+ "movq %%r9, %q4\n"
+ : "=&g"(p0), "=&g"(p1), "=&g"(p2), "=g"(p3), "=g"(p4)
+ : "g"(m0), "g"(m1), "g"(m2), "g"(m3), "g"(m4), "g"(m5), "g"(m6), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
+ : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "cc");
+
+ /* Reduce 258 bits into 256. */
+ __asm__ __volatile__(
+ /* Preload */
+ "movq %q5, %%r10\n"
+ /* (rax,rdx) = p4 * c0 */
+ "movq %7, %%rax\n"
+ "mulq %%r10\n"
+ /* (rax,rdx) += p0 */
+ "addq %q1, %%rax\n"
+ "adcq $0, %%rdx\n"
+ /* extract r0 */
+ "movq %%rax, 0(%q6)\n"
+ /* Move to (r8,r9) */
+ "movq %%rdx, %%r8\n"
+ "xorq %%r9, %%r9\n"
+ /* (r8,r9) += p1 */
+ "addq %q2, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r8,r9) += p4 * c1 */
+ "movq %8, %%rax\n"
+ "mulq %%r10\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ /* Extract r1 */
+ "movq %%r8, 8(%q6)\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r8) += p4 */
+ "addq %%r10, %%r9\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r8) += p2 */
+ "addq %q3, %%r9\n"
+ "adcq $0, %%r8\n"
+ /* Extract r2 */
+ "movq %%r9, 16(%q6)\n"
+ "xorq %%r9, %%r9\n"
+ /* (r8,r9) += p3 */
+ "addq %q4, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* Extract r3 */
+ "movq %%r8, 24(%q6)\n"
+ /* Extract c */
+ "movq %%r9, %q0\n"
+ : "=g"(c)
+ : "g"(p0), "g"(p1), "g"(p2), "g"(p3), "g"(p4), "D"(r), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
+ : "rax", "rdx", "r8", "r9", "r10", "cc", "memory");
+#else
+ uint128_t c;
+ uint64_t c0, c1, c2;
+ uint64_t n0 = l[4], n1 = l[5], n2 = l[6], n3 = l[7];
+ uint64_t m0, m1, m2, m3, m4, m5;
+ uint32_t m6;
+ uint64_t p0, p1, p2, p3;
+ uint32_t p4;
+
+ /* Reduce 512 bits into 385. */
+ /* m[0..6] = l[0..3] + n[0..3] * SECP256K1_N_C. */
+ c0 = l[0]; c1 = 0; c2 = 0;
+ muladd_fast(n0, SECP256K1_N_C_0);
+ extract_fast(m0);
+ sumadd_fast(l[1]);
+ muladd(n1, SECP256K1_N_C_0);
+ muladd(n0, SECP256K1_N_C_1);
+ extract(m1);
+ sumadd(l[2]);
+ muladd(n2, SECP256K1_N_C_0);
+ muladd(n1, SECP256K1_N_C_1);
+ sumadd(n0);
+ extract(m2);
+ sumadd(l[3]);
+ muladd(n3, SECP256K1_N_C_0);
+ muladd(n2, SECP256K1_N_C_1);
+ sumadd(n1);
+ extract(m3);
+ muladd(n3, SECP256K1_N_C_1);
+ sumadd(n2);
+ extract(m4);
+ sumadd_fast(n3);
+ extract_fast(m5);
+ VERIFY_CHECK(c0 <= 1);
+ m6 = c0;
+
+ /* Reduce 385 bits into 258. */
+ /* p[0..4] = m[0..3] + m[4..6] * SECP256K1_N_C. */
+ c0 = m0; c1 = 0; c2 = 0;
+ muladd_fast(m4, SECP256K1_N_C_0);
+ extract_fast(p0);
+ sumadd_fast(m1);
+ muladd(m5, SECP256K1_N_C_0);
+ muladd(m4, SECP256K1_N_C_1);
+ extract(p1);
+ sumadd(m2);
+ muladd(m6, SECP256K1_N_C_0);
+ muladd(m5, SECP256K1_N_C_1);
+ sumadd(m4);
+ extract(p2);
+ sumadd_fast(m3);
+ muladd_fast(m6, SECP256K1_N_C_1);
+ sumadd_fast(m5);
+ extract_fast(p3);
+ p4 = c0 + m6;
+ VERIFY_CHECK(p4 <= 2);
+
+ /* Reduce 258 bits into 256. */
+ /* r[0..3] = p[0..3] + p[4] * SECP256K1_N_C. */
+ c = p0 + (uint128_t)SECP256K1_N_C_0 * p4;
+ r->d[0] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
+ c += p1 + (uint128_t)SECP256K1_N_C_1 * p4;
+ r->d[1] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
+ c += p2 + (uint128_t)p4;
+ r->d[2] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
+ c += p3;
+ r->d[3] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
+#endif
+
+ /* Final reduction of r. */
+ secp256k1_scalar_reduce(r, c + secp256k1_scalar_check_overflow(r));
+}
+
+static void secp256k1_scalar_mul_512(uint64_t l[8], const secp256k1_scalar *a, const secp256k1_scalar *b) {
+#ifdef USE_ASM_X86_64
+ const uint64_t *pb = b->d;
+ __asm__ __volatile__(
+ /* Preload */
+ "movq 0(%%rdi), %%r15\n"
+ "movq 8(%%rdi), %%rbx\n"
+ "movq 16(%%rdi), %%rcx\n"
+ "movq 0(%%rdx), %%r11\n"
+ "movq 8(%%rdx), %%r12\n"
+ "movq 16(%%rdx), %%r13\n"
+ "movq 24(%%rdx), %%r14\n"
+ /* (rax,rdx) = a0 * b0 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r11\n"
+ /* Extract l0 */
+ "movq %%rax, 0(%%rsi)\n"
+ /* (r8,r9,r10) = (rdx) */
+ "movq %%rdx, %%r8\n"
+ "xorq %%r9, %%r9\n"
+ "xorq %%r10, %%r10\n"
+ /* (r8,r9,r10) += a0 * b1 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r8,r9,r10) += a1 * b0 */
+ "movq %%rbx, %%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* Extract l1 */
+ "movq %%r8, 8(%%rsi)\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r10,r8) += a0 * b2 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r10,r8) += a1 * b1 */
+ "movq %%rbx, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r10,r8) += a2 * b0 */
+ "movq %%rcx, %%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* Extract l2 */
+ "movq %%r9, 16(%%rsi)\n"
+ "xorq %%r9, %%r9\n"
+ /* (r10,r8,r9) += a0 * b3 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* Preload a3 */
+ "movq 24(%%rdi), %%r15\n"
+ /* (r10,r8,r9) += a1 * b2 */
+ "movq %%rbx, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += a2 * b1 */
+ "movq %%rcx, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += a3 * b0 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r11\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* Extract l3 */
+ "movq %%r10, 24(%%rsi)\n"
+ "xorq %%r10, %%r10\n"
+ /* (r8,r9,r10) += a1 * b3 */
+ "movq %%rbx, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r8,r9,r10) += a2 * b2 */
+ "movq %%rcx, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r8,r9,r10) += a3 * b1 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* Extract l4 */
+ "movq %%r8, 32(%%rsi)\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r10,r8) += a2 * b3 */
+ "movq %%rcx, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r10,r8) += a3 * b2 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* Extract l5 */
+ "movq %%r9, 40(%%rsi)\n"
+ /* (r10,r8) += a3 * b3 */
+ "movq %%r15, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ /* Extract l6 */
+ "movq %%r10, 48(%%rsi)\n"
+ /* Extract l7 */
+ "movq %%r8, 56(%%rsi)\n"
+ : "+d"(pb)
+ : "S"(l), "D"(a->d)
+ : "rax", "rbx", "rcx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "cc", "memory");
+#else
+ /* 160 bit accumulator. */
+ uint64_t c0 = 0, c1 = 0;
+ uint32_t c2 = 0;
+
+ /* l[0..7] = a[0..3] * b[0..3]. */
+ muladd_fast(a->d[0], b->d[0]);
+ extract_fast(l[0]);
+ muladd(a->d[0], b->d[1]);
+ muladd(a->d[1], b->d[0]);
+ extract(l[1]);
+ muladd(a->d[0], b->d[2]);
+ muladd(a->d[1], b->d[1]);
+ muladd(a->d[2], b->d[0]);
+ extract(l[2]);
+ muladd(a->d[0], b->d[3]);
+ muladd(a->d[1], b->d[2]);
+ muladd(a->d[2], b->d[1]);
+ muladd(a->d[3], b->d[0]);
+ extract(l[3]);
+ muladd(a->d[1], b->d[3]);
+ muladd(a->d[2], b->d[2]);
+ muladd(a->d[3], b->d[1]);
+ extract(l[4]);
+ muladd(a->d[2], b->d[3]);
+ muladd(a->d[3], b->d[2]);
+ extract(l[5]);
+ muladd_fast(a->d[3], b->d[3]);
+ extract_fast(l[6]);
+ VERIFY_CHECK(c1 == 0);
+ l[7] = c0;
+#endif
+}
+
+static void secp256k1_scalar_sqr_512(uint64_t l[8], const secp256k1_scalar *a) {
+#ifdef USE_ASM_X86_64
+ __asm__ __volatile__(
+ /* Preload */
+ "movq 0(%%rdi), %%r11\n"
+ "movq 8(%%rdi), %%r12\n"
+ "movq 16(%%rdi), %%r13\n"
+ "movq 24(%%rdi), %%r14\n"
+ /* (rax,rdx) = a0 * a0 */
+ "movq %%r11, %%rax\n"
+ "mulq %%r11\n"
+ /* Extract l0 */
+ "movq %%rax, 0(%%rsi)\n"
+ /* (r8,r9,r10) = (rdx,0) */
+ "movq %%rdx, %%r8\n"
+ "xorq %%r9, %%r9\n"
+ "xorq %%r10, %%r10\n"
+ /* (r8,r9,r10) += 2 * a0 * a1 */
+ "movq %%r11, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* Extract l1 */
+ "movq %%r8, 8(%%rsi)\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r10,r8) += 2 * a0 * a2 */
+ "movq %%r11, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* (r9,r10,r8) += a1 * a1 */
+ "movq %%r12, %%rax\n"
+ "mulq %%r12\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* Extract l2 */
+ "movq %%r9, 16(%%rsi)\n"
+ "xorq %%r9, %%r9\n"
+ /* (r10,r8,r9) += 2 * a0 * a3 */
+ "movq %%r11, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* (r10,r8,r9) += 2 * a1 * a2 */
+ "movq %%r12, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ "adcq $0, %%r9\n"
+ /* Extract l3 */
+ "movq %%r10, 24(%%rsi)\n"
+ "xorq %%r10, %%r10\n"
+ /* (r8,r9,r10) += 2 * a1 * a3 */
+ "movq %%r12, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* (r8,r9,r10) += a2 * a2 */
+ "movq %%r13, %%rax\n"
+ "mulq %%r13\n"
+ "addq %%rax, %%r8\n"
+ "adcq %%rdx, %%r9\n"
+ "adcq $0, %%r10\n"
+ /* Extract l4 */
+ "movq %%r8, 32(%%rsi)\n"
+ "xorq %%r8, %%r8\n"
+ /* (r9,r10,r8) += 2 * a2 * a3 */
+ "movq %%r13, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ "addq %%rax, %%r9\n"
+ "adcq %%rdx, %%r10\n"
+ "adcq $0, %%r8\n"
+ /* Extract l5 */
+ "movq %%r9, 40(%%rsi)\n"
+ /* (r10,r8) += a3 * a3 */
+ "movq %%r14, %%rax\n"
+ "mulq %%r14\n"
+ "addq %%rax, %%r10\n"
+ "adcq %%rdx, %%r8\n"
+ /* Extract l6 */
+ "movq %%r10, 48(%%rsi)\n"
+ /* Extract l7 */
+ "movq %%r8, 56(%%rsi)\n"
+ :
+ : "S"(l), "D"(a->d)
+ : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc", "memory");
+#else
+ /* 160 bit accumulator. */
+ uint64_t c0 = 0, c1 = 0;
+ uint32_t c2 = 0;
+
+ /* l[0..7] = a[0..3] * b[0..3]. */
+ muladd_fast(a->d[0], a->d[0]);
+ extract_fast(l[0]);
+ muladd2(a->d[0], a->d[1]);
+ extract(l[1]);
+ muladd2(a->d[0], a->d[2]);
+ muladd(a->d[1], a->d[1]);
+ extract(l[2]);
+ muladd2(a->d[0], a->d[3]);
+ muladd2(a->d[1], a->d[2]);
+ extract(l[3]);
+ muladd2(a->d[1], a->d[3]);
+ muladd(a->d[2], a->d[2]);
+ extract(l[4]);
+ muladd2(a->d[2], a->d[3]);
+ extract(l[5]);
+ muladd_fast(a->d[3], a->d[3]);
+ extract_fast(l[6]);
+ VERIFY_CHECK(c1 == 0);
+ l[7] = c0;
+#endif
+}
+
+#undef sumadd
+#undef sumadd_fast
+#undef muladd
+#undef muladd_fast
+#undef muladd2
+#undef extract
+#undef extract_fast
+
+static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ uint64_t l[8];
+ secp256k1_scalar_mul_512(l, a, b);
+ secp256k1_scalar_reduce_512(r, l);
+}
+
+static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) {
+ int ret;
+ VERIFY_CHECK(n > 0);
+ VERIFY_CHECK(n < 16);
+ ret = r->d[0] & ((1 << n) - 1);
+ r->d[0] = (r->d[0] >> n) + (r->d[1] << (64 - n));
+ r->d[1] = (r->d[1] >> n) + (r->d[2] << (64 - n));
+ r->d[2] = (r->d[2] >> n) + (r->d[3] << (64 - n));
+ r->d[3] = (r->d[3] >> n);
+ return ret;
+}
+
+static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) {
+ uint64_t l[8];
+ secp256k1_scalar_sqr_512(l, a);
+ secp256k1_scalar_reduce_512(r, l);
+}
+
+#ifdef USE_ENDOMORPHISM
+static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
+ r1->d[0] = a->d[0];
+ r1->d[1] = a->d[1];
+ r1->d[2] = 0;
+ r1->d[3] = 0;
+ r2->d[0] = a->d[2];
+ r2->d[1] = a->d[3];
+ r2->d[2] = 0;
+ r2->d[3] = 0;
+}
+#endif
+
+SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ return ((a->d[0] ^ b->d[0]) | (a->d[1] ^ b->d[1]) | (a->d[2] ^ b->d[2]) | (a->d[3] ^ b->d[3])) == 0;
+}
+
+SECP256K1_INLINE static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift) {
+ uint64_t l[8];
+ unsigned int shiftlimbs;
+ unsigned int shiftlow;
+ unsigned int shifthigh;
+ VERIFY_CHECK(shift >= 256);
+ secp256k1_scalar_mul_512(l, a, b);
+ shiftlimbs = shift >> 6;
+ shiftlow = shift & 0x3F;
+ shifthigh = 64 - shiftlow;
+ r->d[0] = shift < 512 ? (l[0 + shiftlimbs] >> shiftlow | (shift < 448 && shiftlow ? (l[1 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[1] = shift < 448 ? (l[1 + shiftlimbs] >> shiftlow | (shift < 384 && shiftlow ? (l[2 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[2] = shift < 384 ? (l[2 + shiftlimbs] >> shiftlow | (shift < 320 && shiftlow ? (l[3 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[3] = shift < 320 ? (l[3 + shiftlimbs] >> shiftlow) : 0;
+ secp256k1_scalar_cadd_bit(r, 0, (l[(shift - 1) >> 6] >> ((shift - 1) & 0x3f)) & 1);
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar_8x32.h b/crypto/secp256k1/libsecp256k1/src/scalar_8x32.h
new file mode 100644
index 000000000..1319664f6
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar_8x32.h
@@ -0,0 +1,19 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_REPR_
+#define _SECP256K1_SCALAR_REPR_
+
+#include <stdint.h>
+
+/** A scalar modulo the group order of the secp256k1 curve. */
+typedef struct {
+ uint32_t d[8];
+} secp256k1_scalar;
+
+#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7)}}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar_8x32_impl.h b/crypto/secp256k1/libsecp256k1/src/scalar_8x32_impl.h
new file mode 100644
index 000000000..aae4f35c0
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar_8x32_impl.h
@@ -0,0 +1,721 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_
+#define _SECP256K1_SCALAR_REPR_IMPL_H_
+
+/* Limbs of the secp256k1 order. */
+#define SECP256K1_N_0 ((uint32_t)0xD0364141UL)
+#define SECP256K1_N_1 ((uint32_t)0xBFD25E8CUL)
+#define SECP256K1_N_2 ((uint32_t)0xAF48A03BUL)
+#define SECP256K1_N_3 ((uint32_t)0xBAAEDCE6UL)
+#define SECP256K1_N_4 ((uint32_t)0xFFFFFFFEUL)
+#define SECP256K1_N_5 ((uint32_t)0xFFFFFFFFUL)
+#define SECP256K1_N_6 ((uint32_t)0xFFFFFFFFUL)
+#define SECP256K1_N_7 ((uint32_t)0xFFFFFFFFUL)
+
+/* Limbs of 2^256 minus the secp256k1 order. */
+#define SECP256K1_N_C_0 (~SECP256K1_N_0 + 1)
+#define SECP256K1_N_C_1 (~SECP256K1_N_1)
+#define SECP256K1_N_C_2 (~SECP256K1_N_2)
+#define SECP256K1_N_C_3 (~SECP256K1_N_3)
+#define SECP256K1_N_C_4 (1)
+
+/* Limbs of half the secp256k1 order. */
+#define SECP256K1_N_H_0 ((uint32_t)0x681B20A0UL)
+#define SECP256K1_N_H_1 ((uint32_t)0xDFE92F46UL)
+#define SECP256K1_N_H_2 ((uint32_t)0x57A4501DUL)
+#define SECP256K1_N_H_3 ((uint32_t)0x5D576E73UL)
+#define SECP256K1_N_H_4 ((uint32_t)0xFFFFFFFFUL)
+#define SECP256K1_N_H_5 ((uint32_t)0xFFFFFFFFUL)
+#define SECP256K1_N_H_6 ((uint32_t)0xFFFFFFFFUL)
+#define SECP256K1_N_H_7 ((uint32_t)0x7FFFFFFFUL)
+
+SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) {
+ r->d[0] = 0;
+ r->d[1] = 0;
+ r->d[2] = 0;
+ r->d[3] = 0;
+ r->d[4] = 0;
+ r->d[5] = 0;
+ r->d[6] = 0;
+ r->d[7] = 0;
+}
+
+SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) {
+ r->d[0] = v;
+ r->d[1] = 0;
+ r->d[2] = 0;
+ r->d[3] = 0;
+ r->d[4] = 0;
+ r->d[5] = 0;
+ r->d[6] = 0;
+ r->d[7] = 0;
+}
+
+SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
+ VERIFY_CHECK((offset + count - 1) >> 5 == offset >> 5);
+ return (a->d[offset >> 5] >> (offset & 0x1F)) & ((1 << count) - 1);
+}
+
+SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
+ VERIFY_CHECK(count < 32);
+ VERIFY_CHECK(offset + count <= 256);
+ if ((offset + count - 1) >> 5 == offset >> 5) {
+ return secp256k1_scalar_get_bits(a, offset, count);
+ } else {
+ VERIFY_CHECK((offset >> 5) + 1 < 8);
+ return ((a->d[offset >> 5] >> (offset & 0x1F)) | (a->d[(offset >> 5) + 1] << (32 - (offset & 0x1F)))) & ((((uint32_t)1) << count) - 1);
+ }
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) {
+ int yes = 0;
+ int no = 0;
+ no |= (a->d[7] < SECP256K1_N_7); /* No need for a > check. */
+ no |= (a->d[6] < SECP256K1_N_6); /* No need for a > check. */
+ no |= (a->d[5] < SECP256K1_N_5); /* No need for a > check. */
+ no |= (a->d[4] < SECP256K1_N_4);
+ yes |= (a->d[4] > SECP256K1_N_4) & ~no;
+ no |= (a->d[3] < SECP256K1_N_3) & ~yes;
+ yes |= (a->d[3] > SECP256K1_N_3) & ~no;
+ no |= (a->d[2] < SECP256K1_N_2) & ~yes;
+ yes |= (a->d[2] > SECP256K1_N_2) & ~no;
+ no |= (a->d[1] < SECP256K1_N_1) & ~yes;
+ yes |= (a->d[1] > SECP256K1_N_1) & ~no;
+ yes |= (a->d[0] >= SECP256K1_N_0) & ~no;
+ return yes;
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_reduce(secp256k1_scalar *r, uint32_t overflow) {
+ uint64_t t;
+ VERIFY_CHECK(overflow <= 1);
+ t = (uint64_t)r->d[0] + overflow * SECP256K1_N_C_0;
+ r->d[0] = t & 0xFFFFFFFFUL; t >>= 32;
+ t += (uint64_t)r->d[1] + overflow * SECP256K1_N_C_1;
+ r->d[1] = t & 0xFFFFFFFFUL; t >>= 32;
+ t += (uint64_t)r->d[2] + overflow * SECP256K1_N_C_2;
+ r->d[2] = t & 0xFFFFFFFFUL; t >>= 32;
+ t += (uint64_t)r->d[3] + overflow * SECP256K1_N_C_3;
+ r->d[3] = t & 0xFFFFFFFFUL; t >>= 32;
+ t += (uint64_t)r->d[4] + overflow * SECP256K1_N_C_4;
+ r->d[4] = t & 0xFFFFFFFFUL; t >>= 32;
+ t += (uint64_t)r->d[5];
+ r->d[5] = t & 0xFFFFFFFFUL; t >>= 32;
+ t += (uint64_t)r->d[6];
+ r->d[6] = t & 0xFFFFFFFFUL; t >>= 32;
+ t += (uint64_t)r->d[7];
+ r->d[7] = t & 0xFFFFFFFFUL;
+ return overflow;
+}
+
+static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ int overflow;
+ uint64_t t = (uint64_t)a->d[0] + b->d[0];
+ r->d[0] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)a->d[1] + b->d[1];
+ r->d[1] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)a->d[2] + b->d[2];
+ r->d[2] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)a->d[3] + b->d[3];
+ r->d[3] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)a->d[4] + b->d[4];
+ r->d[4] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)a->d[5] + b->d[5];
+ r->d[5] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)a->d[6] + b->d[6];
+ r->d[6] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)a->d[7] + b->d[7];
+ r->d[7] = t & 0xFFFFFFFFULL; t >>= 32;
+ overflow = t + secp256k1_scalar_check_overflow(r);
+ VERIFY_CHECK(overflow == 0 || overflow == 1);
+ secp256k1_scalar_reduce(r, overflow);
+ return overflow;
+}
+
+static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {
+ uint64_t t;
+ VERIFY_CHECK(bit < 256);
+ bit += ((uint32_t) flag - 1) & 0x100; /* forcing (bit >> 5) > 7 makes this a noop */
+ t = (uint64_t)r->d[0] + (((uint32_t)((bit >> 5) == 0)) << (bit & 0x1F));
+ r->d[0] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)r->d[1] + (((uint32_t)((bit >> 5) == 1)) << (bit & 0x1F));
+ r->d[1] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)r->d[2] + (((uint32_t)((bit >> 5) == 2)) << (bit & 0x1F));
+ r->d[2] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)r->d[3] + (((uint32_t)((bit >> 5) == 3)) << (bit & 0x1F));
+ r->d[3] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)r->d[4] + (((uint32_t)((bit >> 5) == 4)) << (bit & 0x1F));
+ r->d[4] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)r->d[5] + (((uint32_t)((bit >> 5) == 5)) << (bit & 0x1F));
+ r->d[5] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)r->d[6] + (((uint32_t)((bit >> 5) == 6)) << (bit & 0x1F));
+ r->d[6] = t & 0xFFFFFFFFULL; t >>= 32;
+ t += (uint64_t)r->d[7] + (((uint32_t)((bit >> 5) == 7)) << (bit & 0x1F));
+ r->d[7] = t & 0xFFFFFFFFULL;
+#ifdef VERIFY
+ VERIFY_CHECK((t >> 32) == 0);
+ VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);
+#endif
+}
+
+static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) {
+ int over;
+ r->d[0] = (uint32_t)b32[31] | (uint32_t)b32[30] << 8 | (uint32_t)b32[29] << 16 | (uint32_t)b32[28] << 24;
+ r->d[1] = (uint32_t)b32[27] | (uint32_t)b32[26] << 8 | (uint32_t)b32[25] << 16 | (uint32_t)b32[24] << 24;
+ r->d[2] = (uint32_t)b32[23] | (uint32_t)b32[22] << 8 | (uint32_t)b32[21] << 16 | (uint32_t)b32[20] << 24;
+ r->d[3] = (uint32_t)b32[19] | (uint32_t)b32[18] << 8 | (uint32_t)b32[17] << 16 | (uint32_t)b32[16] << 24;
+ r->d[4] = (uint32_t)b32[15] | (uint32_t)b32[14] << 8 | (uint32_t)b32[13] << 16 | (uint32_t)b32[12] << 24;
+ r->d[5] = (uint32_t)b32[11] | (uint32_t)b32[10] << 8 | (uint32_t)b32[9] << 16 | (uint32_t)b32[8] << 24;
+ r->d[6] = (uint32_t)b32[7] | (uint32_t)b32[6] << 8 | (uint32_t)b32[5] << 16 | (uint32_t)b32[4] << 24;
+ r->d[7] = (uint32_t)b32[3] | (uint32_t)b32[2] << 8 | (uint32_t)b32[1] << 16 | (uint32_t)b32[0] << 24;
+ over = secp256k1_scalar_reduce(r, secp256k1_scalar_check_overflow(r));
+ if (overflow) {
+ *overflow = over;
+ }
+}
+
+static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) {
+ bin[0] = a->d[7] >> 24; bin[1] = a->d[7] >> 16; bin[2] = a->d[7] >> 8; bin[3] = a->d[7];
+ bin[4] = a->d[6] >> 24; bin[5] = a->d[6] >> 16; bin[6] = a->d[6] >> 8; bin[7] = a->d[6];
+ bin[8] = a->d[5] >> 24; bin[9] = a->d[5] >> 16; bin[10] = a->d[5] >> 8; bin[11] = a->d[5];
+ bin[12] = a->d[4] >> 24; bin[13] = a->d[4] >> 16; bin[14] = a->d[4] >> 8; bin[15] = a->d[4];
+ bin[16] = a->d[3] >> 24; bin[17] = a->d[3] >> 16; bin[18] = a->d[3] >> 8; bin[19] = a->d[3];
+ bin[20] = a->d[2] >> 24; bin[21] = a->d[2] >> 16; bin[22] = a->d[2] >> 8; bin[23] = a->d[2];
+ bin[24] = a->d[1] >> 24; bin[25] = a->d[1] >> 16; bin[26] = a->d[1] >> 8; bin[27] = a->d[1];
+ bin[28] = a->d[0] >> 24; bin[29] = a->d[0] >> 16; bin[30] = a->d[0] >> 8; bin[31] = a->d[0];
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) {
+ return (a->d[0] | a->d[1] | a->d[2] | a->d[3] | a->d[4] | a->d[5] | a->d[6] | a->d[7]) == 0;
+}
+
+static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) {
+ uint32_t nonzero = 0xFFFFFFFFUL * (secp256k1_scalar_is_zero(a) == 0);
+ uint64_t t = (uint64_t)(~a->d[0]) + SECP256K1_N_0 + 1;
+ r->d[0] = t & nonzero; t >>= 32;
+ t += (uint64_t)(~a->d[1]) + SECP256K1_N_1;
+ r->d[1] = t & nonzero; t >>= 32;
+ t += (uint64_t)(~a->d[2]) + SECP256K1_N_2;
+ r->d[2] = t & nonzero; t >>= 32;
+ t += (uint64_t)(~a->d[3]) + SECP256K1_N_3;
+ r->d[3] = t & nonzero; t >>= 32;
+ t += (uint64_t)(~a->d[4]) + SECP256K1_N_4;
+ r->d[4] = t & nonzero; t >>= 32;
+ t += (uint64_t)(~a->d[5]) + SECP256K1_N_5;
+ r->d[5] = t & nonzero; t >>= 32;
+ t += (uint64_t)(~a->d[6]) + SECP256K1_N_6;
+ r->d[6] = t & nonzero; t >>= 32;
+ t += (uint64_t)(~a->d[7]) + SECP256K1_N_7;
+ r->d[7] = t & nonzero;
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) {
+ return ((a->d[0] ^ 1) | a->d[1] | a->d[2] | a->d[3] | a->d[4] | a->d[5] | a->d[6] | a->d[7]) == 0;
+}
+
+static int secp256k1_scalar_is_high(const secp256k1_scalar *a) {
+ int yes = 0;
+ int no = 0;
+ no |= (a->d[7] < SECP256K1_N_H_7);
+ yes |= (a->d[7] > SECP256K1_N_H_7) & ~no;
+ no |= (a->d[6] < SECP256K1_N_H_6) & ~yes; /* No need for a > check. */
+ no |= (a->d[5] < SECP256K1_N_H_5) & ~yes; /* No need for a > check. */
+ no |= (a->d[4] < SECP256K1_N_H_4) & ~yes; /* No need for a > check. */
+ no |= (a->d[3] < SECP256K1_N_H_3) & ~yes;
+ yes |= (a->d[3] > SECP256K1_N_H_3) & ~no;
+ no |= (a->d[2] < SECP256K1_N_H_2) & ~yes;
+ yes |= (a->d[2] > SECP256K1_N_H_2) & ~no;
+ no |= (a->d[1] < SECP256K1_N_H_1) & ~yes;
+ yes |= (a->d[1] > SECP256K1_N_H_1) & ~no;
+ yes |= (a->d[0] > SECP256K1_N_H_0) & ~no;
+ return yes;
+}
+
+static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {
+ /* If we are flag = 0, mask = 00...00 and this is a no-op;
+ * if we are flag = 1, mask = 11...11 and this is identical to secp256k1_scalar_negate */
+ uint32_t mask = !flag - 1;
+ uint32_t nonzero = 0xFFFFFFFFUL * (secp256k1_scalar_is_zero(r) == 0);
+ uint64_t t = (uint64_t)(r->d[0] ^ mask) + ((SECP256K1_N_0 + 1) & mask);
+ r->d[0] = t & nonzero; t >>= 32;
+ t += (uint64_t)(r->d[1] ^ mask) + (SECP256K1_N_1 & mask);
+ r->d[1] = t & nonzero; t >>= 32;
+ t += (uint64_t)(r->d[2] ^ mask) + (SECP256K1_N_2 & mask);
+ r->d[2] = t & nonzero; t >>= 32;
+ t += (uint64_t)(r->d[3] ^ mask) + (SECP256K1_N_3 & mask);
+ r->d[3] = t & nonzero; t >>= 32;
+ t += (uint64_t)(r->d[4] ^ mask) + (SECP256K1_N_4 & mask);
+ r->d[4] = t & nonzero; t >>= 32;
+ t += (uint64_t)(r->d[5] ^ mask) + (SECP256K1_N_5 & mask);
+ r->d[5] = t & nonzero; t >>= 32;
+ t += (uint64_t)(r->d[6] ^ mask) + (SECP256K1_N_6 & mask);
+ r->d[6] = t & nonzero; t >>= 32;
+ t += (uint64_t)(r->d[7] ^ mask) + (SECP256K1_N_7 & mask);
+ r->d[7] = t & nonzero;
+ return 2 * (mask == 0) - 1;
+}
+
+
+/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */
+
+/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
+#define muladd(a,b) { \
+ uint32_t tl, th; \
+ { \
+ uint64_t t = (uint64_t)a * b; \
+ th = t >> 32; /* at most 0xFFFFFFFE */ \
+ tl = t; \
+ } \
+ c0 += tl; /* overflow is handled on the next line */ \
+ th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \
+ c1 += th; /* overflow is handled on the next line */ \
+ c2 += (c1 < th) ? 1 : 0; /* never overflows by contract (verified in the next line) */ \
+ VERIFY_CHECK((c1 >= th) || (c2 != 0)); \
+}
+
+/** Add a*b to the number defined by (c0,c1). c1 must never overflow. */
+#define muladd_fast(a,b) { \
+ uint32_t tl, th; \
+ { \
+ uint64_t t = (uint64_t)a * b; \
+ th = t >> 32; /* at most 0xFFFFFFFE */ \
+ tl = t; \
+ } \
+ c0 += tl; /* overflow is handled on the next line */ \
+ th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \
+ c1 += th; /* never overflows by contract (verified in the next line) */ \
+ VERIFY_CHECK(c1 >= th); \
+}
+
+/** Add 2*a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
+#define muladd2(a,b) { \
+ uint32_t tl, th, th2, tl2; \
+ { \
+ uint64_t t = (uint64_t)a * b; \
+ th = t >> 32; /* at most 0xFFFFFFFE */ \
+ tl = t; \
+ } \
+ th2 = th + th; /* at most 0xFFFFFFFE (in case th was 0x7FFFFFFF) */ \
+ c2 += (th2 < th) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((th2 >= th) || (c2 != 0)); \
+ tl2 = tl + tl; /* at most 0xFFFFFFFE (in case the lowest 63 bits of tl were 0x7FFFFFFF) */ \
+ th2 += (tl2 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \
+ c0 += tl2; /* overflow is handled on the next line */ \
+ th2 += (c0 < tl2) ? 1 : 0; /* second overflow is handled on the next line */ \
+ c2 += (c0 < tl2) & (th2 == 0); /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((c0 >= tl2) || (th2 != 0) || (c2 != 0)); \
+ c1 += th2; /* overflow is handled on the next line */ \
+ c2 += (c1 < th2) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((c1 >= th2) || (c2 != 0)); \
+}
+
+/** Add a to the number defined by (c0,c1,c2). c2 must never overflow. */
+#define sumadd(a) { \
+ unsigned int over; \
+ c0 += (a); /* overflow is handled on the next line */ \
+ over = (c0 < (a)) ? 1 : 0; \
+ c1 += over; /* overflow is handled on the next line */ \
+ c2 += (c1 < over) ? 1 : 0; /* never overflows by contract */ \
+}
+
+/** Add a to the number defined by (c0,c1). c1 must never overflow, c2 must be zero. */
+#define sumadd_fast(a) { \
+ c0 += (a); /* overflow is handled on the next line */ \
+ c1 += (c0 < (a)) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
+ VERIFY_CHECK((c1 != 0) | (c0 >= (a))); \
+ VERIFY_CHECK(c2 == 0); \
+}
+
+/** Extract the lowest 32 bits of (c0,c1,c2) into n, and left shift the number 32 bits. */
+#define extract(n) { \
+ (n) = c0; \
+ c0 = c1; \
+ c1 = c2; \
+ c2 = 0; \
+}
+
+/** Extract the lowest 32 bits of (c0,c1,c2) into n, and left shift the number 32 bits. c2 is required to be zero. */
+#define extract_fast(n) { \
+ (n) = c0; \
+ c0 = c1; \
+ c1 = 0; \
+ VERIFY_CHECK(c2 == 0); \
+}
+
+static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint32_t *l) {
+ uint64_t c;
+ uint32_t n0 = l[8], n1 = l[9], n2 = l[10], n3 = l[11], n4 = l[12], n5 = l[13], n6 = l[14], n7 = l[15];
+ uint32_t m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12;
+ uint32_t p0, p1, p2, p3, p4, p5, p6, p7, p8;
+
+ /* 96 bit accumulator. */
+ uint32_t c0, c1, c2;
+
+ /* Reduce 512 bits into 385. */
+ /* m[0..12] = l[0..7] + n[0..7] * SECP256K1_N_C. */
+ c0 = l[0]; c1 = 0; c2 = 0;
+ muladd_fast(n0, SECP256K1_N_C_0);
+ extract_fast(m0);
+ sumadd_fast(l[1]);
+ muladd(n1, SECP256K1_N_C_0);
+ muladd(n0, SECP256K1_N_C_1);
+ extract(m1);
+ sumadd(l[2]);
+ muladd(n2, SECP256K1_N_C_0);
+ muladd(n1, SECP256K1_N_C_1);
+ muladd(n0, SECP256K1_N_C_2);
+ extract(m2);
+ sumadd(l[3]);
+ muladd(n3, SECP256K1_N_C_0);
+ muladd(n2, SECP256K1_N_C_1);
+ muladd(n1, SECP256K1_N_C_2);
+ muladd(n0, SECP256K1_N_C_3);
+ extract(m3);
+ sumadd(l[4]);
+ muladd(n4, SECP256K1_N_C_0);
+ muladd(n3, SECP256K1_N_C_1);
+ muladd(n2, SECP256K1_N_C_2);
+ muladd(n1, SECP256K1_N_C_3);
+ sumadd(n0);
+ extract(m4);
+ sumadd(l[5]);
+ muladd(n5, SECP256K1_N_C_0);
+ muladd(n4, SECP256K1_N_C_1);
+ muladd(n3, SECP256K1_N_C_2);
+ muladd(n2, SECP256K1_N_C_3);
+ sumadd(n1);
+ extract(m5);
+ sumadd(l[6]);
+ muladd(n6, SECP256K1_N_C_0);
+ muladd(n5, SECP256K1_N_C_1);
+ muladd(n4, SECP256K1_N_C_2);
+ muladd(n3, SECP256K1_N_C_3);
+ sumadd(n2);
+ extract(m6);
+ sumadd(l[7]);
+ muladd(n7, SECP256K1_N_C_0);
+ muladd(n6, SECP256K1_N_C_1);
+ muladd(n5, SECP256K1_N_C_2);
+ muladd(n4, SECP256K1_N_C_3);
+ sumadd(n3);
+ extract(m7);
+ muladd(n7, SECP256K1_N_C_1);
+ muladd(n6, SECP256K1_N_C_2);
+ muladd(n5, SECP256K1_N_C_3);
+ sumadd(n4);
+ extract(m8);
+ muladd(n7, SECP256K1_N_C_2);
+ muladd(n6, SECP256K1_N_C_3);
+ sumadd(n5);
+ extract(m9);
+ muladd(n7, SECP256K1_N_C_3);
+ sumadd(n6);
+ extract(m10);
+ sumadd_fast(n7);
+ extract_fast(m11);
+ VERIFY_CHECK(c0 <= 1);
+ m12 = c0;
+
+ /* Reduce 385 bits into 258. */
+ /* p[0..8] = m[0..7] + m[8..12] * SECP256K1_N_C. */
+ c0 = m0; c1 = 0; c2 = 0;
+ muladd_fast(m8, SECP256K1_N_C_0);
+ extract_fast(p0);
+ sumadd_fast(m1);
+ muladd(m9, SECP256K1_N_C_0);
+ muladd(m8, SECP256K1_N_C_1);
+ extract(p1);
+ sumadd(m2);
+ muladd(m10, SECP256K1_N_C_0);
+ muladd(m9, SECP256K1_N_C_1);
+ muladd(m8, SECP256K1_N_C_2);
+ extract(p2);
+ sumadd(m3);
+ muladd(m11, SECP256K1_N_C_0);
+ muladd(m10, SECP256K1_N_C_1);
+ muladd(m9, SECP256K1_N_C_2);
+ muladd(m8, SECP256K1_N_C_3);
+ extract(p3);
+ sumadd(m4);
+ muladd(m12, SECP256K1_N_C_0);
+ muladd(m11, SECP256K1_N_C_1);
+ muladd(m10, SECP256K1_N_C_2);
+ muladd(m9, SECP256K1_N_C_3);
+ sumadd(m8);
+ extract(p4);
+ sumadd(m5);
+ muladd(m12, SECP256K1_N_C_1);
+ muladd(m11, SECP256K1_N_C_2);
+ muladd(m10, SECP256K1_N_C_3);
+ sumadd(m9);
+ extract(p5);
+ sumadd(m6);
+ muladd(m12, SECP256K1_N_C_2);
+ muladd(m11, SECP256K1_N_C_3);
+ sumadd(m10);
+ extract(p6);
+ sumadd_fast(m7);
+ muladd_fast(m12, SECP256K1_N_C_3);
+ sumadd_fast(m11);
+ extract_fast(p7);
+ p8 = c0 + m12;
+ VERIFY_CHECK(p8 <= 2);
+
+ /* Reduce 258 bits into 256. */
+ /* r[0..7] = p[0..7] + p[8] * SECP256K1_N_C. */
+ c = p0 + (uint64_t)SECP256K1_N_C_0 * p8;
+ r->d[0] = c & 0xFFFFFFFFUL; c >>= 32;
+ c += p1 + (uint64_t)SECP256K1_N_C_1 * p8;
+ r->d[1] = c & 0xFFFFFFFFUL; c >>= 32;
+ c += p2 + (uint64_t)SECP256K1_N_C_2 * p8;
+ r->d[2] = c & 0xFFFFFFFFUL; c >>= 32;
+ c += p3 + (uint64_t)SECP256K1_N_C_3 * p8;
+ r->d[3] = c & 0xFFFFFFFFUL; c >>= 32;
+ c += p4 + (uint64_t)p8;
+ r->d[4] = c & 0xFFFFFFFFUL; c >>= 32;
+ c += p5;
+ r->d[5] = c & 0xFFFFFFFFUL; c >>= 32;
+ c += p6;
+ r->d[6] = c & 0xFFFFFFFFUL; c >>= 32;
+ c += p7;
+ r->d[7] = c & 0xFFFFFFFFUL; c >>= 32;
+
+ /* Final reduction of r. */
+ secp256k1_scalar_reduce(r, c + secp256k1_scalar_check_overflow(r));
+}
+
+static void secp256k1_scalar_mul_512(uint32_t *l, const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ /* 96 bit accumulator. */
+ uint32_t c0 = 0, c1 = 0, c2 = 0;
+
+ /* l[0..15] = a[0..7] * b[0..7]. */
+ muladd_fast(a->d[0], b->d[0]);
+ extract_fast(l[0]);
+ muladd(a->d[0], b->d[1]);
+ muladd(a->d[1], b->d[0]);
+ extract(l[1]);
+ muladd(a->d[0], b->d[2]);
+ muladd(a->d[1], b->d[1]);
+ muladd(a->d[2], b->d[0]);
+ extract(l[2]);
+ muladd(a->d[0], b->d[3]);
+ muladd(a->d[1], b->d[2]);
+ muladd(a->d[2], b->d[1]);
+ muladd(a->d[3], b->d[0]);
+ extract(l[3]);
+ muladd(a->d[0], b->d[4]);
+ muladd(a->d[1], b->d[3]);
+ muladd(a->d[2], b->d[2]);
+ muladd(a->d[3], b->d[1]);
+ muladd(a->d[4], b->d[0]);
+ extract(l[4]);
+ muladd(a->d[0], b->d[5]);
+ muladd(a->d[1], b->d[4]);
+ muladd(a->d[2], b->d[3]);
+ muladd(a->d[3], b->d[2]);
+ muladd(a->d[4], b->d[1]);
+ muladd(a->d[5], b->d[0]);
+ extract(l[5]);
+ muladd(a->d[0], b->d[6]);
+ muladd(a->d[1], b->d[5]);
+ muladd(a->d[2], b->d[4]);
+ muladd(a->d[3], b->d[3]);
+ muladd(a->d[4], b->d[2]);
+ muladd(a->d[5], b->d[1]);
+ muladd(a->d[6], b->d[0]);
+ extract(l[6]);
+ muladd(a->d[0], b->d[7]);
+ muladd(a->d[1], b->d[6]);
+ muladd(a->d[2], b->d[5]);
+ muladd(a->d[3], b->d[4]);
+ muladd(a->d[4], b->d[3]);
+ muladd(a->d[5], b->d[2]);
+ muladd(a->d[6], b->d[1]);
+ muladd(a->d[7], b->d[0]);
+ extract(l[7]);
+ muladd(a->d[1], b->d[7]);
+ muladd(a->d[2], b->d[6]);
+ muladd(a->d[3], b->d[5]);
+ muladd(a->d[4], b->d[4]);
+ muladd(a->d[5], b->d[3]);
+ muladd(a->d[6], b->d[2]);
+ muladd(a->d[7], b->d[1]);
+ extract(l[8]);
+ muladd(a->d[2], b->d[7]);
+ muladd(a->d[3], b->d[6]);
+ muladd(a->d[4], b->d[5]);
+ muladd(a->d[5], b->d[4]);
+ muladd(a->d[6], b->d[3]);
+ muladd(a->d[7], b->d[2]);
+ extract(l[9]);
+ muladd(a->d[3], b->d[7]);
+ muladd(a->d[4], b->d[6]);
+ muladd(a->d[5], b->d[5]);
+ muladd(a->d[6], b->d[4]);
+ muladd(a->d[7], b->d[3]);
+ extract(l[10]);
+ muladd(a->d[4], b->d[7]);
+ muladd(a->d[5], b->d[6]);
+ muladd(a->d[6], b->d[5]);
+ muladd(a->d[7], b->d[4]);
+ extract(l[11]);
+ muladd(a->d[5], b->d[7]);
+ muladd(a->d[6], b->d[6]);
+ muladd(a->d[7], b->d[5]);
+ extract(l[12]);
+ muladd(a->d[6], b->d[7]);
+ muladd(a->d[7], b->d[6]);
+ extract(l[13]);
+ muladd_fast(a->d[7], b->d[7]);
+ extract_fast(l[14]);
+ VERIFY_CHECK(c1 == 0);
+ l[15] = c0;
+}
+
+static void secp256k1_scalar_sqr_512(uint32_t *l, const secp256k1_scalar *a) {
+ /* 96 bit accumulator. */
+ uint32_t c0 = 0, c1 = 0, c2 = 0;
+
+ /* l[0..15] = a[0..7]^2. */
+ muladd_fast(a->d[0], a->d[0]);
+ extract_fast(l[0]);
+ muladd2(a->d[0], a->d[1]);
+ extract(l[1]);
+ muladd2(a->d[0], a->d[2]);
+ muladd(a->d[1], a->d[1]);
+ extract(l[2]);
+ muladd2(a->d[0], a->d[3]);
+ muladd2(a->d[1], a->d[2]);
+ extract(l[3]);
+ muladd2(a->d[0], a->d[4]);
+ muladd2(a->d[1], a->d[3]);
+ muladd(a->d[2], a->d[2]);
+ extract(l[4]);
+ muladd2(a->d[0], a->d[5]);
+ muladd2(a->d[1], a->d[4]);
+ muladd2(a->d[2], a->d[3]);
+ extract(l[5]);
+ muladd2(a->d[0], a->d[6]);
+ muladd2(a->d[1], a->d[5]);
+ muladd2(a->d[2], a->d[4]);
+ muladd(a->d[3], a->d[3]);
+ extract(l[6]);
+ muladd2(a->d[0], a->d[7]);
+ muladd2(a->d[1], a->d[6]);
+ muladd2(a->d[2], a->d[5]);
+ muladd2(a->d[3], a->d[4]);
+ extract(l[7]);
+ muladd2(a->d[1], a->d[7]);
+ muladd2(a->d[2], a->d[6]);
+ muladd2(a->d[3], a->d[5]);
+ muladd(a->d[4], a->d[4]);
+ extract(l[8]);
+ muladd2(a->d[2], a->d[7]);
+ muladd2(a->d[3], a->d[6]);
+ muladd2(a->d[4], a->d[5]);
+ extract(l[9]);
+ muladd2(a->d[3], a->d[7]);
+ muladd2(a->d[4], a->d[6]);
+ muladd(a->d[5], a->d[5]);
+ extract(l[10]);
+ muladd2(a->d[4], a->d[7]);
+ muladd2(a->d[5], a->d[6]);
+ extract(l[11]);
+ muladd2(a->d[5], a->d[7]);
+ muladd(a->d[6], a->d[6]);
+ extract(l[12]);
+ muladd2(a->d[6], a->d[7]);
+ extract(l[13]);
+ muladd_fast(a->d[7], a->d[7]);
+ extract_fast(l[14]);
+ VERIFY_CHECK(c1 == 0);
+ l[15] = c0;
+}
+
+#undef sumadd
+#undef sumadd_fast
+#undef muladd
+#undef muladd_fast
+#undef muladd2
+#undef extract
+#undef extract_fast
+
+static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ uint32_t l[16];
+ secp256k1_scalar_mul_512(l, a, b);
+ secp256k1_scalar_reduce_512(r, l);
+}
+
+static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) {
+ int ret;
+ VERIFY_CHECK(n > 0);
+ VERIFY_CHECK(n < 16);
+ ret = r->d[0] & ((1 << n) - 1);
+ r->d[0] = (r->d[0] >> n) + (r->d[1] << (32 - n));
+ r->d[1] = (r->d[1] >> n) + (r->d[2] << (32 - n));
+ r->d[2] = (r->d[2] >> n) + (r->d[3] << (32 - n));
+ r->d[3] = (r->d[3] >> n) + (r->d[4] << (32 - n));
+ r->d[4] = (r->d[4] >> n) + (r->d[5] << (32 - n));
+ r->d[5] = (r->d[5] >> n) + (r->d[6] << (32 - n));
+ r->d[6] = (r->d[6] >> n) + (r->d[7] << (32 - n));
+ r->d[7] = (r->d[7] >> n);
+ return ret;
+}
+
+static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) {
+ uint32_t l[16];
+ secp256k1_scalar_sqr_512(l, a);
+ secp256k1_scalar_reduce_512(r, l);
+}
+
+#ifdef USE_ENDOMORPHISM
+static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
+ r1->d[0] = a->d[0];
+ r1->d[1] = a->d[1];
+ r1->d[2] = a->d[2];
+ r1->d[3] = a->d[3];
+ r1->d[4] = 0;
+ r1->d[5] = 0;
+ r1->d[6] = 0;
+ r1->d[7] = 0;
+ r2->d[0] = a->d[4];
+ r2->d[1] = a->d[5];
+ r2->d[2] = a->d[6];
+ r2->d[3] = a->d[7];
+ r2->d[4] = 0;
+ r2->d[5] = 0;
+ r2->d[6] = 0;
+ r2->d[7] = 0;
+}
+#endif
+
+SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ return ((a->d[0] ^ b->d[0]) | (a->d[1] ^ b->d[1]) | (a->d[2] ^ b->d[2]) | (a->d[3] ^ b->d[3]) | (a->d[4] ^ b->d[4]) | (a->d[5] ^ b->d[5]) | (a->d[6] ^ b->d[6]) | (a->d[7] ^ b->d[7])) == 0;
+}
+
+SECP256K1_INLINE static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift) {
+ uint32_t l[16];
+ unsigned int shiftlimbs;
+ unsigned int shiftlow;
+ unsigned int shifthigh;
+ VERIFY_CHECK(shift >= 256);
+ secp256k1_scalar_mul_512(l, a, b);
+ shiftlimbs = shift >> 5;
+ shiftlow = shift & 0x1F;
+ shifthigh = 32 - shiftlow;
+ r->d[0] = shift < 512 ? (l[0 + shiftlimbs] >> shiftlow | (shift < 480 && shiftlow ? (l[1 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[1] = shift < 480 ? (l[1 + shiftlimbs] >> shiftlow | (shift < 448 && shiftlow ? (l[2 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[2] = shift < 448 ? (l[2 + shiftlimbs] >> shiftlow | (shift < 416 && shiftlow ? (l[3 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[3] = shift < 416 ? (l[3 + shiftlimbs] >> shiftlow | (shift < 384 && shiftlow ? (l[4 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[4] = shift < 384 ? (l[4 + shiftlimbs] >> shiftlow | (shift < 352 && shiftlow ? (l[5 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[5] = shift < 352 ? (l[5 + shiftlimbs] >> shiftlow | (shift < 320 && shiftlow ? (l[6 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[6] = shift < 320 ? (l[6 + shiftlimbs] >> shiftlow | (shift < 288 && shiftlow ? (l[7 + shiftlimbs] << shifthigh) : 0)) : 0;
+ r->d[7] = shift < 288 ? (l[7 + shiftlimbs] >> shiftlow) : 0;
+ secp256k1_scalar_cadd_bit(r, 0, (l[(shift - 1) >> 5] >> ((shift - 1) & 0x1f)) & 1);
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar_impl.h b/crypto/secp256k1/libsecp256k1/src/scalar_impl.h
new file mode 100644
index 000000000..f5b237640
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar_impl.h
@@ -0,0 +1,370 @@
+/**********************************************************************
+ * Copyright (c) 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_IMPL_H_
+#define _SECP256K1_SCALAR_IMPL_H_
+
+#include "group.h"
+#include "scalar.h"
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#if defined(EXHAUSTIVE_TEST_ORDER)
+#include "scalar_low_impl.h"
+#elif defined(USE_SCALAR_4X64)
+#include "scalar_4x64_impl.h"
+#elif defined(USE_SCALAR_8X32)
+#include "scalar_8x32_impl.h"
+#else
+#error "Please select scalar implementation"
+#endif
+
+#ifndef USE_NUM_NONE
+static void secp256k1_scalar_get_num(secp256k1_num *r, const secp256k1_scalar *a) {
+ unsigned char c[32];
+ secp256k1_scalar_get_b32(c, a);
+ secp256k1_num_set_bin(r, c, 32);
+}
+
+/** secp256k1 curve order, see secp256k1_ecdsa_const_order_as_fe in ecdsa_impl.h */
+static void secp256k1_scalar_order_get_num(secp256k1_num *r) {
+#if defined(EXHAUSTIVE_TEST_ORDER)
+ static const unsigned char order[32] = {
+ 0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,EXHAUSTIVE_TEST_ORDER
+ };
+#else
+ static const unsigned char order[32] = {
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
+ 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,
+ 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41
+ };
+#endif
+ secp256k1_num_set_bin(r, order, 32);
+}
+#endif
+
+static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *x) {
+#if defined(EXHAUSTIVE_TEST_ORDER)
+ int i;
+ *r = 0;
+ for (i = 0; i < EXHAUSTIVE_TEST_ORDER; i++)
+ if ((i * *x) % EXHAUSTIVE_TEST_ORDER == 1)
+ *r = i;
+ /* If this VERIFY_CHECK triggers we were given a noninvertible scalar (and thus
+ * have a composite group order; fix it in exhaustive_tests.c). */
+ VERIFY_CHECK(*r != 0);
+}
+#else
+ secp256k1_scalar *t;
+ int i;
+ /* First compute x ^ (2^N - 1) for some values of N. */
+ secp256k1_scalar x2, x3, x4, x6, x7, x8, x15, x30, x60, x120, x127;
+
+ secp256k1_scalar_sqr(&x2, x);
+ secp256k1_scalar_mul(&x2, &x2, x);
+
+ secp256k1_scalar_sqr(&x3, &x2);
+ secp256k1_scalar_mul(&x3, &x3, x);
+
+ secp256k1_scalar_sqr(&x4, &x3);
+ secp256k1_scalar_mul(&x4, &x4, x);
+
+ secp256k1_scalar_sqr(&x6, &x4);
+ secp256k1_scalar_sqr(&x6, &x6);
+ secp256k1_scalar_mul(&x6, &x6, &x2);
+
+ secp256k1_scalar_sqr(&x7, &x6);
+ secp256k1_scalar_mul(&x7, &x7, x);
+
+ secp256k1_scalar_sqr(&x8, &x7);
+ secp256k1_scalar_mul(&x8, &x8, x);
+
+ secp256k1_scalar_sqr(&x15, &x8);
+ for (i = 0; i < 6; i++) {
+ secp256k1_scalar_sqr(&x15, &x15);
+ }
+ secp256k1_scalar_mul(&x15, &x15, &x7);
+
+ secp256k1_scalar_sqr(&x30, &x15);
+ for (i = 0; i < 14; i++) {
+ secp256k1_scalar_sqr(&x30, &x30);
+ }
+ secp256k1_scalar_mul(&x30, &x30, &x15);
+
+ secp256k1_scalar_sqr(&x60, &x30);
+ for (i = 0; i < 29; i++) {
+ secp256k1_scalar_sqr(&x60, &x60);
+ }
+ secp256k1_scalar_mul(&x60, &x60, &x30);
+
+ secp256k1_scalar_sqr(&x120, &x60);
+ for (i = 0; i < 59; i++) {
+ secp256k1_scalar_sqr(&x120, &x120);
+ }
+ secp256k1_scalar_mul(&x120, &x120, &x60);
+
+ secp256k1_scalar_sqr(&x127, &x120);
+ for (i = 0; i < 6; i++) {
+ secp256k1_scalar_sqr(&x127, &x127);
+ }
+ secp256k1_scalar_mul(&x127, &x127, &x7);
+
+ /* Then accumulate the final result (t starts at x127). */
+ t = &x127;
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 4; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x3); /* 111 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 4; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x3); /* 111 */
+ for (i = 0; i < 3; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x2); /* 11 */
+ for (i = 0; i < 4; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x3); /* 111 */
+ for (i = 0; i < 5; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x3); /* 111 */
+ for (i = 0; i < 4; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x2); /* 11 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 5; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x4); /* 1111 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 3; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 4; i++) { /* 000 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 10; i++) { /* 0000000 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x3); /* 111 */
+ for (i = 0; i < 4; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x3); /* 111 */
+ for (i = 0; i < 9; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x8); /* 11111111 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 3; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 3; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 5; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x4); /* 1111 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 5; i++) { /* 000 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x2); /* 11 */
+ for (i = 0; i < 4; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x2); /* 11 */
+ for (i = 0; i < 2; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 8; i++) { /* 000000 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x2); /* 11 */
+ for (i = 0; i < 3; i++) { /* 0 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, &x2); /* 11 */
+ for (i = 0; i < 3; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 6; i++) { /* 00000 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(t, t, x); /* 1 */
+ for (i = 0; i < 8; i++) { /* 00 */
+ secp256k1_scalar_sqr(t, t);
+ }
+ secp256k1_scalar_mul(r, t, &x6); /* 111111 */
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_is_even(const secp256k1_scalar *a) {
+ return !(a->d[0] & 1);
+}
+#endif
+
+static void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *x) {
+#if defined(USE_SCALAR_INV_BUILTIN)
+ secp256k1_scalar_inverse(r, x);
+#elif defined(USE_SCALAR_INV_NUM)
+ unsigned char b[32];
+ secp256k1_num n, m;
+ secp256k1_scalar t = *x;
+ secp256k1_scalar_get_b32(b, &t);
+ secp256k1_num_set_bin(&n, b, 32);
+ secp256k1_scalar_order_get_num(&m);
+ secp256k1_num_mod_inverse(&n, &n, &m);
+ secp256k1_num_get_bin(b, 32, &n);
+ secp256k1_scalar_set_b32(r, b, NULL);
+ /* Verify that the inverse was computed correctly, without GMP code. */
+ secp256k1_scalar_mul(&t, &t, r);
+ CHECK(secp256k1_scalar_is_one(&t));
+#else
+#error "Please select scalar inverse implementation"
+#endif
+}
+
+#ifdef USE_ENDOMORPHISM
+#if defined(EXHAUSTIVE_TEST_ORDER)
+/**
+ * Find k1 and k2 given k, such that k1 + k2 * lambda == k mod n; unlike in the
+ * full case we don't bother making k1 and k2 be small, we just want them to be
+ * nontrivial to get full test coverage for the exhaustive tests. We therefore
+ * (arbitrarily) set k2 = k + 5 and k1 = k - k2 * lambda.
+ */
+static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
+ *r2 = (*a + 5) % EXHAUSTIVE_TEST_ORDER;
+ *r1 = (*a + (EXHAUSTIVE_TEST_ORDER - *r2) * EXHAUSTIVE_TEST_LAMBDA) % EXHAUSTIVE_TEST_ORDER;
+}
+#else
+/**
+ * The Secp256k1 curve has an endomorphism, where lambda * (x, y) = (beta * x, y), where
+ * lambda is {0x53,0x63,0xad,0x4c,0xc0,0x5c,0x30,0xe0,0xa5,0x26,0x1c,0x02,0x88,0x12,0x64,0x5a,
+ * 0x12,0x2e,0x22,0xea,0x20,0x81,0x66,0x78,0xdf,0x02,0x96,0x7c,0x1b,0x23,0xbd,0x72}
+ *
+ * "Guide to Elliptic Curve Cryptography" (Hankerson, Menezes, Vanstone) gives an algorithm
+ * (algorithm 3.74) to find k1 and k2 given k, such that k1 + k2 * lambda == k mod n, and k1
+ * and k2 have a small size.
+ * It relies on constants a1, b1, a2, b2. These constants for the value of lambda above are:
+ *
+ * - a1 = {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15}
+ * - b1 = -{0xe4,0x43,0x7e,0xd6,0x01,0x0e,0x88,0x28,0x6f,0x54,0x7f,0xa9,0x0a,0xbf,0xe4,0xc3}
+ * - a2 = {0x01,0x14,0xca,0x50,0xf7,0xa8,0xe2,0xf3,0xf6,0x57,0xc1,0x10,0x8d,0x9d,0x44,0xcf,0xd8}
+ * - b2 = {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15}
+ *
+ * The algorithm then computes c1 = round(b1 * k / n) and c2 = round(b2 * k / n), and gives
+ * k1 = k - (c1*a1 + c2*a2) and k2 = -(c1*b1 + c2*b2). Instead, we use modular arithmetic, and
+ * compute k1 as k - k2 * lambda, avoiding the need for constants a1 and a2.
+ *
+ * g1, g2 are precomputed constants used to replace division with a rounded multiplication
+ * when decomposing the scalar for an endomorphism-based point multiplication.
+ *
+ * The possibility of using precomputed estimates is mentioned in "Guide to Elliptic Curve
+ * Cryptography" (Hankerson, Menezes, Vanstone) in section 3.5.
+ *
+ * The derivation is described in the paper "Efficient Software Implementation of Public-Key
+ * Cryptography on Sensor Networks Using the MSP430X Microcontroller" (Gouvea, Oliveira, Lopez),
+ * Section 4.3 (here we use a somewhat higher-precision estimate):
+ * d = a1*b2 - b1*a2
+ * g1 = round((2^272)*b2/d)
+ * g2 = round((2^272)*b1/d)
+ *
+ * (Note that 'd' is also equal to the curve order here because [a1,b1] and [a2,b2] are found
+ * as outputs of the Extended Euclidean Algorithm on inputs 'order' and 'lambda').
+ *
+ * The function below splits a in r1 and r2, such that r1 + lambda * r2 == a (mod order).
+ */
+
+static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
+ secp256k1_scalar c1, c2;
+ static const secp256k1_scalar minus_lambda = SECP256K1_SCALAR_CONST(
+ 0xAC9C52B3UL, 0x3FA3CF1FUL, 0x5AD9E3FDUL, 0x77ED9BA4UL,
+ 0xA880B9FCUL, 0x8EC739C2UL, 0xE0CFC810UL, 0xB51283CFUL
+ );
+ static const secp256k1_scalar minus_b1 = SECP256K1_SCALAR_CONST(
+ 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+ 0xE4437ED6UL, 0x010E8828UL, 0x6F547FA9UL, 0x0ABFE4C3UL
+ );
+ static const secp256k1_scalar minus_b2 = SECP256K1_SCALAR_CONST(
+ 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL,
+ 0x8A280AC5UL, 0x0774346DUL, 0xD765CDA8UL, 0x3DB1562CUL
+ );
+ static const secp256k1_scalar g1 = SECP256K1_SCALAR_CONST(
+ 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00003086UL,
+ 0xD221A7D4UL, 0x6BCDE86CUL, 0x90E49284UL, 0xEB153DABUL
+ );
+ static const secp256k1_scalar g2 = SECP256K1_SCALAR_CONST(
+ 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0000E443UL,
+ 0x7ED6010EUL, 0x88286F54UL, 0x7FA90ABFUL, 0xE4C42212UL
+ );
+ VERIFY_CHECK(r1 != a);
+ VERIFY_CHECK(r2 != a);
+ /* these _var calls are constant time since the shift amount is constant */
+ secp256k1_scalar_mul_shift_var(&c1, a, &g1, 272);
+ secp256k1_scalar_mul_shift_var(&c2, a, &g2, 272);
+ secp256k1_scalar_mul(&c1, &c1, &minus_b1);
+ secp256k1_scalar_mul(&c2, &c2, &minus_b2);
+ secp256k1_scalar_add(r2, &c1, &c2);
+ secp256k1_scalar_mul(r1, r2, &minus_lambda);
+ secp256k1_scalar_add(r1, r1, a);
+}
+#endif
+#endif
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar_low.h b/crypto/secp256k1/libsecp256k1/src/scalar_low.h
new file mode 100644
index 000000000..5574c44c7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar_low.h
@@ -0,0 +1,15 @@
+/**********************************************************************
+ * Copyright (c) 2015 Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_REPR_
+#define _SECP256K1_SCALAR_REPR_
+
+#include <stdint.h>
+
+/** A scalar modulo the group order of the secp256k1 curve. */
+typedef uint32_t secp256k1_scalar;
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/scalar_low_impl.h b/crypto/secp256k1/libsecp256k1/src/scalar_low_impl.h
new file mode 100644
index 000000000..4f94441f4
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/scalar_low_impl.h
@@ -0,0 +1,114 @@
+/**********************************************************************
+ * Copyright (c) 2015 Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_
+#define _SECP256K1_SCALAR_REPR_IMPL_H_
+
+#include "scalar.h"
+
+#include <string.h>
+
+SECP256K1_INLINE static int secp256k1_scalar_is_even(const secp256k1_scalar *a) {
+ return !(*a & 1);
+}
+
+SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) { *r = 0; }
+SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) { *r = v; }
+
+SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
+ if (offset < 32)
+ return ((*a >> offset) & ((((uint32_t)1) << count) - 1));
+ else
+ return 0;
+}
+
+SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
+ return secp256k1_scalar_get_bits(a, offset, count);
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) { return *a >= EXHAUSTIVE_TEST_ORDER; }
+
+static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ *r = (*a + *b) % EXHAUSTIVE_TEST_ORDER;
+ return *r < *b;
+}
+
+static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {
+ if (flag && bit < 32)
+ *r += (1 << bit);
+#ifdef VERIFY
+ VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);
+#endif
+}
+
+static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) {
+ const int base = 0x100 % EXHAUSTIVE_TEST_ORDER;
+ int i;
+ *r = 0;
+ for (i = 0; i < 32; i++) {
+ *r = ((*r * base) + b32[i]) % EXHAUSTIVE_TEST_ORDER;
+ }
+ /* just deny overflow, it basically always happens */
+ if (overflow) *overflow = 0;
+}
+
+static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) {
+ memset(bin, 0, 32);
+ bin[28] = *a >> 24; bin[29] = *a >> 16; bin[30] = *a >> 8; bin[31] = *a;
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) {
+ return *a == 0;
+}
+
+static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) {
+ if (*a == 0) {
+ *r = 0;
+ } else {
+ *r = EXHAUSTIVE_TEST_ORDER - *a;
+ }
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) {
+ return *a == 1;
+}
+
+static int secp256k1_scalar_is_high(const secp256k1_scalar *a) {
+ return *a > EXHAUSTIVE_TEST_ORDER / 2;
+}
+
+static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {
+ if (flag) secp256k1_scalar_negate(r, r);
+ return flag ? -1 : 1;
+}
+
+static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ *r = (*a * *b) % EXHAUSTIVE_TEST_ORDER;
+}
+
+static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) {
+ int ret;
+ VERIFY_CHECK(n > 0);
+ VERIFY_CHECK(n < 16);
+ ret = *r & ((1 << n) - 1);
+ *r >>= n;
+ return ret;
+}
+
+static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) {
+ *r = (*a * *a) % EXHAUSTIVE_TEST_ORDER;
+}
+
+static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
+ *r1 = *a;
+ *r2 = 0;
+}
+
+SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) {
+ return *a == *b;
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/secp256k1.c b/crypto/secp256k1/libsecp256k1/src/secp256k1.c
new file mode 100644
index 000000000..7d637bfad
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/secp256k1.c
@@ -0,0 +1,559 @@
+/**********************************************************************
+ * Copyright (c) 2013-2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#include "include/secp256k1.h"
+
+#include "util.h"
+#include "num_impl.h"
+#include "field_impl.h"
+#include "scalar_impl.h"
+#include "group_impl.h"
+#include "ecmult_impl.h"
+#include "ecmult_const_impl.h"
+#include "ecmult_gen_impl.h"
+#include "ecdsa_impl.h"
+#include "eckey_impl.h"
+#include "hash_impl.h"
+
+#define ARG_CHECK(cond) do { \
+ if (EXPECT(!(cond), 0)) { \
+ secp256k1_callback_call(&ctx->illegal_callback, #cond); \
+ return 0; \
+ } \
+} while(0)
+
+static void default_illegal_callback_fn(const char* str, void* data) {
+ fprintf(stderr, "[libsecp256k1] illegal argument: %s\n", str);
+ abort();
+}
+
+static const secp256k1_callback default_illegal_callback = {
+ default_illegal_callback_fn,
+ NULL
+};
+
+static void default_error_callback_fn(const char* str, void* data) {
+ fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str);
+ abort();
+}
+
+static const secp256k1_callback default_error_callback = {
+ default_error_callback_fn,
+ NULL
+};
+
+
+struct secp256k1_context_struct {
+ secp256k1_ecmult_context ecmult_ctx;
+ secp256k1_ecmult_gen_context ecmult_gen_ctx;
+ secp256k1_callback illegal_callback;
+ secp256k1_callback error_callback;
+};
+
+secp256k1_context* secp256k1_context_create(unsigned int flags) {
+ secp256k1_context* ret = (secp256k1_context*)checked_malloc(&default_error_callback, sizeof(secp256k1_context));
+ ret->illegal_callback = default_illegal_callback;
+ ret->error_callback = default_error_callback;
+
+ if (EXPECT((flags & SECP256K1_FLAGS_TYPE_MASK) != SECP256K1_FLAGS_TYPE_CONTEXT, 0)) {
+ secp256k1_callback_call(&ret->illegal_callback,
+ "Invalid flags");
+ free(ret);
+ return NULL;
+ }
+
+ secp256k1_ecmult_context_init(&ret->ecmult_ctx);
+ secp256k1_ecmult_gen_context_init(&ret->ecmult_gen_ctx);
+
+ if (flags & SECP256K1_FLAGS_BIT_CONTEXT_SIGN) {
+ secp256k1_ecmult_gen_context_build(&ret->ecmult_gen_ctx, &ret->error_callback);
+ }
+ if (flags & SECP256K1_FLAGS_BIT_CONTEXT_VERIFY) {
+ secp256k1_ecmult_context_build(&ret->ecmult_ctx, &ret->error_callback);
+ }
+
+ return ret;
+}
+
+secp256k1_context* secp256k1_context_clone(const secp256k1_context* ctx) {
+ secp256k1_context* ret = (secp256k1_context*)checked_malloc(&ctx->error_callback, sizeof(secp256k1_context));
+ ret->illegal_callback = ctx->illegal_callback;
+ ret->error_callback = ctx->error_callback;
+ secp256k1_ecmult_context_clone(&ret->ecmult_ctx, &ctx->ecmult_ctx, &ctx->error_callback);
+ secp256k1_ecmult_gen_context_clone(&ret->ecmult_gen_ctx, &ctx->ecmult_gen_ctx, &ctx->error_callback);
+ return ret;
+}
+
+void secp256k1_context_destroy(secp256k1_context* ctx) {
+ if (ctx != NULL) {
+ secp256k1_ecmult_context_clear(&ctx->ecmult_ctx);
+ secp256k1_ecmult_gen_context_clear(&ctx->ecmult_gen_ctx);
+
+ free(ctx);
+ }
+}
+
+void secp256k1_context_set_illegal_callback(secp256k1_context* ctx, void (*fun)(const char* message, void* data), const void* data) {
+ if (fun == NULL) {
+ fun = default_illegal_callback_fn;
+ }
+ ctx->illegal_callback.fn = fun;
+ ctx->illegal_callback.data = data;
+}
+
+void secp256k1_context_set_error_callback(secp256k1_context* ctx, void (*fun)(const char* message, void* data), const void* data) {
+ if (fun == NULL) {
+ fun = default_error_callback_fn;
+ }
+ ctx->error_callback.fn = fun;
+ ctx->error_callback.data = data;
+}
+
+static int secp256k1_pubkey_load(const secp256k1_context* ctx, secp256k1_ge* ge, const secp256k1_pubkey* pubkey) {
+ if (sizeof(secp256k1_ge_storage) == 64) {
+ /* When the secp256k1_ge_storage type is exactly 64 byte, use its
+ * representation inside secp256k1_pubkey, as conversion is very fast.
+ * Note that secp256k1_pubkey_save must use the same representation. */
+ secp256k1_ge_storage s;
+ memcpy(&s, &pubkey->data[0], 64);
+ secp256k1_ge_from_storage(ge, &s);
+ } else {
+ /* Otherwise, fall back to 32-byte big endian for X and Y. */
+ secp256k1_fe x, y;
+ secp256k1_fe_set_b32(&x, pubkey->data);
+ secp256k1_fe_set_b32(&y, pubkey->data + 32);
+ secp256k1_ge_set_xy(ge, &x, &y);
+ }
+ ARG_CHECK(!secp256k1_fe_is_zero(&ge->x));
+ return 1;
+}
+
+static void secp256k1_pubkey_save(secp256k1_pubkey* pubkey, secp256k1_ge* ge) {
+ if (sizeof(secp256k1_ge_storage) == 64) {
+ secp256k1_ge_storage s;
+ secp256k1_ge_to_storage(&s, ge);
+ memcpy(&pubkey->data[0], &s, 64);
+ } else {
+ VERIFY_CHECK(!secp256k1_ge_is_infinity(ge));
+ secp256k1_fe_normalize_var(&ge->x);
+ secp256k1_fe_normalize_var(&ge->y);
+ secp256k1_fe_get_b32(pubkey->data, &ge->x);
+ secp256k1_fe_get_b32(pubkey->data + 32, &ge->y);
+ }
+}
+
+int secp256k1_ec_pubkey_parse(const secp256k1_context* ctx, secp256k1_pubkey* pubkey, const unsigned char *input, size_t inputlen) {
+ secp256k1_ge Q;
+
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(pubkey != NULL);
+ memset(pubkey, 0, sizeof(*pubkey));
+ ARG_CHECK(input != NULL);
+ if (!secp256k1_eckey_pubkey_parse(&Q, input, inputlen)) {
+ return 0;
+ }
+ secp256k1_pubkey_save(pubkey, &Q);
+ secp256k1_ge_clear(&Q);
+ return 1;
+}
+
+int secp256k1_ec_pubkey_serialize(const secp256k1_context* ctx, unsigned char *output, size_t *outputlen, const secp256k1_pubkey* pubkey, unsigned int flags) {
+ secp256k1_ge Q;
+ size_t len;
+ int ret = 0;
+
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(outputlen != NULL);
+ ARG_CHECK(*outputlen >= ((flags & SECP256K1_FLAGS_BIT_COMPRESSION) ? 33 : 65));
+ len = *outputlen;
+ *outputlen = 0;
+ ARG_CHECK(output != NULL);
+ memset(output, 0, len);
+ ARG_CHECK(pubkey != NULL);
+ ARG_CHECK((flags & SECP256K1_FLAGS_TYPE_MASK) == SECP256K1_FLAGS_TYPE_COMPRESSION);
+ if (secp256k1_pubkey_load(ctx, &Q, pubkey)) {
+ ret = secp256k1_eckey_pubkey_serialize(&Q, output, &len, flags & SECP256K1_FLAGS_BIT_COMPRESSION);
+ if (ret) {
+ *outputlen = len;
+ }
+ }
+ return ret;
+}
+
+static void secp256k1_ecdsa_signature_load(const secp256k1_context* ctx, secp256k1_scalar* r, secp256k1_scalar* s, const secp256k1_ecdsa_signature* sig) {
+ (void)ctx;
+ if (sizeof(secp256k1_scalar) == 32) {
+ /* When the secp256k1_scalar type is exactly 32 byte, use its
+ * representation inside secp256k1_ecdsa_signature, as conversion is very fast.
+ * Note that secp256k1_ecdsa_signature_save must use the same representation. */
+ memcpy(r, &sig->data[0], 32);
+ memcpy(s, &sig->data[32], 32);
+ } else {
+ secp256k1_scalar_set_b32(r, &sig->data[0], NULL);
+ secp256k1_scalar_set_b32(s, &sig->data[32], NULL);
+ }
+}
+
+static void secp256k1_ecdsa_signature_save(secp256k1_ecdsa_signature* sig, const secp256k1_scalar* r, const secp256k1_scalar* s) {
+ if (sizeof(secp256k1_scalar) == 32) {
+ memcpy(&sig->data[0], r, 32);
+ memcpy(&sig->data[32], s, 32);
+ } else {
+ secp256k1_scalar_get_b32(&sig->data[0], r);
+ secp256k1_scalar_get_b32(&sig->data[32], s);
+ }
+}
+
+int secp256k1_ecdsa_signature_parse_der(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input, size_t inputlen) {
+ secp256k1_scalar r, s;
+
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(sig != NULL);
+ ARG_CHECK(input != NULL);
+
+ if (secp256k1_ecdsa_sig_parse(&r, &s, input, inputlen)) {
+ secp256k1_ecdsa_signature_save(sig, &r, &s);
+ return 1;
+ } else {
+ memset(sig, 0, sizeof(*sig));
+ return 0;
+ }
+}
+
+int secp256k1_ecdsa_signature_parse_compact(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input64) {
+ secp256k1_scalar r, s;
+ int ret = 1;
+ int overflow = 0;
+
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(sig != NULL);
+ ARG_CHECK(input64 != NULL);
+
+ secp256k1_scalar_set_b32(&r, &input64[0], &overflow);
+ ret &= !overflow;
+ secp256k1_scalar_set_b32(&s, &input64[32], &overflow);
+ ret &= !overflow;
+ if (ret) {
+ secp256k1_ecdsa_signature_save(sig, &r, &s);
+ } else {
+ memset(sig, 0, sizeof(*sig));
+ }
+ return ret;
+}
+
+int secp256k1_ecdsa_signature_serialize_der(const secp256k1_context* ctx, unsigned char *output, size_t *outputlen, const secp256k1_ecdsa_signature* sig) {
+ secp256k1_scalar r, s;
+
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(output != NULL);
+ ARG_CHECK(outputlen != NULL);
+ ARG_CHECK(sig != NULL);
+
+ secp256k1_ecdsa_signature_load(ctx, &r, &s, sig);
+ return secp256k1_ecdsa_sig_serialize(output, outputlen, &r, &s);
+}
+
+int secp256k1_ecdsa_signature_serialize_compact(const secp256k1_context* ctx, unsigned char *output64, const secp256k1_ecdsa_signature* sig) {
+ secp256k1_scalar r, s;
+
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(output64 != NULL);
+ ARG_CHECK(sig != NULL);
+
+ secp256k1_ecdsa_signature_load(ctx, &r, &s, sig);
+ secp256k1_scalar_get_b32(&output64[0], &r);
+ secp256k1_scalar_get_b32(&output64[32], &s);
+ return 1;
+}
+
+int secp256k1_ecdsa_signature_normalize(const secp256k1_context* ctx, secp256k1_ecdsa_signature *sigout, const secp256k1_ecdsa_signature *sigin) {
+ secp256k1_scalar r, s;
+ int ret = 0;
+
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(sigin != NULL);
+
+ secp256k1_ecdsa_signature_load(ctx, &r, &s, sigin);
+ ret = secp256k1_scalar_is_high(&s);
+ if (sigout != NULL) {
+ if (ret) {
+ secp256k1_scalar_negate(&s, &s);
+ }
+ secp256k1_ecdsa_signature_save(sigout, &r, &s);
+ }
+
+ return ret;
+}
+
+int secp256k1_ecdsa_verify(const secp256k1_context* ctx, const secp256k1_ecdsa_signature *sig, const unsigned char *msg32, const secp256k1_pubkey *pubkey) {
+ secp256k1_ge q;
+ secp256k1_scalar r, s;
+ secp256k1_scalar m;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
+ ARG_CHECK(msg32 != NULL);
+ ARG_CHECK(sig != NULL);
+ ARG_CHECK(pubkey != NULL);
+
+ secp256k1_scalar_set_b32(&m, msg32, NULL);
+ secp256k1_ecdsa_signature_load(ctx, &r, &s, sig);
+ return (!secp256k1_scalar_is_high(&s) &&
+ secp256k1_pubkey_load(ctx, &q, pubkey) &&
+ secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &r, &s, &q, &m));
+}
+
+static int nonce_function_rfc6979(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
+ unsigned char keydata[112];
+ int keylen = 64;
+ secp256k1_rfc6979_hmac_sha256_t rng;
+ unsigned int i;
+ /* We feed a byte array to the PRNG as input, consisting of:
+ * - the private key (32 bytes) and message (32 bytes), see RFC 6979 3.2d.
+ * - optionally 32 extra bytes of data, see RFC 6979 3.6 Additional Data.
+ * - optionally 16 extra bytes with the algorithm name.
+ * Because the arguments have distinct fixed lengths it is not possible for
+ * different argument mixtures to emulate each other and result in the same
+ * nonces.
+ */
+ memcpy(keydata, key32, 32);
+ memcpy(keydata + 32, msg32, 32);
+ if (data != NULL) {
+ memcpy(keydata + 64, data, 32);
+ keylen = 96;
+ }
+ if (algo16 != NULL) {
+ memcpy(keydata + keylen, algo16, 16);
+ keylen += 16;
+ }
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, keydata, keylen);
+ memset(keydata, 0, sizeof(keydata));
+ for (i = 0; i <= counter; i++) {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
+ }
+ secp256k1_rfc6979_hmac_sha256_finalize(&rng);
+ return 1;
+}
+
+const secp256k1_nonce_function secp256k1_nonce_function_rfc6979 = nonce_function_rfc6979;
+const secp256k1_nonce_function secp256k1_nonce_function_default = nonce_function_rfc6979;
+
+int secp256k1_ecdsa_sign(const secp256k1_context* ctx, secp256k1_ecdsa_signature *signature, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void* noncedata) {
+ secp256k1_scalar r, s;
+ secp256k1_scalar sec, non, msg;
+ int ret = 0;
+ int overflow = 0;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
+ ARG_CHECK(msg32 != NULL);
+ ARG_CHECK(signature != NULL);
+ ARG_CHECK(seckey != NULL);
+ if (noncefp == NULL) {
+ noncefp = secp256k1_nonce_function_default;
+ }
+
+ secp256k1_scalar_set_b32(&sec, seckey, &overflow);
+ /* Fail if the secret key is invalid. */
+ if (!overflow && !secp256k1_scalar_is_zero(&sec)) {
+ unsigned char nonce32[32];
+ unsigned int count = 0;
+ secp256k1_scalar_set_b32(&msg, msg32, NULL);
+ while (1) {
+ ret = noncefp(nonce32, msg32, seckey, NULL, (void*)noncedata, count);
+ if (!ret) {
+ break;
+ }
+ secp256k1_scalar_set_b32(&non, nonce32, &overflow);
+ if (!overflow && !secp256k1_scalar_is_zero(&non)) {
+ if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &r, &s, &sec, &msg, &non, NULL)) {
+ break;
+ }
+ }
+ count++;
+ }
+ memset(nonce32, 0, 32);
+ secp256k1_scalar_clear(&msg);
+ secp256k1_scalar_clear(&non);
+ secp256k1_scalar_clear(&sec);
+ }
+ if (ret) {
+ secp256k1_ecdsa_signature_save(signature, &r, &s);
+ } else {
+ memset(signature, 0, sizeof(*signature));
+ }
+ return ret;
+}
+
+int secp256k1_ec_seckey_verify(const secp256k1_context* ctx, const unsigned char *seckey) {
+ secp256k1_scalar sec;
+ int ret;
+ int overflow;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(seckey != NULL);
+
+ secp256k1_scalar_set_b32(&sec, seckey, &overflow);
+ ret = !overflow && !secp256k1_scalar_is_zero(&sec);
+ secp256k1_scalar_clear(&sec);
+ return ret;
+}
+
+int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *seckey) {
+ secp256k1_gej pj;
+ secp256k1_ge p;
+ secp256k1_scalar sec;
+ int overflow;
+ int ret = 0;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(pubkey != NULL);
+ memset(pubkey, 0, sizeof(*pubkey));
+ ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
+ ARG_CHECK(seckey != NULL);
+
+ secp256k1_scalar_set_b32(&sec, seckey, &overflow);
+ ret = (!overflow) & (!secp256k1_scalar_is_zero(&sec));
+ if (ret) {
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec);
+ secp256k1_ge_set_gej(&p, &pj);
+ secp256k1_pubkey_save(pubkey, &p);
+ }
+ secp256k1_scalar_clear(&sec);
+ return ret;
+}
+
+int secp256k1_ec_privkey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
+ secp256k1_scalar term;
+ secp256k1_scalar sec;
+ int ret = 0;
+ int overflow = 0;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(seckey != NULL);
+ ARG_CHECK(tweak != NULL);
+
+ secp256k1_scalar_set_b32(&term, tweak, &overflow);
+ secp256k1_scalar_set_b32(&sec, seckey, NULL);
+
+ ret = !overflow && secp256k1_eckey_privkey_tweak_add(&sec, &term);
+ memset(seckey, 0, 32);
+ if (ret) {
+ secp256k1_scalar_get_b32(seckey, &sec);
+ }
+
+ secp256k1_scalar_clear(&sec);
+ secp256k1_scalar_clear(&term);
+ return ret;
+}
+
+int secp256k1_ec_pubkey_tweak_add(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
+ secp256k1_ge p;
+ secp256k1_scalar term;
+ int ret = 0;
+ int overflow = 0;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
+ ARG_CHECK(pubkey != NULL);
+ ARG_CHECK(tweak != NULL);
+
+ secp256k1_scalar_set_b32(&term, tweak, &overflow);
+ ret = !overflow && secp256k1_pubkey_load(ctx, &p, pubkey);
+ memset(pubkey, 0, sizeof(*pubkey));
+ if (ret) {
+ if (secp256k1_eckey_pubkey_tweak_add(&ctx->ecmult_ctx, &p, &term)) {
+ secp256k1_pubkey_save(pubkey, &p);
+ } else {
+ ret = 0;
+ }
+ }
+
+ return ret;
+}
+
+int secp256k1_ec_privkey_tweak_mul(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
+ secp256k1_scalar factor;
+ secp256k1_scalar sec;
+ int ret = 0;
+ int overflow = 0;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(seckey != NULL);
+ ARG_CHECK(tweak != NULL);
+
+ secp256k1_scalar_set_b32(&factor, tweak, &overflow);
+ secp256k1_scalar_set_b32(&sec, seckey, NULL);
+ ret = !overflow && secp256k1_eckey_privkey_tweak_mul(&sec, &factor);
+ memset(seckey, 0, 32);
+ if (ret) {
+ secp256k1_scalar_get_b32(seckey, &sec);
+ }
+
+ secp256k1_scalar_clear(&sec);
+ secp256k1_scalar_clear(&factor);
+ return ret;
+}
+
+int secp256k1_ec_pubkey_tweak_mul(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
+ secp256k1_ge p;
+ secp256k1_scalar factor;
+ int ret = 0;
+ int overflow = 0;
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
+ ARG_CHECK(pubkey != NULL);
+ ARG_CHECK(tweak != NULL);
+
+ secp256k1_scalar_set_b32(&factor, tweak, &overflow);
+ ret = !overflow && secp256k1_pubkey_load(ctx, &p, pubkey);
+ memset(pubkey, 0, sizeof(*pubkey));
+ if (ret) {
+ if (secp256k1_eckey_pubkey_tweak_mul(&ctx->ecmult_ctx, &p, &factor)) {
+ secp256k1_pubkey_save(pubkey, &p);
+ } else {
+ ret = 0;
+ }
+ }
+
+ return ret;
+}
+
+int secp256k1_context_randomize(secp256k1_context* ctx, const unsigned char *seed32) {
+ VERIFY_CHECK(ctx != NULL);
+ ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32);
+ return 1;
+}
+
+int secp256k1_ec_pubkey_combine(const secp256k1_context* ctx, secp256k1_pubkey *pubnonce, const secp256k1_pubkey * const *pubnonces, size_t n) {
+ size_t i;
+ secp256k1_gej Qj;
+ secp256k1_ge Q;
+
+ ARG_CHECK(pubnonce != NULL);
+ memset(pubnonce, 0, sizeof(*pubnonce));
+ ARG_CHECK(n >= 1);
+ ARG_CHECK(pubnonces != NULL);
+
+ secp256k1_gej_set_infinity(&Qj);
+
+ for (i = 0; i < n; i++) {
+ secp256k1_pubkey_load(ctx, &Q, pubnonces[i]);
+ secp256k1_gej_add_ge(&Qj, &Qj, &Q);
+ }
+ if (secp256k1_gej_is_infinity(&Qj)) {
+ return 0;
+ }
+ secp256k1_ge_set_gej(&Q, &Qj);
+ secp256k1_pubkey_save(pubnonce, &Q);
+ return 1;
+}
+
+#ifdef ENABLE_MODULE_ECDH
+# include "modules/ecdh/main_impl.h"
+#endif
+
+#ifdef ENABLE_MODULE_SCHNORR
+# include "modules/schnorr/main_impl.h"
+#endif
+
+#ifdef ENABLE_MODULE_RECOVERY
+# include "modules/recovery/main_impl.h"
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/testrand.h b/crypto/secp256k1/libsecp256k1/src/testrand.h
new file mode 100644
index 000000000..f8efa93c7
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/testrand.h
@@ -0,0 +1,38 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_TESTRAND_H_
+#define _SECP256K1_TESTRAND_H_
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+/* A non-cryptographic RNG used only for test infrastructure. */
+
+/** Seed the pseudorandom number generator for testing. */
+SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16);
+
+/** Generate a pseudorandom number in the range [0..2**32-1]. */
+static uint32_t secp256k1_rand32(void);
+
+/** Generate a pseudorandom number in the range [0..2**bits-1]. Bits must be 1 or
+ * more. */
+static uint32_t secp256k1_rand_bits(int bits);
+
+/** Generate a pseudorandom number in the range [0..range-1]. */
+static uint32_t secp256k1_rand_int(uint32_t range);
+
+/** Generate a pseudorandom 32-byte array. */
+static void secp256k1_rand256(unsigned char *b32);
+
+/** Generate a pseudorandom 32-byte array with long sequences of zero and one bits. */
+static void secp256k1_rand256_test(unsigned char *b32);
+
+/** Generate pseudorandom bytes with long sequences of zero and one bits. */
+static void secp256k1_rand_bytes_test(unsigned char *bytes, size_t len);
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/testrand_impl.h b/crypto/secp256k1/libsecp256k1/src/testrand_impl.h
new file mode 100644
index 000000000..15c7b9f12
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/testrand_impl.h
@@ -0,0 +1,110 @@
+/**********************************************************************
+ * Copyright (c) 2013-2015 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_TESTRAND_IMPL_H_
+#define _SECP256K1_TESTRAND_IMPL_H_
+
+#include <stdint.h>
+#include <string.h>
+
+#include "testrand.h"
+#include "hash.h"
+
+static secp256k1_rfc6979_hmac_sha256_t secp256k1_test_rng;
+static uint32_t secp256k1_test_rng_precomputed[8];
+static int secp256k1_test_rng_precomputed_used = 8;
+static uint64_t secp256k1_test_rng_integer;
+static int secp256k1_test_rng_integer_bits_left = 0;
+
+SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16) {
+ secp256k1_rfc6979_hmac_sha256_initialize(&secp256k1_test_rng, seed16, 16);
+}
+
+SECP256K1_INLINE static uint32_t secp256k1_rand32(void) {
+ if (secp256k1_test_rng_precomputed_used == 8) {
+ secp256k1_rfc6979_hmac_sha256_generate(&secp256k1_test_rng, (unsigned char*)(&secp256k1_test_rng_precomputed[0]), sizeof(secp256k1_test_rng_precomputed));
+ secp256k1_test_rng_precomputed_used = 0;
+ }
+ return secp256k1_test_rng_precomputed[secp256k1_test_rng_precomputed_used++];
+}
+
+static uint32_t secp256k1_rand_bits(int bits) {
+ uint32_t ret;
+ if (secp256k1_test_rng_integer_bits_left < bits) {
+ secp256k1_test_rng_integer |= (((uint64_t)secp256k1_rand32()) << secp256k1_test_rng_integer_bits_left);
+ secp256k1_test_rng_integer_bits_left += 32;
+ }
+ ret = secp256k1_test_rng_integer;
+ secp256k1_test_rng_integer >>= bits;
+ secp256k1_test_rng_integer_bits_left -= bits;
+ ret &= ((~((uint32_t)0)) >> (32 - bits));
+ return ret;
+}
+
+static uint32_t secp256k1_rand_int(uint32_t range) {
+ /* We want a uniform integer between 0 and range-1, inclusive.
+ * B is the smallest number such that range <= 2**B.
+ * two mechanisms implemented here:
+ * - generate B bits numbers until one below range is found, and return it
+ * - find the largest multiple M of range that is <= 2**(B+A), generate B+A
+ * bits numbers until one below M is found, and return it modulo range
+ * The second mechanism consumes A more bits of entropy in every iteration,
+ * but may need fewer iterations due to M being closer to 2**(B+A) then
+ * range is to 2**B. The array below (indexed by B) contains a 0 when the
+ * first mechanism is to be used, and the number A otherwise.
+ */
+ static const int addbits[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0};
+ uint32_t trange, mult;
+ int bits = 0;
+ if (range <= 1) {
+ return 0;
+ }
+ trange = range - 1;
+ while (trange > 0) {
+ trange >>= 1;
+ bits++;
+ }
+ if (addbits[bits]) {
+ bits = bits + addbits[bits];
+ mult = ((~((uint32_t)0)) >> (32 - bits)) / range;
+ trange = range * mult;
+ } else {
+ trange = range;
+ mult = 1;
+ }
+ while(1) {
+ uint32_t x = secp256k1_rand_bits(bits);
+ if (x < trange) {
+ return (mult == 1) ? x : (x % range);
+ }
+ }
+}
+
+static void secp256k1_rand256(unsigned char *b32) {
+ secp256k1_rfc6979_hmac_sha256_generate(&secp256k1_test_rng, b32, 32);
+}
+
+static void secp256k1_rand_bytes_test(unsigned char *bytes, size_t len) {
+ size_t bits = 0;
+ memset(bytes, 0, len);
+ while (bits < len * 8) {
+ int now;
+ uint32_t val;
+ now = 1 + (secp256k1_rand_bits(6) * secp256k1_rand_bits(5) + 16) / 31;
+ val = secp256k1_rand_bits(1);
+ while (now > 0 && bits < len * 8) {
+ bytes[bits / 8] |= val << (bits % 8);
+ now--;
+ bits++;
+ }
+ }
+}
+
+static void secp256k1_rand256_test(unsigned char *b32) {
+ secp256k1_rand_bytes_test(b32, 32);
+}
+
+#endif
diff --git a/crypto/secp256k1/libsecp256k1/src/tests.c b/crypto/secp256k1/libsecp256k1/src/tests.c
new file mode 100644
index 000000000..9ae7d3028
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/tests.c
@@ -0,0 +1,4525 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <time.h>
+
+#include "secp256k1.c"
+#include "include/secp256k1.h"
+#include "testrand_impl.h"
+
+#ifdef ENABLE_OPENSSL_TESTS
+#include "openssl/bn.h"
+#include "openssl/ec.h"
+#include "openssl/ecdsa.h"
+#include "openssl/obj_mac.h"
+#endif
+
+#include "contrib/lax_der_parsing.c"
+#include "contrib/lax_der_privatekey_parsing.c"
+
+#if !defined(VG_CHECK)
+# if defined(VALGRIND)
+# include <valgrind/memcheck.h>
+# define VG_UNDEF(x,y) VALGRIND_MAKE_MEM_UNDEFINED((x),(y))
+# define VG_CHECK(x,y) VALGRIND_CHECK_MEM_IS_DEFINED((x),(y))
+# else
+# define VG_UNDEF(x,y)
+# define VG_CHECK(x,y)
+# endif
+#endif
+
+static int count = 64;
+static secp256k1_context *ctx = NULL;
+
+static void counting_illegal_callback_fn(const char* str, void* data) {
+ /* Dummy callback function that just counts. */
+ int32_t *p;
+ (void)str;
+ p = data;
+ (*p)++;
+}
+
+static void uncounting_illegal_callback_fn(const char* str, void* data) {
+ /* Dummy callback function that just counts (backwards). */
+ int32_t *p;
+ (void)str;
+ p = data;
+ (*p)--;
+}
+
+void random_field_element_test(secp256k1_fe *fe) {
+ do {
+ unsigned char b32[32];
+ secp256k1_rand256_test(b32);
+ if (secp256k1_fe_set_b32(fe, b32)) {
+ break;
+ }
+ } while(1);
+}
+
+void random_field_element_magnitude(secp256k1_fe *fe) {
+ secp256k1_fe zero;
+ int n = secp256k1_rand_int(9);
+ secp256k1_fe_normalize(fe);
+ if (n == 0) {
+ return;
+ }
+ secp256k1_fe_clear(&zero);
+ secp256k1_fe_negate(&zero, &zero, 0);
+ secp256k1_fe_mul_int(&zero, n - 1);
+ secp256k1_fe_add(fe, &zero);
+ VERIFY_CHECK(fe->magnitude == n);
+}
+
+void random_group_element_test(secp256k1_ge *ge) {
+ secp256k1_fe fe;
+ do {
+ random_field_element_test(&fe);
+ if (secp256k1_ge_set_xo_var(ge, &fe, secp256k1_rand_bits(1))) {
+ secp256k1_fe_normalize(&ge->y);
+ break;
+ }
+ } while(1);
+}
+
+void random_group_element_jacobian_test(secp256k1_gej *gej, const secp256k1_ge *ge) {
+ secp256k1_fe z2, z3;
+ do {
+ random_field_element_test(&gej->z);
+ if (!secp256k1_fe_is_zero(&gej->z)) {
+ break;
+ }
+ } while(1);
+ secp256k1_fe_sqr(&z2, &gej->z);
+ secp256k1_fe_mul(&z3, &z2, &gej->z);
+ secp256k1_fe_mul(&gej->x, &ge->x, &z2);
+ secp256k1_fe_mul(&gej->y, &ge->y, &z3);
+ gej->infinity = ge->infinity;
+}
+
+void random_scalar_order_test(secp256k1_scalar *num) {
+ do {
+ unsigned char b32[32];
+ int overflow = 0;
+ secp256k1_rand256_test(b32);
+ secp256k1_scalar_set_b32(num, b32, &overflow);
+ if (overflow || secp256k1_scalar_is_zero(num)) {
+ continue;
+ }
+ break;
+ } while(1);
+}
+
+void random_scalar_order(secp256k1_scalar *num) {
+ do {
+ unsigned char b32[32];
+ int overflow = 0;
+ secp256k1_rand256(b32);
+ secp256k1_scalar_set_b32(num, b32, &overflow);
+ if (overflow || secp256k1_scalar_is_zero(num)) {
+ continue;
+ }
+ break;
+ } while(1);
+}
+
+void run_context_tests(void) {
+ secp256k1_pubkey pubkey;
+ secp256k1_ecdsa_signature sig;
+ unsigned char ctmp[32];
+ int32_t ecount;
+ int32_t ecount2;
+ secp256k1_context *none = secp256k1_context_create(SECP256K1_CONTEXT_NONE);
+ secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
+ secp256k1_context *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
+ secp256k1_context *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+
+ secp256k1_gej pubj;
+ secp256k1_ge pub;
+ secp256k1_scalar msg, key, nonce;
+ secp256k1_scalar sigr, sigs;
+
+ ecount = 0;
+ ecount2 = 10;
+ secp256k1_context_set_illegal_callback(vrfy, counting_illegal_callback_fn, &ecount);
+ secp256k1_context_set_illegal_callback(sign, counting_illegal_callback_fn, &ecount2);
+ secp256k1_context_set_error_callback(sign, counting_illegal_callback_fn, NULL);
+ CHECK(vrfy->error_callback.fn != sign->error_callback.fn);
+
+ /*** clone and destroy all of them to make sure cloning was complete ***/
+ {
+ secp256k1_context *ctx_tmp;
+
+ ctx_tmp = none; none = secp256k1_context_clone(none); secp256k1_context_destroy(ctx_tmp);
+ ctx_tmp = sign; sign = secp256k1_context_clone(sign); secp256k1_context_destroy(ctx_tmp);
+ ctx_tmp = vrfy; vrfy = secp256k1_context_clone(vrfy); secp256k1_context_destroy(ctx_tmp);
+ ctx_tmp = both; both = secp256k1_context_clone(both); secp256k1_context_destroy(ctx_tmp);
+ }
+
+ /* Verify that the error callback makes it across the clone. */
+ CHECK(vrfy->error_callback.fn != sign->error_callback.fn);
+ /* And that it resets back to default. */
+ secp256k1_context_set_error_callback(sign, NULL, NULL);
+ CHECK(vrfy->error_callback.fn == sign->error_callback.fn);
+
+ /*** attempt to use them ***/
+ random_scalar_order_test(&msg);
+ random_scalar_order_test(&key);
+ secp256k1_ecmult_gen(&both->ecmult_gen_ctx, &pubj, &key);
+ secp256k1_ge_set_gej(&pub, &pubj);
+
+ /* Verify context-type checking illegal-argument errors. */
+ memset(ctmp, 1, 32);
+ CHECK(secp256k1_ec_pubkey_create(vrfy, &pubkey, ctmp) == 0);
+ CHECK(ecount == 1);
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(sign, &pubkey, ctmp) == 1);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ecdsa_sign(vrfy, &sig, ctmp, ctmp, NULL, NULL) == 0);
+ CHECK(ecount == 2);
+ VG_UNDEF(&sig, sizeof(sig));
+ CHECK(secp256k1_ecdsa_sign(sign, &sig, ctmp, ctmp, NULL, NULL) == 1);
+ VG_CHECK(&sig, sizeof(sig));
+ CHECK(ecount2 == 10);
+ CHECK(secp256k1_ecdsa_verify(sign, &sig, ctmp, &pubkey) == 0);
+ CHECK(ecount2 == 11);
+ CHECK(secp256k1_ecdsa_verify(vrfy, &sig, ctmp, &pubkey) == 1);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ec_pubkey_tweak_add(sign, &pubkey, ctmp) == 0);
+ CHECK(ecount2 == 12);
+ CHECK(secp256k1_ec_pubkey_tweak_add(vrfy, &pubkey, ctmp) == 1);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ec_pubkey_tweak_mul(sign, &pubkey, ctmp) == 0);
+ CHECK(ecount2 == 13);
+ CHECK(secp256k1_ec_pubkey_tweak_mul(vrfy, &pubkey, ctmp) == 1);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_context_randomize(vrfy, ctmp) == 0);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_context_randomize(sign, NULL) == 1);
+ CHECK(ecount2 == 13);
+ secp256k1_context_set_illegal_callback(vrfy, NULL, NULL);
+ secp256k1_context_set_illegal_callback(sign, NULL, NULL);
+
+ /* This shouldn't leak memory, due to already-set tests. */
+ secp256k1_ecmult_gen_context_build(&sign->ecmult_gen_ctx, NULL);
+ secp256k1_ecmult_context_build(&vrfy->ecmult_ctx, NULL);
+
+ /* obtain a working nonce */
+ do {
+ random_scalar_order_test(&nonce);
+ } while(!secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL));
+
+ /* try signing */
+ CHECK(secp256k1_ecdsa_sig_sign(&sign->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL));
+ CHECK(secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL));
+
+ /* try verifying */
+ CHECK(secp256k1_ecdsa_sig_verify(&vrfy->ecmult_ctx, &sigr, &sigs, &pub, &msg));
+ CHECK(secp256k1_ecdsa_sig_verify(&both->ecmult_ctx, &sigr, &sigs, &pub, &msg));
+
+ /* cleanup */
+ secp256k1_context_destroy(none);
+ secp256k1_context_destroy(sign);
+ secp256k1_context_destroy(vrfy);
+ secp256k1_context_destroy(both);
+ /* Defined as no-op. */
+ secp256k1_context_destroy(NULL);
+}
+
+/***** HASH TESTS *****/
+
+void run_sha256_tests(void) {
+ static const char *inputs[8] = {
+ "", "abc", "message digest", "secure hash algorithm", "SHA256 is considered to be safe",
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ "For this sample, this 63-byte string will be used as input data",
+ "This is exactly 64 bytes long, not counting the terminating byte"
+ };
+ static const unsigned char outputs[8][32] = {
+ {0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55},
+ {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad},
+ {0xf7, 0x84, 0x6f, 0x55, 0xcf, 0x23, 0xe1, 0x4e, 0xeb, 0xea, 0xb5, 0xb4, 0xe1, 0x55, 0x0c, 0xad, 0x5b, 0x50, 0x9e, 0x33, 0x48, 0xfb, 0xc4, 0xef, 0xa3, 0xa1, 0x41, 0x3d, 0x39, 0x3c, 0xb6, 0x50},
+ {0xf3, 0x0c, 0xeb, 0x2b, 0xb2, 0x82, 0x9e, 0x79, 0xe4, 0xca, 0x97, 0x53, 0xd3, 0x5a, 0x8e, 0xcc, 0x00, 0x26, 0x2d, 0x16, 0x4c, 0xc0, 0x77, 0x08, 0x02, 0x95, 0x38, 0x1c, 0xbd, 0x64, 0x3f, 0x0d},
+ {0x68, 0x19, 0xd9, 0x15, 0xc7, 0x3f, 0x4d, 0x1e, 0x77, 0xe4, 0xe1, 0xb5, 0x2d, 0x1f, 0xa0, 0xf9, 0xcf, 0x9b, 0xea, 0xea, 0xd3, 0x93, 0x9f, 0x15, 0x87, 0x4b, 0xd9, 0x88, 0xe2, 0xa2, 0x36, 0x30},
+ {0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1},
+ {0xf0, 0x8a, 0x78, 0xcb, 0xba, 0xee, 0x08, 0x2b, 0x05, 0x2a, 0xe0, 0x70, 0x8f, 0x32, 0xfa, 0x1e, 0x50, 0xc5, 0xc4, 0x21, 0xaa, 0x77, 0x2b, 0xa5, 0xdb, 0xb4, 0x06, 0xa2, 0xea, 0x6b, 0xe3, 0x42},
+ {0xab, 0x64, 0xef, 0xf7, 0xe8, 0x8e, 0x2e, 0x46, 0x16, 0x5e, 0x29, 0xf2, 0xbc, 0xe4, 0x18, 0x26, 0xbd, 0x4c, 0x7b, 0x35, 0x52, 0xf6, 0xb3, 0x82, 0xa9, 0xe7, 0xd3, 0xaf, 0x47, 0xc2, 0x45, 0xf8}
+ };
+ int i;
+ for (i = 0; i < 8; i++) {
+ unsigned char out[32];
+ secp256k1_sha256_t hasher;
+ secp256k1_sha256_initialize(&hasher);
+ secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i]), strlen(inputs[i]));
+ secp256k1_sha256_finalize(&hasher, out);
+ CHECK(memcmp(out, outputs[i], 32) == 0);
+ if (strlen(inputs[i]) > 0) {
+ int split = secp256k1_rand_int(strlen(inputs[i]));
+ secp256k1_sha256_initialize(&hasher);
+ secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i]), split);
+ secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i] + split), strlen(inputs[i]) - split);
+ secp256k1_sha256_finalize(&hasher, out);
+ CHECK(memcmp(out, outputs[i], 32) == 0);
+ }
+ }
+}
+
+void run_hmac_sha256_tests(void) {
+ static const char *keys[6] = {
+ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
+ "\x4a\x65\x66\x65",
+ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
+ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+ };
+ static const char *inputs[6] = {
+ "\x48\x69\x20\x54\x68\x65\x72\x65",
+ "\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20\x6e\x6f\x74\x68\x69\x6e\x67\x3f",
+ "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
+ "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
+ "\x54\x65\x73\x74\x20\x55\x73\x69\x6e\x67\x20\x4c\x61\x72\x67\x65\x72\x20\x54\x68\x61\x6e\x20\x42\x6c\x6f\x63\x6b\x2d\x53\x69\x7a\x65\x20\x4b\x65\x79\x20\x2d\x20\x48\x61\x73\x68\x20\x4b\x65\x79\x20\x46\x69\x72\x73\x74",
+ "\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68\x6d\x2e"
+ };
+ static const unsigned char outputs[6][32] = {
+ {0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7},
+ {0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e, 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7, 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83, 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43},
+ {0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46, 0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7, 0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22, 0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe},
+ {0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e, 0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a, 0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07, 0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b},
+ {0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f, 0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f, 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14, 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54},
+ {0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb, 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44, 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93, 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2}
+ };
+ int i;
+ for (i = 0; i < 6; i++) {
+ secp256k1_hmac_sha256_t hasher;
+ unsigned char out[32];
+ secp256k1_hmac_sha256_initialize(&hasher, (const unsigned char*)(keys[i]), strlen(keys[i]));
+ secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i]), strlen(inputs[i]));
+ secp256k1_hmac_sha256_finalize(&hasher, out);
+ CHECK(memcmp(out, outputs[i], 32) == 0);
+ if (strlen(inputs[i]) > 0) {
+ int split = secp256k1_rand_int(strlen(inputs[i]));
+ secp256k1_hmac_sha256_initialize(&hasher, (const unsigned char*)(keys[i]), strlen(keys[i]));
+ secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i]), split);
+ secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i] + split), strlen(inputs[i]) - split);
+ secp256k1_hmac_sha256_finalize(&hasher, out);
+ CHECK(memcmp(out, outputs[i], 32) == 0);
+ }
+ }
+}
+
+void run_rfc6979_hmac_sha256_tests(void) {
+ static const unsigned char key1[65] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x00, 0x4b, 0xf5, 0x12, 0x2f, 0x34, 0x45, 0x54, 0xc5, 0x3b, 0xde, 0x2e, 0xbb, 0x8c, 0xd2, 0xb7, 0xe3, 0xd1, 0x60, 0x0a, 0xd6, 0x31, 0xc3, 0x85, 0xa5, 0xd7, 0xcc, 0xe2, 0x3c, 0x77, 0x85, 0x45, 0x9a, 0};
+ static const unsigned char out1[3][32] = {
+ {0x4f, 0xe2, 0x95, 0x25, 0xb2, 0x08, 0x68, 0x09, 0x15, 0x9a, 0xcd, 0xf0, 0x50, 0x6e, 0xfb, 0x86, 0xb0, 0xec, 0x93, 0x2c, 0x7b, 0xa4, 0x42, 0x56, 0xab, 0x32, 0x1e, 0x42, 0x1e, 0x67, 0xe9, 0xfb},
+ {0x2b, 0xf0, 0xff, 0xf1, 0xd3, 0xc3, 0x78, 0xa2, 0x2d, 0xc5, 0xde, 0x1d, 0x85, 0x65, 0x22, 0x32, 0x5c, 0x65, 0xb5, 0x04, 0x49, 0x1a, 0x0c, 0xbd, 0x01, 0xcb, 0x8f, 0x3a, 0xa6, 0x7f, 0xfd, 0x4a},
+ {0xf5, 0x28, 0xb4, 0x10, 0xcb, 0x54, 0x1f, 0x77, 0x00, 0x0d, 0x7a, 0xfb, 0x6c, 0x5b, 0x53, 0xc5, 0xc4, 0x71, 0xea, 0xb4, 0x3e, 0x46, 0x6d, 0x9a, 0xc5, 0x19, 0x0c, 0x39, 0xc8, 0x2f, 0xd8, 0x2e}
+ };
+
+ static const unsigned char key2[64] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55};
+ static const unsigned char out2[3][32] = {
+ {0x9c, 0x23, 0x6c, 0x16, 0x5b, 0x82, 0xae, 0x0c, 0xd5, 0x90, 0x65, 0x9e, 0x10, 0x0b, 0x6b, 0xab, 0x30, 0x36, 0xe7, 0xba, 0x8b, 0x06, 0x74, 0x9b, 0xaf, 0x69, 0x81, 0xe1, 0x6f, 0x1a, 0x2b, 0x95},
+ {0xdf, 0x47, 0x10, 0x61, 0x62, 0x5b, 0xc0, 0xea, 0x14, 0xb6, 0x82, 0xfe, 0xee, 0x2c, 0x9c, 0x02, 0xf2, 0x35, 0xda, 0x04, 0x20, 0x4c, 0x1d, 0x62, 0xa1, 0x53, 0x6c, 0x6e, 0x17, 0xae, 0xd7, 0xa9},
+ {0x75, 0x97, 0x88, 0x7c, 0xbd, 0x76, 0x32, 0x1f, 0x32, 0xe3, 0x04, 0x40, 0x67, 0x9a, 0x22, 0xcf, 0x7f, 0x8d, 0x9d, 0x2e, 0xac, 0x39, 0x0e, 0x58, 0x1f, 0xea, 0x09, 0x1c, 0xe2, 0x02, 0xba, 0x94}
+ };
+
+ secp256k1_rfc6979_hmac_sha256_t rng;
+ unsigned char out[32];
+ int i;
+
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 64);
+ for (i = 0; i < 3; i++) {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
+ CHECK(memcmp(out, out1[i], 32) == 0);
+ }
+ secp256k1_rfc6979_hmac_sha256_finalize(&rng);
+
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 65);
+ for (i = 0; i < 3; i++) {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
+ CHECK(memcmp(out, out1[i], 32) != 0);
+ }
+ secp256k1_rfc6979_hmac_sha256_finalize(&rng);
+
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, key2, 64);
+ for (i = 0; i < 3; i++) {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
+ CHECK(memcmp(out, out2[i], 32) == 0);
+ }
+ secp256k1_rfc6979_hmac_sha256_finalize(&rng);
+}
+
+/***** RANDOM TESTS *****/
+
+void test_rand_bits(int rand32, int bits) {
+ /* (1-1/2^B)^rounds[B] < 1/10^9, so rounds is the number of iterations to
+ * get a false negative chance below once in a billion */
+ static const unsigned int rounds[7] = {1, 30, 73, 156, 322, 653, 1316};
+ /* We try multiplying the results with various odd numbers, which shouldn't
+ * influence the uniform distribution modulo a power of 2. */
+ static const uint32_t mults[6] = {1, 3, 21, 289, 0x9999, 0x80402011};
+ /* We only select up to 6 bits from the output to analyse */
+ unsigned int usebits = bits > 6 ? 6 : bits;
+ unsigned int maxshift = bits - usebits;
+ /* For each of the maxshift+1 usebits-bit sequences inside a bits-bit
+ number, track all observed outcomes, one per bit in a uint64_t. */
+ uint64_t x[6][27] = {{0}};
+ unsigned int i, shift, m;
+ /* Multiply the output of all rand calls with the odd number m, which
+ should not change the uniformity of its distribution. */
+ for (i = 0; i < rounds[usebits]; i++) {
+ uint32_t r = (rand32 ? secp256k1_rand32() : secp256k1_rand_bits(bits));
+ CHECK((((uint64_t)r) >> bits) == 0);
+ for (m = 0; m < sizeof(mults) / sizeof(mults[0]); m++) {
+ uint32_t rm = r * mults[m];
+ for (shift = 0; shift <= maxshift; shift++) {
+ x[m][shift] |= (((uint64_t)1) << ((rm >> shift) & ((1 << usebits) - 1)));
+ }
+ }
+ }
+ for (m = 0; m < sizeof(mults) / sizeof(mults[0]); m++) {
+ for (shift = 0; shift <= maxshift; shift++) {
+ /* Test that the lower usebits bits of x[shift] are 1 */
+ CHECK(((~x[m][shift]) << (64 - (1 << usebits))) == 0);
+ }
+ }
+}
+
+/* Subrange must be a whole divisor of range, and at most 64 */
+void test_rand_int(uint32_t range, uint32_t subrange) {
+ /* (1-1/subrange)^rounds < 1/10^9 */
+ int rounds = (subrange * 2073) / 100;
+ int i;
+ uint64_t x = 0;
+ CHECK((range % subrange) == 0);
+ for (i = 0; i < rounds; i++) {
+ uint32_t r = secp256k1_rand_int(range);
+ CHECK(r < range);
+ r = r % subrange;
+ x |= (((uint64_t)1) << r);
+ }
+ /* Test that the lower subrange bits of x are 1. */
+ CHECK(((~x) << (64 - subrange)) == 0);
+}
+
+void run_rand_bits(void) {
+ size_t b;
+ test_rand_bits(1, 32);
+ for (b = 1; b <= 32; b++) {
+ test_rand_bits(0, b);
+ }
+}
+
+void run_rand_int(void) {
+ static const uint32_t ms[] = {1, 3, 17, 1000, 13771, 999999, 33554432};
+ static const uint32_t ss[] = {1, 3, 6, 9, 13, 31, 64};
+ unsigned int m, s;
+ for (m = 0; m < sizeof(ms) / sizeof(ms[0]); m++) {
+ for (s = 0; s < sizeof(ss) / sizeof(ss[0]); s++) {
+ test_rand_int(ms[m] * ss[s], ss[s]);
+ }
+ }
+}
+
+/***** NUM TESTS *****/
+
+#ifndef USE_NUM_NONE
+void random_num_negate(secp256k1_num *num) {
+ if (secp256k1_rand_bits(1)) {
+ secp256k1_num_negate(num);
+ }
+}
+
+void random_num_order_test(secp256k1_num *num) {
+ secp256k1_scalar sc;
+ random_scalar_order_test(&sc);
+ secp256k1_scalar_get_num(num, &sc);
+}
+
+void random_num_order(secp256k1_num *num) {
+ secp256k1_scalar sc;
+ random_scalar_order(&sc);
+ secp256k1_scalar_get_num(num, &sc);
+}
+
+void test_num_negate(void) {
+ secp256k1_num n1;
+ secp256k1_num n2;
+ random_num_order_test(&n1); /* n1 = R */
+ random_num_negate(&n1);
+ secp256k1_num_copy(&n2, &n1); /* n2 = R */
+ secp256k1_num_sub(&n1, &n2, &n1); /* n1 = n2-n1 = 0 */
+ CHECK(secp256k1_num_is_zero(&n1));
+ secp256k1_num_copy(&n1, &n2); /* n1 = R */
+ secp256k1_num_negate(&n1); /* n1 = -R */
+ CHECK(!secp256k1_num_is_zero(&n1));
+ secp256k1_num_add(&n1, &n2, &n1); /* n1 = n2+n1 = 0 */
+ CHECK(secp256k1_num_is_zero(&n1));
+ secp256k1_num_copy(&n1, &n2); /* n1 = R */
+ secp256k1_num_negate(&n1); /* n1 = -R */
+ CHECK(secp256k1_num_is_neg(&n1) != secp256k1_num_is_neg(&n2));
+ secp256k1_num_negate(&n1); /* n1 = R */
+ CHECK(secp256k1_num_eq(&n1, &n2));
+}
+
+void test_num_add_sub(void) {
+ int i;
+ secp256k1_scalar s;
+ secp256k1_num n1;
+ secp256k1_num n2;
+ secp256k1_num n1p2, n2p1, n1m2, n2m1;
+ random_num_order_test(&n1); /* n1 = R1 */
+ if (secp256k1_rand_bits(1)) {
+ random_num_negate(&n1);
+ }
+ random_num_order_test(&n2); /* n2 = R2 */
+ if (secp256k1_rand_bits(1)) {
+ random_num_negate(&n2);
+ }
+ secp256k1_num_add(&n1p2, &n1, &n2); /* n1p2 = R1 + R2 */
+ secp256k1_num_add(&n2p1, &n2, &n1); /* n2p1 = R2 + R1 */
+ secp256k1_num_sub(&n1m2, &n1, &n2); /* n1m2 = R1 - R2 */
+ secp256k1_num_sub(&n2m1, &n2, &n1); /* n2m1 = R2 - R1 */
+ CHECK(secp256k1_num_eq(&n1p2, &n2p1));
+ CHECK(!secp256k1_num_eq(&n1p2, &n1m2));
+ secp256k1_num_negate(&n2m1); /* n2m1 = -R2 + R1 */
+ CHECK(secp256k1_num_eq(&n2m1, &n1m2));
+ CHECK(!secp256k1_num_eq(&n2m1, &n1));
+ secp256k1_num_add(&n2m1, &n2m1, &n2); /* n2m1 = -R2 + R1 + R2 = R1 */
+ CHECK(secp256k1_num_eq(&n2m1, &n1));
+ CHECK(!secp256k1_num_eq(&n2p1, &n1));
+ secp256k1_num_sub(&n2p1, &n2p1, &n2); /* n2p1 = R2 + R1 - R2 = R1 */
+ CHECK(secp256k1_num_eq(&n2p1, &n1));
+
+ /* check is_one */
+ secp256k1_scalar_set_int(&s, 1);
+ secp256k1_scalar_get_num(&n1, &s);
+ CHECK(secp256k1_num_is_one(&n1));
+ /* check that 2^n + 1 is never 1 */
+ secp256k1_scalar_get_num(&n2, &s);
+ for (i = 0; i < 250; ++i) {
+ secp256k1_num_add(&n1, &n1, &n1); /* n1 *= 2 */
+ secp256k1_num_add(&n1p2, &n1, &n2); /* n1p2 = n1 + 1 */
+ CHECK(!secp256k1_num_is_one(&n1p2));
+ }
+}
+
+void test_num_mod(void) {
+ int i;
+ secp256k1_scalar s;
+ secp256k1_num order, n;
+
+ /* check that 0 mod anything is 0 */
+ random_scalar_order_test(&s);
+ secp256k1_scalar_get_num(&order, &s);
+ secp256k1_scalar_set_int(&s, 0);
+ secp256k1_scalar_get_num(&n, &s);
+ secp256k1_num_mod(&n, &order);
+ CHECK(secp256k1_num_is_zero(&n));
+
+ /* check that anything mod 1 is 0 */
+ secp256k1_scalar_set_int(&s, 1);
+ secp256k1_scalar_get_num(&order, &s);
+ secp256k1_scalar_get_num(&n, &s);
+ secp256k1_num_mod(&n, &order);
+ CHECK(secp256k1_num_is_zero(&n));
+
+ /* check that increasing the number past 2^256 does not break this */
+ random_scalar_order_test(&s);
+ secp256k1_scalar_get_num(&n, &s);
+ /* multiply by 2^8, which'll test this case with high probability */
+ for (i = 0; i < 8; ++i) {
+ secp256k1_num_add(&n, &n, &n);
+ }
+ secp256k1_num_mod(&n, &order);
+ CHECK(secp256k1_num_is_zero(&n));
+}
+
+void test_num_jacobi(void) {
+ secp256k1_scalar sqr;
+ secp256k1_scalar small;
+ secp256k1_scalar five; /* five is not a quadratic residue */
+ secp256k1_num order, n;
+ int i;
+ /* squares mod 5 are 1, 4 */
+ const int jacobi5[10] = { 0, 1, -1, -1, 1, 0, 1, -1, -1, 1 };
+
+ /* check some small values with 5 as the order */
+ secp256k1_scalar_set_int(&five, 5);
+ secp256k1_scalar_get_num(&order, &five);
+ for (i = 0; i < 10; ++i) {
+ secp256k1_scalar_set_int(&small, i);
+ secp256k1_scalar_get_num(&n, &small);
+ CHECK(secp256k1_num_jacobi(&n, &order) == jacobi5[i]);
+ }
+
+ /** test large values with 5 as group order */
+ secp256k1_scalar_get_num(&order, &five);
+ /* we first need a scalar which is not a multiple of 5 */
+ do {
+ secp256k1_num fiven;
+ random_scalar_order_test(&sqr);
+ secp256k1_scalar_get_num(&fiven, &five);
+ secp256k1_scalar_get_num(&n, &sqr);
+ secp256k1_num_mod(&n, &fiven);
+ } while (secp256k1_num_is_zero(&n));
+ /* next force it to be a residue. 2 is a nonresidue mod 5 so we can
+ * just multiply by two, i.e. add the number to itself */
+ if (secp256k1_num_jacobi(&n, &order) == -1) {
+ secp256k1_num_add(&n, &n, &n);
+ }
+
+ /* test residue */
+ CHECK(secp256k1_num_jacobi(&n, &order) == 1);
+ /* test nonresidue */
+ secp256k1_num_add(&n, &n, &n);
+ CHECK(secp256k1_num_jacobi(&n, &order) == -1);
+
+ /** test with secp group order as order */
+ secp256k1_scalar_order_get_num(&order);
+ random_scalar_order_test(&sqr);
+ secp256k1_scalar_sqr(&sqr, &sqr);
+ /* test residue */
+ secp256k1_scalar_get_num(&n, &sqr);
+ CHECK(secp256k1_num_jacobi(&n, &order) == 1);
+ /* test nonresidue */
+ secp256k1_scalar_mul(&sqr, &sqr, &five);
+ secp256k1_scalar_get_num(&n, &sqr);
+ CHECK(secp256k1_num_jacobi(&n, &order) == -1);
+ /* test multiple of the order*/
+ CHECK(secp256k1_num_jacobi(&order, &order) == 0);
+
+ /* check one less than the order */
+ secp256k1_scalar_set_int(&small, 1);
+ secp256k1_scalar_get_num(&n, &small);
+ secp256k1_num_sub(&n, &order, &n);
+ CHECK(secp256k1_num_jacobi(&n, &order) == 1); /* sage confirms this is 1 */
+}
+
+void run_num_smalltests(void) {
+ int i;
+ for (i = 0; i < 100*count; i++) {
+ test_num_negate();
+ test_num_add_sub();
+ test_num_mod();
+ test_num_jacobi();
+ }
+}
+#endif
+
+/***** SCALAR TESTS *****/
+
+void scalar_test(void) {
+ secp256k1_scalar s;
+ secp256k1_scalar s1;
+ secp256k1_scalar s2;
+#ifndef USE_NUM_NONE
+ secp256k1_num snum, s1num, s2num;
+ secp256k1_num order, half_order;
+#endif
+ unsigned char c[32];
+
+ /* Set 's' to a random scalar, with value 'snum'. */
+ random_scalar_order_test(&s);
+
+ /* Set 's1' to a random scalar, with value 's1num'. */
+ random_scalar_order_test(&s1);
+
+ /* Set 's2' to a random scalar, with value 'snum2', and byte array representation 'c'. */
+ random_scalar_order_test(&s2);
+ secp256k1_scalar_get_b32(c, &s2);
+
+#ifndef USE_NUM_NONE
+ secp256k1_scalar_get_num(&snum, &s);
+ secp256k1_scalar_get_num(&s1num, &s1);
+ secp256k1_scalar_get_num(&s2num, &s2);
+
+ secp256k1_scalar_order_get_num(&order);
+ half_order = order;
+ secp256k1_num_shift(&half_order, 1);
+#endif
+
+ {
+ int i;
+ /* Test that fetching groups of 4 bits from a scalar and recursing n(i)=16*n(i-1)+p(i) reconstructs it. */
+ secp256k1_scalar n;
+ secp256k1_scalar_set_int(&n, 0);
+ for (i = 0; i < 256; i += 4) {
+ secp256k1_scalar t;
+ int j;
+ secp256k1_scalar_set_int(&t, secp256k1_scalar_get_bits(&s, 256 - 4 - i, 4));
+ for (j = 0; j < 4; j++) {
+ secp256k1_scalar_add(&n, &n, &n);
+ }
+ secp256k1_scalar_add(&n, &n, &t);
+ }
+ CHECK(secp256k1_scalar_eq(&n, &s));
+ }
+
+ {
+ /* Test that fetching groups of randomly-sized bits from a scalar and recursing n(i)=b*n(i-1)+p(i) reconstructs it. */
+ secp256k1_scalar n;
+ int i = 0;
+ secp256k1_scalar_set_int(&n, 0);
+ while (i < 256) {
+ secp256k1_scalar t;
+ int j;
+ int now = secp256k1_rand_int(15) + 1;
+ if (now + i > 256) {
+ now = 256 - i;
+ }
+ secp256k1_scalar_set_int(&t, secp256k1_scalar_get_bits_var(&s, 256 - now - i, now));
+ for (j = 0; j < now; j++) {
+ secp256k1_scalar_add(&n, &n, &n);
+ }
+ secp256k1_scalar_add(&n, &n, &t);
+ i += now;
+ }
+ CHECK(secp256k1_scalar_eq(&n, &s));
+ }
+
+#ifndef USE_NUM_NONE
+ {
+ /* Test that adding the scalars together is equal to adding their numbers together modulo the order. */
+ secp256k1_num rnum;
+ secp256k1_num r2num;
+ secp256k1_scalar r;
+ secp256k1_num_add(&rnum, &snum, &s2num);
+ secp256k1_num_mod(&rnum, &order);
+ secp256k1_scalar_add(&r, &s, &s2);
+ secp256k1_scalar_get_num(&r2num, &r);
+ CHECK(secp256k1_num_eq(&rnum, &r2num));
+ }
+
+ {
+ /* Test that multiplying the scalars is equal to multiplying their numbers modulo the order. */
+ secp256k1_scalar r;
+ secp256k1_num r2num;
+ secp256k1_num rnum;
+ secp256k1_num_mul(&rnum, &snum, &s2num);
+ secp256k1_num_mod(&rnum, &order);
+ secp256k1_scalar_mul(&r, &s, &s2);
+ secp256k1_scalar_get_num(&r2num, &r);
+ CHECK(secp256k1_num_eq(&rnum, &r2num));
+ /* The result can only be zero if at least one of the factors was zero. */
+ CHECK(secp256k1_scalar_is_zero(&r) == (secp256k1_scalar_is_zero(&s) || secp256k1_scalar_is_zero(&s2)));
+ /* The results can only be equal to one of the factors if that factor was zero, or the other factor was one. */
+ CHECK(secp256k1_num_eq(&rnum, &snum) == (secp256k1_scalar_is_zero(&s) || secp256k1_scalar_is_one(&s2)));
+ CHECK(secp256k1_num_eq(&rnum, &s2num) == (secp256k1_scalar_is_zero(&s2) || secp256k1_scalar_is_one(&s)));
+ }
+
+ {
+ secp256k1_scalar neg;
+ secp256k1_num negnum;
+ secp256k1_num negnum2;
+ /* Check that comparison with zero matches comparison with zero on the number. */
+ CHECK(secp256k1_num_is_zero(&snum) == secp256k1_scalar_is_zero(&s));
+ /* Check that comparison with the half order is equal to testing for high scalar. */
+ CHECK(secp256k1_scalar_is_high(&s) == (secp256k1_num_cmp(&snum, &half_order) > 0));
+ secp256k1_scalar_negate(&neg, &s);
+ secp256k1_num_sub(&negnum, &order, &snum);
+ secp256k1_num_mod(&negnum, &order);
+ /* Check that comparison with the half order is equal to testing for high scalar after negation. */
+ CHECK(secp256k1_scalar_is_high(&neg) == (secp256k1_num_cmp(&negnum, &half_order) > 0));
+ /* Negating should change the high property, unless the value was already zero. */
+ CHECK((secp256k1_scalar_is_high(&s) == secp256k1_scalar_is_high(&neg)) == secp256k1_scalar_is_zero(&s));
+ secp256k1_scalar_get_num(&negnum2, &neg);
+ /* Negating a scalar should be equal to (order - n) mod order on the number. */
+ CHECK(secp256k1_num_eq(&negnum, &negnum2));
+ secp256k1_scalar_add(&neg, &neg, &s);
+ /* Adding a number to its negation should result in zero. */
+ CHECK(secp256k1_scalar_is_zero(&neg));
+ secp256k1_scalar_negate(&neg, &neg);
+ /* Negating zero should still result in zero. */
+ CHECK(secp256k1_scalar_is_zero(&neg));
+ }
+
+ {
+ /* Test secp256k1_scalar_mul_shift_var. */
+ secp256k1_scalar r;
+ secp256k1_num one;
+ secp256k1_num rnum;
+ secp256k1_num rnum2;
+ unsigned char cone[1] = {0x01};
+ unsigned int shift = 256 + secp256k1_rand_int(257);
+ secp256k1_scalar_mul_shift_var(&r, &s1, &s2, shift);
+ secp256k1_num_mul(&rnum, &s1num, &s2num);
+ secp256k1_num_shift(&rnum, shift - 1);
+ secp256k1_num_set_bin(&one, cone, 1);
+ secp256k1_num_add(&rnum, &rnum, &one);
+ secp256k1_num_shift(&rnum, 1);
+ secp256k1_scalar_get_num(&rnum2, &r);
+ CHECK(secp256k1_num_eq(&rnum, &rnum2));
+ }
+
+ {
+ /* test secp256k1_scalar_shr_int */
+ secp256k1_scalar r;
+ int i;
+ random_scalar_order_test(&r);
+ for (i = 0; i < 100; ++i) {
+ int low;
+ int shift = 1 + secp256k1_rand_int(15);
+ int expected = r.d[0] % (1 << shift);
+ low = secp256k1_scalar_shr_int(&r, shift);
+ CHECK(expected == low);
+ }
+ }
+#endif
+
+ {
+ /* Test that scalar inverses are equal to the inverse of their number modulo the order. */
+ if (!secp256k1_scalar_is_zero(&s)) {
+ secp256k1_scalar inv;
+#ifndef USE_NUM_NONE
+ secp256k1_num invnum;
+ secp256k1_num invnum2;
+#endif
+ secp256k1_scalar_inverse(&inv, &s);
+#ifndef USE_NUM_NONE
+ secp256k1_num_mod_inverse(&invnum, &snum, &order);
+ secp256k1_scalar_get_num(&invnum2, &inv);
+ CHECK(secp256k1_num_eq(&invnum, &invnum2));
+#endif
+ secp256k1_scalar_mul(&inv, &inv, &s);
+ /* Multiplying a scalar with its inverse must result in one. */
+ CHECK(secp256k1_scalar_is_one(&inv));
+ secp256k1_scalar_inverse(&inv, &inv);
+ /* Inverting one must result in one. */
+ CHECK(secp256k1_scalar_is_one(&inv));
+#ifndef USE_NUM_NONE
+ secp256k1_scalar_get_num(&invnum, &inv);
+ CHECK(secp256k1_num_is_one(&invnum));
+#endif
+ }
+ }
+
+ {
+ /* Test commutativity of add. */
+ secp256k1_scalar r1, r2;
+ secp256k1_scalar_add(&r1, &s1, &s2);
+ secp256k1_scalar_add(&r2, &s2, &s1);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ }
+
+ {
+ secp256k1_scalar r1, r2;
+ secp256k1_scalar b;
+ int i;
+ /* Test add_bit. */
+ int bit = secp256k1_rand_bits(8);
+ secp256k1_scalar_set_int(&b, 1);
+ CHECK(secp256k1_scalar_is_one(&b));
+ for (i = 0; i < bit; i++) {
+ secp256k1_scalar_add(&b, &b, &b);
+ }
+ r1 = s1;
+ r2 = s1;
+ if (!secp256k1_scalar_add(&r1, &r1, &b)) {
+ /* No overflow happened. */
+ secp256k1_scalar_cadd_bit(&r2, bit, 1);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ /* cadd is a noop when flag is zero */
+ secp256k1_scalar_cadd_bit(&r2, bit, 0);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ }
+ }
+
+ {
+ /* Test commutativity of mul. */
+ secp256k1_scalar r1, r2;
+ secp256k1_scalar_mul(&r1, &s1, &s2);
+ secp256k1_scalar_mul(&r2, &s2, &s1);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ }
+
+ {
+ /* Test associativity of add. */
+ secp256k1_scalar r1, r2;
+ secp256k1_scalar_add(&r1, &s1, &s2);
+ secp256k1_scalar_add(&r1, &r1, &s);
+ secp256k1_scalar_add(&r2, &s2, &s);
+ secp256k1_scalar_add(&r2, &s1, &r2);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ }
+
+ {
+ /* Test associativity of mul. */
+ secp256k1_scalar r1, r2;
+ secp256k1_scalar_mul(&r1, &s1, &s2);
+ secp256k1_scalar_mul(&r1, &r1, &s);
+ secp256k1_scalar_mul(&r2, &s2, &s);
+ secp256k1_scalar_mul(&r2, &s1, &r2);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ }
+
+ {
+ /* Test distributitivity of mul over add. */
+ secp256k1_scalar r1, r2, t;
+ secp256k1_scalar_add(&r1, &s1, &s2);
+ secp256k1_scalar_mul(&r1, &r1, &s);
+ secp256k1_scalar_mul(&r2, &s1, &s);
+ secp256k1_scalar_mul(&t, &s2, &s);
+ secp256k1_scalar_add(&r2, &r2, &t);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ }
+
+ {
+ /* Test square. */
+ secp256k1_scalar r1, r2;
+ secp256k1_scalar_sqr(&r1, &s1);
+ secp256k1_scalar_mul(&r2, &s1, &s1);
+ CHECK(secp256k1_scalar_eq(&r1, &r2));
+ }
+
+ {
+ /* Test multiplicative identity. */
+ secp256k1_scalar r1, v1;
+ secp256k1_scalar_set_int(&v1,1);
+ secp256k1_scalar_mul(&r1, &s1, &v1);
+ CHECK(secp256k1_scalar_eq(&r1, &s1));
+ }
+
+ {
+ /* Test additive identity. */
+ secp256k1_scalar r1, v0;
+ secp256k1_scalar_set_int(&v0,0);
+ secp256k1_scalar_add(&r1, &s1, &v0);
+ CHECK(secp256k1_scalar_eq(&r1, &s1));
+ }
+
+ {
+ /* Test zero product property. */
+ secp256k1_scalar r1, v0;
+ secp256k1_scalar_set_int(&v0,0);
+ secp256k1_scalar_mul(&r1, &s1, &v0);
+ CHECK(secp256k1_scalar_eq(&r1, &v0));
+ }
+
+}
+
+void run_scalar_tests(void) {
+ int i;
+ for (i = 0; i < 128 * count; i++) {
+ scalar_test();
+ }
+
+ {
+ /* (-1)+1 should be zero. */
+ secp256k1_scalar s, o;
+ secp256k1_scalar_set_int(&s, 1);
+ CHECK(secp256k1_scalar_is_one(&s));
+ secp256k1_scalar_negate(&o, &s);
+ secp256k1_scalar_add(&o, &o, &s);
+ CHECK(secp256k1_scalar_is_zero(&o));
+ secp256k1_scalar_negate(&o, &o);
+ CHECK(secp256k1_scalar_is_zero(&o));
+ }
+
+#ifndef USE_NUM_NONE
+ {
+ /* A scalar with value of the curve order should be 0. */
+ secp256k1_num order;
+ secp256k1_scalar zero;
+ unsigned char bin[32];
+ int overflow = 0;
+ secp256k1_scalar_order_get_num(&order);
+ secp256k1_num_get_bin(bin, 32, &order);
+ secp256k1_scalar_set_b32(&zero, bin, &overflow);
+ CHECK(overflow == 1);
+ CHECK(secp256k1_scalar_is_zero(&zero));
+ }
+#endif
+
+ {
+ /* Does check_overflow check catch all ones? */
+ static const secp256k1_scalar overflowed = SECP256K1_SCALAR_CONST(
+ 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL,
+ 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL
+ );
+ CHECK(secp256k1_scalar_check_overflow(&overflowed));
+ }
+
+ {
+ /* Static test vectors.
+ * These were reduced from ~10^12 random vectors based on comparison-decision
+ * and edge-case coverage on 32-bit and 64-bit implementations.
+ * The responses were generated with Sage 5.9.
+ */
+ secp256k1_scalar x;
+ secp256k1_scalar y;
+ secp256k1_scalar z;
+ secp256k1_scalar zz;
+ secp256k1_scalar one;
+ secp256k1_scalar r1;
+ secp256k1_scalar r2;
+#if defined(USE_SCALAR_INV_NUM)
+ secp256k1_scalar zzv;
+#endif
+ int overflow;
+ unsigned char chal[33][2][32] = {
+ {{0xff, 0xff, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff}},
+ {{0xef, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x80, 0xff}},
+ {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00},
+ {0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xe0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff}},
+ {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x1e, 0xf8, 0xff, 0xff, 0xff, 0xfd, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xe0,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+ 0xf3, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}},
+ {{0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f,
+ 0x00, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff}},
+ {{0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xfc, 0x9f,
+ 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x80,
+ 0xff, 0x0f, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
+ {0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0xf8, 0xff, 0x0f, 0xc0, 0xff, 0xff,
+ 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x07, 0x80, 0xff, 0xff, 0xff}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf0},
+ {0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
+ {{0x00, 0xf8, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x03, 0xc0, 0xff, 0x0f, 0xfc, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff,
+ 0xff, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xc0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
+ {{0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
+ {{0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x03, 0x00, 0x80, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x80, 0xff, 0x7f},
+ {0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xbf, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00}},
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x80,
+ 0xff, 0x01, 0xfc, 0xff, 0x01, 0x00, 0xfe, 0xff},
+ {0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00}},
+ {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x7f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0xff, 0x01, 0x00, 0xf0, 0xff, 0xff,
+ 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x00},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0xfc, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x3f,
+ 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x0f, 0x7e, 0x00, 0x00}},
+ {{0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfe, 0x07, 0x00},
+ {0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfb, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60}},
+ {{0xff, 0x01, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x00,
+ 0x80, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00}},
+ {{0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xff, 0xff, 0xcf, 0xff, 0x1f, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00},
+ {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0x7f, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
+ {0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x80,
+ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0x7f, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0xfe}},
+ {{0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0x03, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}},
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
+ 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40}},
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
+ {{0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xc0,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff}},
+ {{0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
+ 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x7e, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
+ {{0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x3f, 0x00, 0x00, 0xc0, 0xf1, 0x7f, 0x00}},
+ {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00},
+ {0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
+ 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0xff, 0xff}},
+ {{0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0xff, 0x03, 0xe0, 0x01,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfc, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
+ {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0xff, 0xff, 0xf0, 0x07, 0x00, 0x3c, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x07, 0xe0, 0xff, 0x00, 0x00, 0x00}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf8,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x7f, 0xfe, 0xff, 0x1f,
+ 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff}},
+ {{0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83,
+ 0xff, 0xff, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf0},
+ {0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+ 0xf8, 0x07, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc7, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff}},
+ {{0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
+ 0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x03, 0xfb,
+ 0xfa, 0x8a, 0x7d, 0xdf, 0x13, 0x86, 0xe2, 0x03},
+ {0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
+ 0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x03, 0xfb,
+ 0xfa, 0x8a, 0x7d, 0xdf, 0x13, 0x86, 0xe2, 0x03}}
+ };
+ unsigned char res[33][2][32] = {
+ {{0x0c, 0x3b, 0x0a, 0xca, 0x8d, 0x1a, 0x2f, 0xb9,
+ 0x8a, 0x7b, 0x53, 0x5a, 0x1f, 0xc5, 0x22, 0xa1,
+ 0x07, 0x2a, 0x48, 0xea, 0x02, 0xeb, 0xb3, 0xd6,
+ 0x20, 0x1e, 0x86, 0xd0, 0x95, 0xf6, 0x92, 0x35},
+ {0xdc, 0x90, 0x7a, 0x07, 0x2e, 0x1e, 0x44, 0x6d,
+ 0xf8, 0x15, 0x24, 0x5b, 0x5a, 0x96, 0x37, 0x9c,
+ 0x37, 0x7b, 0x0d, 0xac, 0x1b, 0x65, 0x58, 0x49,
+ 0x43, 0xb7, 0x31, 0xbb, 0xa7, 0xf4, 0x97, 0x15}},
+ {{0xf1, 0xf7, 0x3a, 0x50, 0xe6, 0x10, 0xba, 0x22,
+ 0x43, 0x4d, 0x1f, 0x1f, 0x7c, 0x27, 0xca, 0x9c,
+ 0xb8, 0xb6, 0xa0, 0xfc, 0xd8, 0xc0, 0x05, 0x2f,
+ 0xf7, 0x08, 0xe1, 0x76, 0xdd, 0xd0, 0x80, 0xc8},
+ {0xe3, 0x80, 0x80, 0xb8, 0xdb, 0xe3, 0xa9, 0x77,
+ 0x00, 0xb0, 0xf5, 0x2e, 0x27, 0xe2, 0x68, 0xc4,
+ 0x88, 0xe8, 0x04, 0xc1, 0x12, 0xbf, 0x78, 0x59,
+ 0xe6, 0xa9, 0x7c, 0xe1, 0x81, 0xdd, 0xb9, 0xd5}},
+ {{0x96, 0xe2, 0xee, 0x01, 0xa6, 0x80, 0x31, 0xef,
+ 0x5c, 0xd0, 0x19, 0xb4, 0x7d, 0x5f, 0x79, 0xab,
+ 0xa1, 0x97, 0xd3, 0x7e, 0x33, 0xbb, 0x86, 0x55,
+ 0x60, 0x20, 0x10, 0x0d, 0x94, 0x2d, 0x11, 0x7c},
+ {0xcc, 0xab, 0xe0, 0xe8, 0x98, 0x65, 0x12, 0x96,
+ 0x38, 0x5a, 0x1a, 0xf2, 0x85, 0x23, 0x59, 0x5f,
+ 0xf9, 0xf3, 0xc2, 0x81, 0x70, 0x92, 0x65, 0x12,
+ 0x9c, 0x65, 0x1e, 0x96, 0x00, 0xef, 0xe7, 0x63}},
+ {{0xac, 0x1e, 0x62, 0xc2, 0x59, 0xfc, 0x4e, 0x5c,
+ 0x83, 0xb0, 0xd0, 0x6f, 0xce, 0x19, 0xf6, 0xbf,
+ 0xa4, 0xb0, 0xe0, 0x53, 0x66, 0x1f, 0xbf, 0xc9,
+ 0x33, 0x47, 0x37, 0xa9, 0x3d, 0x5d, 0xb0, 0x48},
+ {0x86, 0xb9, 0x2a, 0x7f, 0x8e, 0xa8, 0x60, 0x42,
+ 0x26, 0x6d, 0x6e, 0x1c, 0xa2, 0xec, 0xe0, 0xe5,
+ 0x3e, 0x0a, 0x33, 0xbb, 0x61, 0x4c, 0x9f, 0x3c,
+ 0xd1, 0xdf, 0x49, 0x33, 0xcd, 0x72, 0x78, 0x18}},
+ {{0xf7, 0xd3, 0xcd, 0x49, 0x5c, 0x13, 0x22, 0xfb,
+ 0x2e, 0xb2, 0x2f, 0x27, 0xf5, 0x8a, 0x5d, 0x74,
+ 0xc1, 0x58, 0xc5, 0xc2, 0x2d, 0x9f, 0x52, 0xc6,
+ 0x63, 0x9f, 0xba, 0x05, 0x76, 0x45, 0x7a, 0x63},
+ {0x8a, 0xfa, 0x55, 0x4d, 0xdd, 0xa3, 0xb2, 0xc3,
+ 0x44, 0xfd, 0xec, 0x72, 0xde, 0xef, 0xc0, 0x99,
+ 0xf5, 0x9f, 0xe2, 0x52, 0xb4, 0x05, 0x32, 0x58,
+ 0x57, 0xc1, 0x8f, 0xea, 0xc3, 0x24, 0x5b, 0x94}},
+ {{0x05, 0x83, 0xee, 0xdd, 0x64, 0xf0, 0x14, 0x3b,
+ 0xa0, 0x14, 0x4a, 0x3a, 0x41, 0x82, 0x7c, 0xa7,
+ 0x2c, 0xaa, 0xb1, 0x76, 0xbb, 0x59, 0x64, 0x5f,
+ 0x52, 0xad, 0x25, 0x29, 0x9d, 0x8f, 0x0b, 0xb0},
+ {0x7e, 0xe3, 0x7c, 0xca, 0xcd, 0x4f, 0xb0, 0x6d,
+ 0x7a, 0xb2, 0x3e, 0xa0, 0x08, 0xb9, 0xa8, 0x2d,
+ 0xc2, 0xf4, 0x99, 0x66, 0xcc, 0xac, 0xd8, 0xb9,
+ 0x72, 0x2a, 0x4a, 0x3e, 0x0f, 0x7b, 0xbf, 0xf4}},
+ {{0x8c, 0x9c, 0x78, 0x2b, 0x39, 0x61, 0x7e, 0xf7,
+ 0x65, 0x37, 0x66, 0x09, 0x38, 0xb9, 0x6f, 0x70,
+ 0x78, 0x87, 0xff, 0xcf, 0x93, 0xca, 0x85, 0x06,
+ 0x44, 0x84, 0xa7, 0xfe, 0xd3, 0xa4, 0xe3, 0x7e},
+ {0xa2, 0x56, 0x49, 0x23, 0x54, 0xa5, 0x50, 0xe9,
+ 0x5f, 0xf0, 0x4d, 0xe7, 0xdc, 0x38, 0x32, 0x79,
+ 0x4f, 0x1c, 0xb7, 0xe4, 0xbb, 0xf8, 0xbb, 0x2e,
+ 0x40, 0x41, 0x4b, 0xcc, 0xe3, 0x1e, 0x16, 0x36}},
+ {{0x0c, 0x1e, 0xd7, 0x09, 0x25, 0x40, 0x97, 0xcb,
+ 0x5c, 0x46, 0xa8, 0xda, 0xef, 0x25, 0xd5, 0xe5,
+ 0x92, 0x4d, 0xcf, 0xa3, 0xc4, 0x5d, 0x35, 0x4a,
+ 0xe4, 0x61, 0x92, 0xf3, 0xbf, 0x0e, 0xcd, 0xbe},
+ {0xe4, 0xaf, 0x0a, 0xb3, 0x30, 0x8b, 0x9b, 0x48,
+ 0x49, 0x43, 0xc7, 0x64, 0x60, 0x4a, 0x2b, 0x9e,
+ 0x95, 0x5f, 0x56, 0xe8, 0x35, 0xdc, 0xeb, 0xdc,
+ 0xc7, 0xc4, 0xfe, 0x30, 0x40, 0xc7, 0xbf, 0xa4}},
+ {{0xd4, 0xa0, 0xf5, 0x81, 0x49, 0x6b, 0xb6, 0x8b,
+ 0x0a, 0x69, 0xf9, 0xfe, 0xa8, 0x32, 0xe5, 0xe0,
+ 0xa5, 0xcd, 0x02, 0x53, 0xf9, 0x2c, 0xe3, 0x53,
+ 0x83, 0x36, 0xc6, 0x02, 0xb5, 0xeb, 0x64, 0xb8},
+ {0x1d, 0x42, 0xb9, 0xf9, 0xe9, 0xe3, 0x93, 0x2c,
+ 0x4c, 0xee, 0x6c, 0x5a, 0x47, 0x9e, 0x62, 0x01,
+ 0x6b, 0x04, 0xfe, 0xa4, 0x30, 0x2b, 0x0d, 0x4f,
+ 0x71, 0x10, 0xd3, 0x55, 0xca, 0xf3, 0x5e, 0x80}},
+ {{0x77, 0x05, 0xf6, 0x0c, 0x15, 0x9b, 0x45, 0xe7,
+ 0xb9, 0x11, 0xb8, 0xf5, 0xd6, 0xda, 0x73, 0x0c,
+ 0xda, 0x92, 0xea, 0xd0, 0x9d, 0xd0, 0x18, 0x92,
+ 0xce, 0x9a, 0xaa, 0xee, 0x0f, 0xef, 0xde, 0x30},
+ {0xf1, 0xf1, 0xd6, 0x9b, 0x51, 0xd7, 0x77, 0x62,
+ 0x52, 0x10, 0xb8, 0x7a, 0x84, 0x9d, 0x15, 0x4e,
+ 0x07, 0xdc, 0x1e, 0x75, 0x0d, 0x0c, 0x3b, 0xdb,
+ 0x74, 0x58, 0x62, 0x02, 0x90, 0x54, 0x8b, 0x43}},
+ {{0xa6, 0xfe, 0x0b, 0x87, 0x80, 0x43, 0x67, 0x25,
+ 0x57, 0x5d, 0xec, 0x40, 0x50, 0x08, 0xd5, 0x5d,
+ 0x43, 0xd7, 0xe0, 0xaa, 0xe0, 0x13, 0xb6, 0xb0,
+ 0xc0, 0xd4, 0xe5, 0x0d, 0x45, 0x83, 0xd6, 0x13},
+ {0x40, 0x45, 0x0a, 0x92, 0x31, 0xea, 0x8c, 0x60,
+ 0x8c, 0x1f, 0xd8, 0x76, 0x45, 0xb9, 0x29, 0x00,
+ 0x26, 0x32, 0xd8, 0xa6, 0x96, 0x88, 0xe2, 0xc4,
+ 0x8b, 0xdb, 0x7f, 0x17, 0x87, 0xcc, 0xc8, 0xf2}},
+ {{0xc2, 0x56, 0xe2, 0xb6, 0x1a, 0x81, 0xe7, 0x31,
+ 0x63, 0x2e, 0xbb, 0x0d, 0x2f, 0x81, 0x67, 0xd4,
+ 0x22, 0xe2, 0x38, 0x02, 0x25, 0x97, 0xc7, 0x88,
+ 0x6e, 0xdf, 0xbe, 0x2a, 0xa5, 0x73, 0x63, 0xaa},
+ {0x50, 0x45, 0xe2, 0xc3, 0xbd, 0x89, 0xfc, 0x57,
+ 0xbd, 0x3c, 0xa3, 0x98, 0x7e, 0x7f, 0x36, 0x38,
+ 0x92, 0x39, 0x1f, 0x0f, 0x81, 0x1a, 0x06, 0x51,
+ 0x1f, 0x8d, 0x6a, 0xff, 0x47, 0x16, 0x06, 0x9c}},
+ {{0x33, 0x95, 0xa2, 0x6f, 0x27, 0x5f, 0x9c, 0x9c,
+ 0x64, 0x45, 0xcb, 0xd1, 0x3c, 0xee, 0x5e, 0x5f,
+ 0x48, 0xa6, 0xaf, 0xe3, 0x79, 0xcf, 0xb1, 0xe2,
+ 0xbf, 0x55, 0x0e, 0xa2, 0x3b, 0x62, 0xf0, 0xe4},
+ {0x14, 0xe8, 0x06, 0xe3, 0xbe, 0x7e, 0x67, 0x01,
+ 0xc5, 0x21, 0x67, 0xd8, 0x54, 0xb5, 0x7f, 0xa4,
+ 0xf9, 0x75, 0x70, 0x1c, 0xfd, 0x79, 0xdb, 0x86,
+ 0xad, 0x37, 0x85, 0x83, 0x56, 0x4e, 0xf0, 0xbf}},
+ {{0xbc, 0xa6, 0xe0, 0x56, 0x4e, 0xef, 0xfa, 0xf5,
+ 0x1d, 0x5d, 0x3f, 0x2a, 0x5b, 0x19, 0xab, 0x51,
+ 0xc5, 0x8b, 0xdd, 0x98, 0x28, 0x35, 0x2f, 0xc3,
+ 0x81, 0x4f, 0x5c, 0xe5, 0x70, 0xb9, 0xeb, 0x62},
+ {0xc4, 0x6d, 0x26, 0xb0, 0x17, 0x6b, 0xfe, 0x6c,
+ 0x12, 0xf8, 0xe7, 0xc1, 0xf5, 0x2f, 0xfa, 0x91,
+ 0x13, 0x27, 0xbd, 0x73, 0xcc, 0x33, 0x31, 0x1c,
+ 0x39, 0xe3, 0x27, 0x6a, 0x95, 0xcf, 0xc5, 0xfb}},
+ {{0x30, 0xb2, 0x99, 0x84, 0xf0, 0x18, 0x2a, 0x6e,
+ 0x1e, 0x27, 0xed, 0xa2, 0x29, 0x99, 0x41, 0x56,
+ 0xe8, 0xd4, 0x0d, 0xef, 0x99, 0x9c, 0xf3, 0x58,
+ 0x29, 0x55, 0x1a, 0xc0, 0x68, 0xd6, 0x74, 0xa4},
+ {0x07, 0x9c, 0xe7, 0xec, 0xf5, 0x36, 0x73, 0x41,
+ 0xa3, 0x1c, 0xe5, 0x93, 0x97, 0x6a, 0xfd, 0xf7,
+ 0x53, 0x18, 0xab, 0xaf, 0xeb, 0x85, 0xbd, 0x92,
+ 0x90, 0xab, 0x3c, 0xbf, 0x30, 0x82, 0xad, 0xf6}},
+ {{0xc6, 0x87, 0x8a, 0x2a, 0xea, 0xc0, 0xa9, 0xec,
+ 0x6d, 0xd3, 0xdc, 0x32, 0x23, 0xce, 0x62, 0x19,
+ 0xa4, 0x7e, 0xa8, 0xdd, 0x1c, 0x33, 0xae, 0xd3,
+ 0x4f, 0x62, 0x9f, 0x52, 0xe7, 0x65, 0x46, 0xf4},
+ {0x97, 0x51, 0x27, 0x67, 0x2d, 0xa2, 0x82, 0x87,
+ 0x98, 0xd3, 0xb6, 0x14, 0x7f, 0x51, 0xd3, 0x9a,
+ 0x0b, 0xd0, 0x76, 0x81, 0xb2, 0x4f, 0x58, 0x92,
+ 0xa4, 0x86, 0xa1, 0xa7, 0x09, 0x1d, 0xef, 0x9b}},
+ {{0xb3, 0x0f, 0x2b, 0x69, 0x0d, 0x06, 0x90, 0x64,
+ 0xbd, 0x43, 0x4c, 0x10, 0xe8, 0x98, 0x1c, 0xa3,
+ 0xe1, 0x68, 0xe9, 0x79, 0x6c, 0x29, 0x51, 0x3f,
+ 0x41, 0xdc, 0xdf, 0x1f, 0xf3, 0x60, 0xbe, 0x33},
+ {0xa1, 0x5f, 0xf7, 0x1d, 0xb4, 0x3e, 0x9b, 0x3c,
+ 0xe7, 0xbd, 0xb6, 0x06, 0xd5, 0x60, 0x06, 0x6d,
+ 0x50, 0xd2, 0xf4, 0x1a, 0x31, 0x08, 0xf2, 0xea,
+ 0x8e, 0xef, 0x5f, 0x7d, 0xb6, 0xd0, 0xc0, 0x27}},
+ {{0x62, 0x9a, 0xd9, 0xbb, 0x38, 0x36, 0xce, 0xf7,
+ 0x5d, 0x2f, 0x13, 0xec, 0xc8, 0x2d, 0x02, 0x8a,
+ 0x2e, 0x72, 0xf0, 0xe5, 0x15, 0x9d, 0x72, 0xae,
+ 0xfc, 0xb3, 0x4f, 0x02, 0xea, 0xe1, 0x09, 0xfe},
+ {0x00, 0x00, 0x00, 0x00, 0xfa, 0x0a, 0x3d, 0xbc,
+ 0xad, 0x16, 0x0c, 0xb6, 0xe7, 0x7c, 0x8b, 0x39,
+ 0x9a, 0x43, 0xbb, 0xe3, 0xc2, 0x55, 0x15, 0x14,
+ 0x75, 0xac, 0x90, 0x9b, 0x7f, 0x9a, 0x92, 0x00}},
+ {{0x8b, 0xac, 0x70, 0x86, 0x29, 0x8f, 0x00, 0x23,
+ 0x7b, 0x45, 0x30, 0xaa, 0xb8, 0x4c, 0xc7, 0x8d,
+ 0x4e, 0x47, 0x85, 0xc6, 0x19, 0xe3, 0x96, 0xc2,
+ 0x9a, 0xa0, 0x12, 0xed, 0x6f, 0xd7, 0x76, 0x16},
+ {0x45, 0xaf, 0x7e, 0x33, 0xc7, 0x7f, 0x10, 0x6c,
+ 0x7c, 0x9f, 0x29, 0xc1, 0xa8, 0x7e, 0x15, 0x84,
+ 0xe7, 0x7d, 0xc0, 0x6d, 0xab, 0x71, 0x5d, 0xd0,
+ 0x6b, 0x9f, 0x97, 0xab, 0xcb, 0x51, 0x0c, 0x9f}},
+ {{0x9e, 0xc3, 0x92, 0xb4, 0x04, 0x9f, 0xc8, 0xbb,
+ 0xdd, 0x9e, 0xc6, 0x05, 0xfd, 0x65, 0xec, 0x94,
+ 0x7f, 0x2c, 0x16, 0xc4, 0x40, 0xac, 0x63, 0x7b,
+ 0x7d, 0xb8, 0x0c, 0xe4, 0x5b, 0xe3, 0xa7, 0x0e},
+ {0x43, 0xf4, 0x44, 0xe8, 0xcc, 0xc8, 0xd4, 0x54,
+ 0x33, 0x37, 0x50, 0xf2, 0x87, 0x42, 0x2e, 0x00,
+ 0x49, 0x60, 0x62, 0x02, 0xfd, 0x1a, 0x7c, 0xdb,
+ 0x29, 0x6c, 0x6d, 0x54, 0x53, 0x08, 0xd1, 0xc8}},
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}},
+ {{0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1,
+ 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0,
+ 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59,
+ 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92},
+ {0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1,
+ 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0,
+ 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59,
+ 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92}},
+ {{0x28, 0x56, 0xac, 0x0e, 0x4f, 0x98, 0x09, 0xf0,
+ 0x49, 0xfa, 0x7f, 0x84, 0xac, 0x7e, 0x50, 0x5b,
+ 0x17, 0x43, 0x14, 0x89, 0x9c, 0x53, 0xa8, 0x94,
+ 0x30, 0xf2, 0x11, 0x4d, 0x92, 0x14, 0x27, 0xe8},
+ {0x39, 0x7a, 0x84, 0x56, 0x79, 0x9d, 0xec, 0x26,
+ 0x2c, 0x53, 0xc1, 0x94, 0xc9, 0x8d, 0x9e, 0x9d,
+ 0x32, 0x1f, 0xdd, 0x84, 0x04, 0xe8, 0xe2, 0x0a,
+ 0x6b, 0xbe, 0xbb, 0x42, 0x40, 0x67, 0x30, 0x6c}},
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4,
+ 0x40, 0x2d, 0xa1, 0x73, 0x2f, 0xc9, 0xbe, 0xbd},
+ {0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1,
+ 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0,
+ 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59,
+ 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92}},
+ {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
+ 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}},
+ {{0x1c, 0xc4, 0xf7, 0xda, 0x0f, 0x65, 0xca, 0x39,
+ 0x70, 0x52, 0x92, 0x8e, 0xc3, 0xc8, 0x15, 0xea,
+ 0x7f, 0x10, 0x9e, 0x77, 0x4b, 0x6e, 0x2d, 0xdf,
+ 0xe8, 0x30, 0x9d, 0xda, 0xe8, 0x9a, 0x65, 0xae},
+ {0x02, 0xb0, 0x16, 0xb1, 0x1d, 0xc8, 0x57, 0x7b,
+ 0xa2, 0x3a, 0xa2, 0xa3, 0x38, 0x5c, 0x8f, 0xeb,
+ 0x66, 0x37, 0x91, 0xa8, 0x5f, 0xef, 0x04, 0xf6,
+ 0x59, 0x75, 0xe1, 0xee, 0x92, 0xf6, 0x0e, 0x30}},
+ {{0x8d, 0x76, 0x14, 0xa4, 0x14, 0x06, 0x9f, 0x9a,
+ 0xdf, 0x4a, 0x85, 0xa7, 0x6b, 0xbf, 0x29, 0x6f,
+ 0xbc, 0x34, 0x87, 0x5d, 0xeb, 0xbb, 0x2e, 0xa9,
+ 0xc9, 0x1f, 0x58, 0xd6, 0x9a, 0x82, 0xa0, 0x56},
+ {0xd4, 0xb9, 0xdb, 0x88, 0x1d, 0x04, 0xe9, 0x93,
+ 0x8d, 0x3f, 0x20, 0xd5, 0x86, 0xa8, 0x83, 0x07,
+ 0xdb, 0x09, 0xd8, 0x22, 0x1f, 0x7f, 0xf1, 0x71,
+ 0xc8, 0xe7, 0x5d, 0x47, 0xaf, 0x8b, 0x72, 0xe9}},
+ {{0x83, 0xb9, 0x39, 0xb2, 0xa4, 0xdf, 0x46, 0x87,
+ 0xc2, 0xb8, 0xf1, 0xe6, 0x4c, 0xd1, 0xe2, 0xa9,
+ 0xe4, 0x70, 0x30, 0x34, 0xbc, 0x52, 0x7c, 0x55,
+ 0xa6, 0xec, 0x80, 0xa4, 0xe5, 0xd2, 0xdc, 0x73},
+ {0x08, 0xf1, 0x03, 0xcf, 0x16, 0x73, 0xe8, 0x7d,
+ 0xb6, 0x7e, 0x9b, 0xc0, 0xb4, 0xc2, 0xa5, 0x86,
+ 0x02, 0x77, 0xd5, 0x27, 0x86, 0xa5, 0x15, 0xfb,
+ 0xae, 0x9b, 0x8c, 0xa9, 0xf9, 0xf8, 0xa8, 0x4a}},
+ {{0x8b, 0x00, 0x49, 0xdb, 0xfa, 0xf0, 0x1b, 0xa2,
+ 0xed, 0x8a, 0x9a, 0x7a, 0x36, 0x78, 0x4a, 0xc7,
+ 0xf7, 0xad, 0x39, 0xd0, 0x6c, 0x65, 0x7a, 0x41,
+ 0xce, 0xd6, 0xd6, 0x4c, 0x20, 0x21, 0x6b, 0xc7},
+ {0xc6, 0xca, 0x78, 0x1d, 0x32, 0x6c, 0x6c, 0x06,
+ 0x91, 0xf2, 0x1a, 0xe8, 0x43, 0x16, 0xea, 0x04,
+ 0x3c, 0x1f, 0x07, 0x85, 0xf7, 0x09, 0x22, 0x08,
+ 0xba, 0x13, 0xfd, 0x78, 0x1e, 0x3f, 0x6f, 0x62}},
+ {{0x25, 0x9b, 0x7c, 0xb0, 0xac, 0x72, 0x6f, 0xb2,
+ 0xe3, 0x53, 0x84, 0x7a, 0x1a, 0x9a, 0x98, 0x9b,
+ 0x44, 0xd3, 0x59, 0xd0, 0x8e, 0x57, 0x41, 0x40,
+ 0x78, 0xa7, 0x30, 0x2f, 0x4c, 0x9c, 0xb9, 0x68},
+ {0xb7, 0x75, 0x03, 0x63, 0x61, 0xc2, 0x48, 0x6e,
+ 0x12, 0x3d, 0xbf, 0x4b, 0x27, 0xdf, 0xb1, 0x7a,
+ 0xff, 0x4e, 0x31, 0x07, 0x83, 0xf4, 0x62, 0x5b,
+ 0x19, 0xa5, 0xac, 0xa0, 0x32, 0x58, 0x0d, 0xa7}},
+ {{0x43, 0x4f, 0x10, 0xa4, 0xca, 0xdb, 0x38, 0x67,
+ 0xfa, 0xae, 0x96, 0xb5, 0x6d, 0x97, 0xff, 0x1f,
+ 0xb6, 0x83, 0x43, 0xd3, 0xa0, 0x2d, 0x70, 0x7a,
+ 0x64, 0x05, 0x4c, 0xa7, 0xc1, 0xa5, 0x21, 0x51},
+ {0xe4, 0xf1, 0x23, 0x84, 0xe1, 0xb5, 0x9d, 0xf2,
+ 0xb8, 0x73, 0x8b, 0x45, 0x2b, 0x35, 0x46, 0x38,
+ 0x10, 0x2b, 0x50, 0xf8, 0x8b, 0x35, 0xcd, 0x34,
+ 0xc8, 0x0e, 0xf6, 0xdb, 0x09, 0x35, 0xf0, 0xda}},
+ {{0xdb, 0x21, 0x5c, 0x8d, 0x83, 0x1d, 0xb3, 0x34,
+ 0xc7, 0x0e, 0x43, 0xa1, 0x58, 0x79, 0x67, 0x13,
+ 0x1e, 0x86, 0x5d, 0x89, 0x63, 0xe6, 0x0a, 0x46,
+ 0x5c, 0x02, 0x97, 0x1b, 0x62, 0x43, 0x86, 0xf5},
+ {0xdb, 0x21, 0x5c, 0x8d, 0x83, 0x1d, 0xb3, 0x34,
+ 0xc7, 0x0e, 0x43, 0xa1, 0x58, 0x79, 0x67, 0x13,
+ 0x1e, 0x86, 0x5d, 0x89, 0x63, 0xe6, 0x0a, 0x46,
+ 0x5c, 0x02, 0x97, 0x1b, 0x62, 0x43, 0x86, 0xf5}}
+ };
+ secp256k1_scalar_set_int(&one, 1);
+ for (i = 0; i < 33; i++) {
+ secp256k1_scalar_set_b32(&x, chal[i][0], &overflow);
+ CHECK(!overflow);
+ secp256k1_scalar_set_b32(&y, chal[i][1], &overflow);
+ CHECK(!overflow);
+ secp256k1_scalar_set_b32(&r1, res[i][0], &overflow);
+ CHECK(!overflow);
+ secp256k1_scalar_set_b32(&r2, res[i][1], &overflow);
+ CHECK(!overflow);
+ secp256k1_scalar_mul(&z, &x, &y);
+ CHECK(!secp256k1_scalar_check_overflow(&z));
+ CHECK(secp256k1_scalar_eq(&r1, &z));
+ if (!secp256k1_scalar_is_zero(&y)) {
+ secp256k1_scalar_inverse(&zz, &y);
+ CHECK(!secp256k1_scalar_check_overflow(&zz));
+#if defined(USE_SCALAR_INV_NUM)
+ secp256k1_scalar_inverse_var(&zzv, &y);
+ CHECK(secp256k1_scalar_eq(&zzv, &zz));
+#endif
+ secp256k1_scalar_mul(&z, &z, &zz);
+ CHECK(!secp256k1_scalar_check_overflow(&z));
+ CHECK(secp256k1_scalar_eq(&x, &z));
+ secp256k1_scalar_mul(&zz, &zz, &y);
+ CHECK(!secp256k1_scalar_check_overflow(&zz));
+ CHECK(secp256k1_scalar_eq(&one, &zz));
+ }
+ secp256k1_scalar_mul(&z, &x, &x);
+ CHECK(!secp256k1_scalar_check_overflow(&z));
+ secp256k1_scalar_sqr(&zz, &x);
+ CHECK(!secp256k1_scalar_check_overflow(&zz));
+ CHECK(secp256k1_scalar_eq(&zz, &z));
+ CHECK(secp256k1_scalar_eq(&r2, &zz));
+ }
+ }
+}
+
+/***** FIELD TESTS *****/
+
+void random_fe(secp256k1_fe *x) {
+ unsigned char bin[32];
+ do {
+ secp256k1_rand256(bin);
+ if (secp256k1_fe_set_b32(x, bin)) {
+ return;
+ }
+ } while(1);
+}
+
+void random_fe_test(secp256k1_fe *x) {
+ unsigned char bin[32];
+ do {
+ secp256k1_rand256_test(bin);
+ if (secp256k1_fe_set_b32(x, bin)) {
+ return;
+ }
+ } while(1);
+}
+
+void random_fe_non_zero(secp256k1_fe *nz) {
+ int tries = 10;
+ while (--tries >= 0) {
+ random_fe(nz);
+ secp256k1_fe_normalize(nz);
+ if (!secp256k1_fe_is_zero(nz)) {
+ break;
+ }
+ }
+ /* Infinitesimal probability of spurious failure here */
+ CHECK(tries >= 0);
+}
+
+void random_fe_non_square(secp256k1_fe *ns) {
+ secp256k1_fe r;
+ random_fe_non_zero(ns);
+ if (secp256k1_fe_sqrt(&r, ns)) {
+ secp256k1_fe_negate(ns, ns, 1);
+ }
+}
+
+int check_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b) {
+ secp256k1_fe an = *a;
+ secp256k1_fe bn = *b;
+ secp256k1_fe_normalize_weak(&an);
+ secp256k1_fe_normalize_var(&bn);
+ return secp256k1_fe_equal_var(&an, &bn);
+}
+
+int check_fe_inverse(const secp256k1_fe *a, const secp256k1_fe *ai) {
+ secp256k1_fe x;
+ secp256k1_fe one = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1);
+ secp256k1_fe_mul(&x, a, ai);
+ return check_fe_equal(&x, &one);
+}
+
+void run_field_convert(void) {
+ static const unsigned char b32[32] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+ 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
+ 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x40
+ };
+ static const secp256k1_fe_storage fes = SECP256K1_FE_STORAGE_CONST(
+ 0x00010203UL, 0x04050607UL, 0x11121314UL, 0x15161718UL,
+ 0x22232425UL, 0x26272829UL, 0x33343536UL, 0x37383940UL
+ );
+ static const secp256k1_fe fe = SECP256K1_FE_CONST(
+ 0x00010203UL, 0x04050607UL, 0x11121314UL, 0x15161718UL,
+ 0x22232425UL, 0x26272829UL, 0x33343536UL, 0x37383940UL
+ );
+ secp256k1_fe fe2;
+ unsigned char b322[32];
+ secp256k1_fe_storage fes2;
+ /* Check conversions to fe. */
+ CHECK(secp256k1_fe_set_b32(&fe2, b32));
+ CHECK(secp256k1_fe_equal_var(&fe, &fe2));
+ secp256k1_fe_from_storage(&fe2, &fes);
+ CHECK(secp256k1_fe_equal_var(&fe, &fe2));
+ /* Check conversion from fe. */
+ secp256k1_fe_get_b32(b322, &fe);
+ CHECK(memcmp(b322, b32, 32) == 0);
+ secp256k1_fe_to_storage(&fes2, &fe);
+ CHECK(memcmp(&fes2, &fes, sizeof(fes)) == 0);
+}
+
+int fe_memcmp(const secp256k1_fe *a, const secp256k1_fe *b) {
+ secp256k1_fe t = *b;
+#ifdef VERIFY
+ t.magnitude = a->magnitude;
+ t.normalized = a->normalized;
+#endif
+ return memcmp(a, &t, sizeof(secp256k1_fe));
+}
+
+void run_field_misc(void) {
+ secp256k1_fe x;
+ secp256k1_fe y;
+ secp256k1_fe z;
+ secp256k1_fe q;
+ secp256k1_fe fe5 = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 5);
+ int i, j;
+ for (i = 0; i < 5*count; i++) {
+ secp256k1_fe_storage xs, ys, zs;
+ random_fe(&x);
+ random_fe_non_zero(&y);
+ /* Test the fe equality and comparison operations. */
+ CHECK(secp256k1_fe_cmp_var(&x, &x) == 0);
+ CHECK(secp256k1_fe_equal_var(&x, &x));
+ z = x;
+ secp256k1_fe_add(&z,&y);
+ /* Test fe conditional move; z is not normalized here. */
+ q = x;
+ secp256k1_fe_cmov(&x, &z, 0);
+ VERIFY_CHECK(!x.normalized && x.magnitude == z.magnitude);
+ secp256k1_fe_cmov(&x, &x, 1);
+ CHECK(fe_memcmp(&x, &z) != 0);
+ CHECK(fe_memcmp(&x, &q) == 0);
+ secp256k1_fe_cmov(&q, &z, 1);
+ VERIFY_CHECK(!q.normalized && q.magnitude == z.magnitude);
+ CHECK(fe_memcmp(&q, &z) == 0);
+ secp256k1_fe_normalize_var(&x);
+ secp256k1_fe_normalize_var(&z);
+ CHECK(!secp256k1_fe_equal_var(&x, &z));
+ secp256k1_fe_normalize_var(&q);
+ secp256k1_fe_cmov(&q, &z, (i&1));
+ VERIFY_CHECK(q.normalized && q.magnitude == 1);
+ for (j = 0; j < 6; j++) {
+ secp256k1_fe_negate(&z, &z, j+1);
+ secp256k1_fe_normalize_var(&q);
+ secp256k1_fe_cmov(&q, &z, (j&1));
+ VERIFY_CHECK(!q.normalized && q.magnitude == (j+2));
+ }
+ secp256k1_fe_normalize_var(&z);
+ /* Test storage conversion and conditional moves. */
+ secp256k1_fe_to_storage(&xs, &x);
+ secp256k1_fe_to_storage(&ys, &y);
+ secp256k1_fe_to_storage(&zs, &z);
+ secp256k1_fe_storage_cmov(&zs, &xs, 0);
+ secp256k1_fe_storage_cmov(&zs, &zs, 1);
+ CHECK(memcmp(&xs, &zs, sizeof(xs)) != 0);
+ secp256k1_fe_storage_cmov(&ys, &xs, 1);
+ CHECK(memcmp(&xs, &ys, sizeof(xs)) == 0);
+ secp256k1_fe_from_storage(&x, &xs);
+ secp256k1_fe_from_storage(&y, &ys);
+ secp256k1_fe_from_storage(&z, &zs);
+ /* Test that mul_int, mul, and add agree. */
+ secp256k1_fe_add(&y, &x);
+ secp256k1_fe_add(&y, &x);
+ z = x;
+ secp256k1_fe_mul_int(&z, 3);
+ CHECK(check_fe_equal(&y, &z));
+ secp256k1_fe_add(&y, &x);
+ secp256k1_fe_add(&z, &x);
+ CHECK(check_fe_equal(&z, &y));
+ z = x;
+ secp256k1_fe_mul_int(&z, 5);
+ secp256k1_fe_mul(&q, &x, &fe5);
+ CHECK(check_fe_equal(&z, &q));
+ secp256k1_fe_negate(&x, &x, 1);
+ secp256k1_fe_add(&z, &x);
+ secp256k1_fe_add(&q, &x);
+ CHECK(check_fe_equal(&y, &z));
+ CHECK(check_fe_equal(&q, &y));
+ }
+}
+
+void run_field_inv(void) {
+ secp256k1_fe x, xi, xii;
+ int i;
+ for (i = 0; i < 10*count; i++) {
+ random_fe_non_zero(&x);
+ secp256k1_fe_inv(&xi, &x);
+ CHECK(check_fe_inverse(&x, &xi));
+ secp256k1_fe_inv(&xii, &xi);
+ CHECK(check_fe_equal(&x, &xii));
+ }
+}
+
+void run_field_inv_var(void) {
+ secp256k1_fe x, xi, xii;
+ int i;
+ for (i = 0; i < 10*count; i++) {
+ random_fe_non_zero(&x);
+ secp256k1_fe_inv_var(&xi, &x);
+ CHECK(check_fe_inverse(&x, &xi));
+ secp256k1_fe_inv_var(&xii, &xi);
+ CHECK(check_fe_equal(&x, &xii));
+ }
+}
+
+void run_field_inv_all_var(void) {
+ secp256k1_fe x[16], xi[16], xii[16];
+ int i;
+ /* Check it's safe to call for 0 elements */
+ secp256k1_fe_inv_all_var(xi, x, 0);
+ for (i = 0; i < count; i++) {
+ size_t j;
+ size_t len = secp256k1_rand_int(15) + 1;
+ for (j = 0; j < len; j++) {
+ random_fe_non_zero(&x[j]);
+ }
+ secp256k1_fe_inv_all_var(xi, x, len);
+ for (j = 0; j < len; j++) {
+ CHECK(check_fe_inverse(&x[j], &xi[j]));
+ }
+ secp256k1_fe_inv_all_var(xii, xi, len);
+ for (j = 0; j < len; j++) {
+ CHECK(check_fe_equal(&x[j], &xii[j]));
+ }
+ }
+}
+
+void run_sqr(void) {
+ secp256k1_fe x, s;
+
+ {
+ int i;
+ secp256k1_fe_set_int(&x, 1);
+ secp256k1_fe_negate(&x, &x, 1);
+
+ for (i = 1; i <= 512; ++i) {
+ secp256k1_fe_mul_int(&x, 2);
+ secp256k1_fe_normalize(&x);
+ secp256k1_fe_sqr(&s, &x);
+ }
+ }
+}
+
+void test_sqrt(const secp256k1_fe *a, const secp256k1_fe *k) {
+ secp256k1_fe r1, r2;
+ int v = secp256k1_fe_sqrt(&r1, a);
+ CHECK((v == 0) == (k == NULL));
+
+ if (k != NULL) {
+ /* Check that the returned root is +/- the given known answer */
+ secp256k1_fe_negate(&r2, &r1, 1);
+ secp256k1_fe_add(&r1, k); secp256k1_fe_add(&r2, k);
+ secp256k1_fe_normalize(&r1); secp256k1_fe_normalize(&r2);
+ CHECK(secp256k1_fe_is_zero(&r1) || secp256k1_fe_is_zero(&r2));
+ }
+}
+
+void run_sqrt(void) {
+ secp256k1_fe ns, x, s, t;
+ int i;
+
+ /* Check sqrt(0) is 0 */
+ secp256k1_fe_set_int(&x, 0);
+ secp256k1_fe_sqr(&s, &x);
+ test_sqrt(&s, &x);
+
+ /* Check sqrt of small squares (and their negatives) */
+ for (i = 1; i <= 100; i++) {
+ secp256k1_fe_set_int(&x, i);
+ secp256k1_fe_sqr(&s, &x);
+ test_sqrt(&s, &x);
+ secp256k1_fe_negate(&t, &s, 1);
+ test_sqrt(&t, NULL);
+ }
+
+ /* Consistency checks for large random values */
+ for (i = 0; i < 10; i++) {
+ int j;
+ random_fe_non_square(&ns);
+ for (j = 0; j < count; j++) {
+ random_fe(&x);
+ secp256k1_fe_sqr(&s, &x);
+ test_sqrt(&s, &x);
+ secp256k1_fe_negate(&t, &s, 1);
+ test_sqrt(&t, NULL);
+ secp256k1_fe_mul(&t, &s, &ns);
+ test_sqrt(&t, NULL);
+ }
+ }
+}
+
+/***** GROUP TESTS *****/
+
+void ge_equals_ge(const secp256k1_ge *a, const secp256k1_ge *b) {
+ CHECK(a->infinity == b->infinity);
+ if (a->infinity) {
+ return;
+ }
+ CHECK(secp256k1_fe_equal_var(&a->x, &b->x));
+ CHECK(secp256k1_fe_equal_var(&a->y, &b->y));
+}
+
+/* This compares jacobian points including their Z, not just their geometric meaning. */
+int gej_xyz_equals_gej(const secp256k1_gej *a, const secp256k1_gej *b) {
+ secp256k1_gej a2;
+ secp256k1_gej b2;
+ int ret = 1;
+ ret &= a->infinity == b->infinity;
+ if (ret && !a->infinity) {
+ a2 = *a;
+ b2 = *b;
+ secp256k1_fe_normalize(&a2.x);
+ secp256k1_fe_normalize(&a2.y);
+ secp256k1_fe_normalize(&a2.z);
+ secp256k1_fe_normalize(&b2.x);
+ secp256k1_fe_normalize(&b2.y);
+ secp256k1_fe_normalize(&b2.z);
+ ret &= secp256k1_fe_cmp_var(&a2.x, &b2.x) == 0;
+ ret &= secp256k1_fe_cmp_var(&a2.y, &b2.y) == 0;
+ ret &= secp256k1_fe_cmp_var(&a2.z, &b2.z) == 0;
+ }
+ return ret;
+}
+
+void ge_equals_gej(const secp256k1_ge *a, const secp256k1_gej *b) {
+ secp256k1_fe z2s;
+ secp256k1_fe u1, u2, s1, s2;
+ CHECK(a->infinity == b->infinity);
+ if (a->infinity) {
+ return;
+ }
+ /* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */
+ secp256k1_fe_sqr(&z2s, &b->z);
+ secp256k1_fe_mul(&u1, &a->x, &z2s);
+ u2 = b->x; secp256k1_fe_normalize_weak(&u2);
+ secp256k1_fe_mul(&s1, &a->y, &z2s); secp256k1_fe_mul(&s1, &s1, &b->z);
+ s2 = b->y; secp256k1_fe_normalize_weak(&s2);
+ CHECK(secp256k1_fe_equal_var(&u1, &u2));
+ CHECK(secp256k1_fe_equal_var(&s1, &s2));
+}
+
+void test_ge(void) {
+ int i, i1;
+#ifdef USE_ENDOMORPHISM
+ int runs = 6;
+#else
+ int runs = 4;
+#endif
+ /* Points: (infinity, p1, p1, -p1, -p1, p2, p2, -p2, -p2, p3, p3, -p3, -p3, p4, p4, -p4, -p4).
+ * The second in each pair of identical points uses a random Z coordinate in the Jacobian form.
+ * All magnitudes are randomized.
+ * All 17*17 combinations of points are added to each other, using all applicable methods.
+ *
+ * When the endomorphism code is compiled in, p5 = lambda*p1 and p6 = lambda^2*p1 are added as well.
+ */
+ secp256k1_ge *ge = (secp256k1_ge *)malloc(sizeof(secp256k1_ge) * (1 + 4 * runs));
+ secp256k1_gej *gej = (secp256k1_gej *)malloc(sizeof(secp256k1_gej) * (1 + 4 * runs));
+ secp256k1_fe *zinv = (secp256k1_fe *)malloc(sizeof(secp256k1_fe) * (1 + 4 * runs));
+ secp256k1_fe zf;
+ secp256k1_fe zfi2, zfi3;
+
+ secp256k1_gej_set_infinity(&gej[0]);
+ secp256k1_ge_clear(&ge[0]);
+ secp256k1_ge_set_gej_var(&ge[0], &gej[0]);
+ for (i = 0; i < runs; i++) {
+ int j;
+ secp256k1_ge g;
+ random_group_element_test(&g);
+#ifdef USE_ENDOMORPHISM
+ if (i >= runs - 2) {
+ secp256k1_ge_mul_lambda(&g, &ge[1]);
+ }
+ if (i >= runs - 1) {
+ secp256k1_ge_mul_lambda(&g, &g);
+ }
+#endif
+ ge[1 + 4 * i] = g;
+ ge[2 + 4 * i] = g;
+ secp256k1_ge_neg(&ge[3 + 4 * i], &g);
+ secp256k1_ge_neg(&ge[4 + 4 * i], &g);
+ secp256k1_gej_set_ge(&gej[1 + 4 * i], &ge[1 + 4 * i]);
+ random_group_element_jacobian_test(&gej[2 + 4 * i], &ge[2 + 4 * i]);
+ secp256k1_gej_set_ge(&gej[3 + 4 * i], &ge[3 + 4 * i]);
+ random_group_element_jacobian_test(&gej[4 + 4 * i], &ge[4 + 4 * i]);
+ for (j = 0; j < 4; j++) {
+ random_field_element_magnitude(&ge[1 + j + 4 * i].x);
+ random_field_element_magnitude(&ge[1 + j + 4 * i].y);
+ random_field_element_magnitude(&gej[1 + j + 4 * i].x);
+ random_field_element_magnitude(&gej[1 + j + 4 * i].y);
+ random_field_element_magnitude(&gej[1 + j + 4 * i].z);
+ }
+ }
+
+ /* Compute z inverses. */
+ {
+ secp256k1_fe *zs = malloc(sizeof(secp256k1_fe) * (1 + 4 * runs));
+ for (i = 0; i < 4 * runs + 1; i++) {
+ if (i == 0) {
+ /* The point at infinity does not have a meaningful z inverse. Any should do. */
+ do {
+ random_field_element_test(&zs[i]);
+ } while(secp256k1_fe_is_zero(&zs[i]));
+ } else {
+ zs[i] = gej[i].z;
+ }
+ }
+ secp256k1_fe_inv_all_var(zinv, zs, 4 * runs + 1);
+ free(zs);
+ }
+
+ /* Generate random zf, and zfi2 = 1/zf^2, zfi3 = 1/zf^3 */
+ do {
+ random_field_element_test(&zf);
+ } while(secp256k1_fe_is_zero(&zf));
+ random_field_element_magnitude(&zf);
+ secp256k1_fe_inv_var(&zfi3, &zf);
+ secp256k1_fe_sqr(&zfi2, &zfi3);
+ secp256k1_fe_mul(&zfi3, &zfi3, &zfi2);
+
+ for (i1 = 0; i1 < 1 + 4 * runs; i1++) {
+ int i2;
+ for (i2 = 0; i2 < 1 + 4 * runs; i2++) {
+ /* Compute reference result using gej + gej (var). */
+ secp256k1_gej refj, resj;
+ secp256k1_ge ref;
+ secp256k1_fe zr;
+ secp256k1_gej_add_var(&refj, &gej[i1], &gej[i2], secp256k1_gej_is_infinity(&gej[i1]) ? NULL : &zr);
+ /* Check Z ratio. */
+ if (!secp256k1_gej_is_infinity(&gej[i1]) && !secp256k1_gej_is_infinity(&refj)) {
+ secp256k1_fe zrz; secp256k1_fe_mul(&zrz, &zr, &gej[i1].z);
+ CHECK(secp256k1_fe_equal_var(&zrz, &refj.z));
+ }
+ secp256k1_ge_set_gej_var(&ref, &refj);
+
+ /* Test gej + ge with Z ratio result (var). */
+ secp256k1_gej_add_ge_var(&resj, &gej[i1], &ge[i2], secp256k1_gej_is_infinity(&gej[i1]) ? NULL : &zr);
+ ge_equals_gej(&ref, &resj);
+ if (!secp256k1_gej_is_infinity(&gej[i1]) && !secp256k1_gej_is_infinity(&resj)) {
+ secp256k1_fe zrz; secp256k1_fe_mul(&zrz, &zr, &gej[i1].z);
+ CHECK(secp256k1_fe_equal_var(&zrz, &resj.z));
+ }
+
+ /* Test gej + ge (var, with additional Z factor). */
+ {
+ secp256k1_ge ge2_zfi = ge[i2]; /* the second term with x and y rescaled for z = 1/zf */
+ secp256k1_fe_mul(&ge2_zfi.x, &ge2_zfi.x, &zfi2);
+ secp256k1_fe_mul(&ge2_zfi.y, &ge2_zfi.y, &zfi3);
+ random_field_element_magnitude(&ge2_zfi.x);
+ random_field_element_magnitude(&ge2_zfi.y);
+ secp256k1_gej_add_zinv_var(&resj, &gej[i1], &ge2_zfi, &zf);
+ ge_equals_gej(&ref, &resj);
+ }
+
+ /* Test gej + ge (const). */
+ if (i2 != 0) {
+ /* secp256k1_gej_add_ge does not support its second argument being infinity. */
+ secp256k1_gej_add_ge(&resj, &gej[i1], &ge[i2]);
+ ge_equals_gej(&ref, &resj);
+ }
+
+ /* Test doubling (var). */
+ if ((i1 == 0 && i2 == 0) || ((i1 + 3)/4 == (i2 + 3)/4 && ((i1 + 3)%4)/2 == ((i2 + 3)%4)/2)) {
+ secp256k1_fe zr2;
+ /* Normal doubling with Z ratio result. */
+ secp256k1_gej_double_var(&resj, &gej[i1], &zr2);
+ ge_equals_gej(&ref, &resj);
+ /* Check Z ratio. */
+ secp256k1_fe_mul(&zr2, &zr2, &gej[i1].z);
+ CHECK(secp256k1_fe_equal_var(&zr2, &resj.z));
+ /* Normal doubling. */
+ secp256k1_gej_double_var(&resj, &gej[i2], NULL);
+ ge_equals_gej(&ref, &resj);
+ }
+
+ /* Test adding opposites. */
+ if ((i1 == 0 && i2 == 0) || ((i1 + 3)/4 == (i2 + 3)/4 && ((i1 + 3)%4)/2 != ((i2 + 3)%4)/2)) {
+ CHECK(secp256k1_ge_is_infinity(&ref));
+ }
+
+ /* Test adding infinity. */
+ if (i1 == 0) {
+ CHECK(secp256k1_ge_is_infinity(&ge[i1]));
+ CHECK(secp256k1_gej_is_infinity(&gej[i1]));
+ ge_equals_gej(&ref, &gej[i2]);
+ }
+ if (i2 == 0) {
+ CHECK(secp256k1_ge_is_infinity(&ge[i2]));
+ CHECK(secp256k1_gej_is_infinity(&gej[i2]));
+ ge_equals_gej(&ref, &gej[i1]);
+ }
+ }
+ }
+
+ /* Test adding all points together in random order equals infinity. */
+ {
+ secp256k1_gej sum = SECP256K1_GEJ_CONST_INFINITY;
+ secp256k1_gej *gej_shuffled = (secp256k1_gej *)malloc((4 * runs + 1) * sizeof(secp256k1_gej));
+ for (i = 0; i < 4 * runs + 1; i++) {
+ gej_shuffled[i] = gej[i];
+ }
+ for (i = 0; i < 4 * runs + 1; i++) {
+ int swap = i + secp256k1_rand_int(4 * runs + 1 - i);
+ if (swap != i) {
+ secp256k1_gej t = gej_shuffled[i];
+ gej_shuffled[i] = gej_shuffled[swap];
+ gej_shuffled[swap] = t;
+ }
+ }
+ for (i = 0; i < 4 * runs + 1; i++) {
+ secp256k1_gej_add_var(&sum, &sum, &gej_shuffled[i], NULL);
+ }
+ CHECK(secp256k1_gej_is_infinity(&sum));
+ free(gej_shuffled);
+ }
+
+ /* Test batch gej -> ge conversion with and without known z ratios. */
+ {
+ secp256k1_fe *zr = (secp256k1_fe *)malloc((4 * runs + 1) * sizeof(secp256k1_fe));
+ secp256k1_ge *ge_set_table = (secp256k1_ge *)malloc((4 * runs + 1) * sizeof(secp256k1_ge));
+ secp256k1_ge *ge_set_all = (secp256k1_ge *)malloc((4 * runs + 1) * sizeof(secp256k1_ge));
+ for (i = 0; i < 4 * runs + 1; i++) {
+ /* Compute gej[i + 1].z / gez[i].z (with gej[n].z taken to be 1). */
+ if (i < 4 * runs) {
+ secp256k1_fe_mul(&zr[i + 1], &zinv[i], &gej[i + 1].z);
+ }
+ }
+ secp256k1_ge_set_table_gej_var(ge_set_table, gej, zr, 4 * runs + 1);
+ secp256k1_ge_set_all_gej_var(ge_set_all, gej, 4 * runs + 1, &ctx->error_callback);
+ for (i = 0; i < 4 * runs + 1; i++) {
+ secp256k1_fe s;
+ random_fe_non_zero(&s);
+ secp256k1_gej_rescale(&gej[i], &s);
+ ge_equals_gej(&ge_set_table[i], &gej[i]);
+ ge_equals_gej(&ge_set_all[i], &gej[i]);
+ }
+ free(ge_set_table);
+ free(ge_set_all);
+ free(zr);
+ }
+
+ free(ge);
+ free(gej);
+ free(zinv);
+}
+
+void test_add_neg_y_diff_x(void) {
+ /* The point of this test is to check that we can add two points
+ * whose y-coordinates are negatives of each other but whose x
+ * coordinates differ. If the x-coordinates were the same, these
+ * points would be negatives of each other and their sum is
+ * infinity. This is cool because it "covers up" any degeneracy
+ * in the addition algorithm that would cause the xy coordinates
+ * of the sum to be wrong (since infinity has no xy coordinates).
+ * HOWEVER, if the x-coordinates are different, infinity is the
+ * wrong answer, and such degeneracies are exposed. This is the
+ * root of https://github.com/bitcoin-core/secp256k1/issues/257
+ * which this test is a regression test for.
+ *
+ * These points were generated in sage as
+ * # secp256k1 params
+ * F = FiniteField (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F)
+ * C = EllipticCurve ([F (0), F (7)])
+ * G = C.lift_x(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798)
+ * N = FiniteField(G.order())
+ *
+ * # endomorphism values (lambda is 1^{1/3} in N, beta is 1^{1/3} in F)
+ * x = polygen(N)
+ * lam = (1 - x^3).roots()[1][0]
+ *
+ * # random "bad pair"
+ * P = C.random_element()
+ * Q = -int(lam) * P
+ * print " P: %x %x" % P.xy()
+ * print " Q: %x %x" % Q.xy()
+ * print "P + Q: %x %x" % (P + Q).xy()
+ */
+ secp256k1_gej aj = SECP256K1_GEJ_CONST(
+ 0x8d24cd95, 0x0a355af1, 0x3c543505, 0x44238d30,
+ 0x0643d79f, 0x05a59614, 0x2f8ec030, 0xd58977cb,
+ 0x001e337a, 0x38093dcd, 0x6c0f386d, 0x0b1293a8,
+ 0x4d72c879, 0xd7681924, 0x44e6d2f3, 0x9190117d
+ );
+ secp256k1_gej bj = SECP256K1_GEJ_CONST(
+ 0xc7b74206, 0x1f788cd9, 0xabd0937d, 0x164a0d86,
+ 0x95f6ff75, 0xf19a4ce9, 0xd013bd7b, 0xbf92d2a7,
+ 0xffe1cc85, 0xc7f6c232, 0x93f0c792, 0xf4ed6c57,
+ 0xb28d3786, 0x2897e6db, 0xbb192d0b, 0x6e6feab2
+ );
+ secp256k1_gej sumj = SECP256K1_GEJ_CONST(
+ 0x671a63c0, 0x3efdad4c, 0x389a7798, 0x24356027,
+ 0xb3d69010, 0x278625c3, 0x5c86d390, 0x184a8f7a,
+ 0x5f6409c2, 0x2ce01f2b, 0x511fd375, 0x25071d08,
+ 0xda651801, 0x70e95caf, 0x8f0d893c, 0xbed8fbbe
+ );
+ secp256k1_ge b;
+ secp256k1_gej resj;
+ secp256k1_ge res;
+ secp256k1_ge_set_gej(&b, &bj);
+
+ secp256k1_gej_add_var(&resj, &aj, &bj, NULL);
+ secp256k1_ge_set_gej(&res, &resj);
+ ge_equals_gej(&res, &sumj);
+
+ secp256k1_gej_add_ge(&resj, &aj, &b);
+ secp256k1_ge_set_gej(&res, &resj);
+ ge_equals_gej(&res, &sumj);
+
+ secp256k1_gej_add_ge_var(&resj, &aj, &b, NULL);
+ secp256k1_ge_set_gej(&res, &resj);
+ ge_equals_gej(&res, &sumj);
+}
+
+void run_ge(void) {
+ int i;
+ for (i = 0; i < count * 32; i++) {
+ test_ge();
+ }
+ test_add_neg_y_diff_x();
+}
+
+void test_ec_combine(void) {
+ secp256k1_scalar sum = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
+ secp256k1_pubkey data[6];
+ const secp256k1_pubkey* d[6];
+ secp256k1_pubkey sd;
+ secp256k1_pubkey sd2;
+ secp256k1_gej Qj;
+ secp256k1_ge Q;
+ int i;
+ for (i = 1; i <= 6; i++) {
+ secp256k1_scalar s;
+ random_scalar_order_test(&s);
+ secp256k1_scalar_add(&sum, &sum, &s);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &Qj, &s);
+ secp256k1_ge_set_gej(&Q, &Qj);
+ secp256k1_pubkey_save(&data[i - 1], &Q);
+ d[i - 1] = &data[i - 1];
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &Qj, &sum);
+ secp256k1_ge_set_gej(&Q, &Qj);
+ secp256k1_pubkey_save(&sd, &Q);
+ CHECK(secp256k1_ec_pubkey_combine(ctx, &sd2, d, i) == 1);
+ CHECK(memcmp(&sd, &sd2, sizeof(sd)) == 0);
+ }
+}
+
+void run_ec_combine(void) {
+ int i;
+ for (i = 0; i < count * 8; i++) {
+ test_ec_combine();
+ }
+}
+
+void test_group_decompress(const secp256k1_fe* x) {
+ /* The input itself, normalized. */
+ secp256k1_fe fex = *x;
+ secp256k1_fe fez;
+ /* Results of set_xquad_var, set_xo_var(..., 0), set_xo_var(..., 1). */
+ secp256k1_ge ge_quad, ge_even, ge_odd;
+ secp256k1_gej gej_quad;
+ /* Return values of the above calls. */
+ int res_quad, res_even, res_odd;
+
+ secp256k1_fe_normalize_var(&fex);
+
+ res_quad = secp256k1_ge_set_xquad(&ge_quad, &fex);
+ res_even = secp256k1_ge_set_xo_var(&ge_even, &fex, 0);
+ res_odd = secp256k1_ge_set_xo_var(&ge_odd, &fex, 1);
+
+ CHECK(res_quad == res_even);
+ CHECK(res_quad == res_odd);
+
+ if (res_quad) {
+ secp256k1_fe_normalize_var(&ge_quad.x);
+ secp256k1_fe_normalize_var(&ge_odd.x);
+ secp256k1_fe_normalize_var(&ge_even.x);
+ secp256k1_fe_normalize_var(&ge_quad.y);
+ secp256k1_fe_normalize_var(&ge_odd.y);
+ secp256k1_fe_normalize_var(&ge_even.y);
+
+ /* No infinity allowed. */
+ CHECK(!ge_quad.infinity);
+ CHECK(!ge_even.infinity);
+ CHECK(!ge_odd.infinity);
+
+ /* Check that the x coordinates check out. */
+ CHECK(secp256k1_fe_equal_var(&ge_quad.x, x));
+ CHECK(secp256k1_fe_equal_var(&ge_even.x, x));
+ CHECK(secp256k1_fe_equal_var(&ge_odd.x, x));
+
+ /* Check that the Y coordinate result in ge_quad is a square. */
+ CHECK(secp256k1_fe_is_quad_var(&ge_quad.y));
+
+ /* Check odd/even Y in ge_odd, ge_even. */
+ CHECK(secp256k1_fe_is_odd(&ge_odd.y));
+ CHECK(!secp256k1_fe_is_odd(&ge_even.y));
+
+ /* Check secp256k1_gej_has_quad_y_var. */
+ secp256k1_gej_set_ge(&gej_quad, &ge_quad);
+ CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
+ do {
+ random_fe_test(&fez);
+ } while (secp256k1_fe_is_zero(&fez));
+ secp256k1_gej_rescale(&gej_quad, &fez);
+ CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
+ secp256k1_gej_neg(&gej_quad, &gej_quad);
+ CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad));
+ do {
+ random_fe_test(&fez);
+ } while (secp256k1_fe_is_zero(&fez));
+ secp256k1_gej_rescale(&gej_quad, &fez);
+ CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad));
+ secp256k1_gej_neg(&gej_quad, &gej_quad);
+ CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
+ }
+}
+
+void run_group_decompress(void) {
+ int i;
+ for (i = 0; i < count * 4; i++) {
+ secp256k1_fe fe;
+ random_fe_test(&fe);
+ test_group_decompress(&fe);
+ }
+}
+
+/***** ECMULT TESTS *****/
+
+void run_ecmult_chain(void) {
+ /* random starting point A (on the curve) */
+ secp256k1_gej a = SECP256K1_GEJ_CONST(
+ 0x8b30bbe9, 0xae2a9906, 0x96b22f67, 0x0709dff3,
+ 0x727fd8bc, 0x04d3362c, 0x6c7bf458, 0xe2846004,
+ 0xa357ae91, 0x5c4a6528, 0x1309edf2, 0x0504740f,
+ 0x0eb33439, 0x90216b4f, 0x81063cb6, 0x5f2f7e0f
+ );
+ /* two random initial factors xn and gn */
+ secp256k1_scalar xn = SECP256K1_SCALAR_CONST(
+ 0x84cc5452, 0xf7fde1ed, 0xb4d38a8c, 0xe9b1b84c,
+ 0xcef31f14, 0x6e569be9, 0x705d357a, 0x42985407
+ );
+ secp256k1_scalar gn = SECP256K1_SCALAR_CONST(
+ 0xa1e58d22, 0x553dcd42, 0xb2398062, 0x5d4c57a9,
+ 0x6e9323d4, 0x2b3152e5, 0xca2c3990, 0xedc7c9de
+ );
+ /* two small multipliers to be applied to xn and gn in every iteration: */
+ static const secp256k1_scalar xf = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0x1337);
+ static const secp256k1_scalar gf = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0x7113);
+ /* accumulators with the resulting coefficients to A and G */
+ secp256k1_scalar ae = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1);
+ secp256k1_scalar ge = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
+ /* actual points */
+ secp256k1_gej x;
+ secp256k1_gej x2;
+ int i;
+
+ /* the point being computed */
+ x = a;
+ for (i = 0; i < 200*count; i++) {
+ /* in each iteration, compute X = xn*X + gn*G; */
+ secp256k1_ecmult(&ctx->ecmult_ctx, &x, &x, &xn, &gn);
+ /* also compute ae and ge: the actual accumulated factors for A and G */
+ /* if X was (ae*A+ge*G), xn*X + gn*G results in (xn*ae*A + (xn*ge+gn)*G) */
+ secp256k1_scalar_mul(&ae, &ae, &xn);
+ secp256k1_scalar_mul(&ge, &ge, &xn);
+ secp256k1_scalar_add(&ge, &ge, &gn);
+ /* modify xn and gn */
+ secp256k1_scalar_mul(&xn, &xn, &xf);
+ secp256k1_scalar_mul(&gn, &gn, &gf);
+
+ /* verify */
+ if (i == 19999) {
+ /* expected result after 19999 iterations */
+ secp256k1_gej rp = SECP256K1_GEJ_CONST(
+ 0xD6E96687, 0xF9B10D09, 0x2A6F3543, 0x9D86CEBE,
+ 0xA4535D0D, 0x409F5358, 0x6440BD74, 0xB933E830,
+ 0xB95CBCA2, 0xC77DA786, 0x539BE8FD, 0x53354D2D,
+ 0x3B4F566A, 0xE6580454, 0x07ED6015, 0xEE1B2A88
+ );
+
+ secp256k1_gej_neg(&rp, &rp);
+ secp256k1_gej_add_var(&rp, &rp, &x, NULL);
+ CHECK(secp256k1_gej_is_infinity(&rp));
+ }
+ }
+ /* redo the computation, but directly with the resulting ae and ge coefficients: */
+ secp256k1_ecmult(&ctx->ecmult_ctx, &x2, &a, &ae, &ge);
+ secp256k1_gej_neg(&x2, &x2);
+ secp256k1_gej_add_var(&x2, &x2, &x, NULL);
+ CHECK(secp256k1_gej_is_infinity(&x2));
+}
+
+void test_point_times_order(const secp256k1_gej *point) {
+ /* X * (point + G) + (order-X) * (pointer + G) = 0 */
+ secp256k1_scalar x;
+ secp256k1_scalar nx;
+ secp256k1_scalar zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
+ secp256k1_scalar one = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1);
+ secp256k1_gej res1, res2;
+ secp256k1_ge res3;
+ unsigned char pub[65];
+ size_t psize = 65;
+ random_scalar_order_test(&x);
+ secp256k1_scalar_negate(&nx, &x);
+ secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &x, &x); /* calc res1 = x * point + x * G; */
+ secp256k1_ecmult(&ctx->ecmult_ctx, &res2, point, &nx, &nx); /* calc res2 = (order - x) * point + (order - x) * G; */
+ secp256k1_gej_add_var(&res1, &res1, &res2, NULL);
+ CHECK(secp256k1_gej_is_infinity(&res1));
+ CHECK(secp256k1_gej_is_valid_var(&res1) == 0);
+ secp256k1_ge_set_gej(&res3, &res1);
+ CHECK(secp256k1_ge_is_infinity(&res3));
+ CHECK(secp256k1_ge_is_valid_var(&res3) == 0);
+ CHECK(secp256k1_eckey_pubkey_serialize(&res3, pub, &psize, 0) == 0);
+ psize = 65;
+ CHECK(secp256k1_eckey_pubkey_serialize(&res3, pub, &psize, 1) == 0);
+ /* check zero/one edge cases */
+ secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &zero, &zero);
+ secp256k1_ge_set_gej(&res3, &res1);
+ CHECK(secp256k1_ge_is_infinity(&res3));
+ secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &one, &zero);
+ secp256k1_ge_set_gej(&res3, &res1);
+ ge_equals_gej(&res3, point);
+ secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &zero, &one);
+ secp256k1_ge_set_gej(&res3, &res1);
+ ge_equals_ge(&res3, &secp256k1_ge_const_g);
+}
+
+void run_point_times_order(void) {
+ int i;
+ secp256k1_fe x = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 2);
+ static const secp256k1_fe xr = SECP256K1_FE_CONST(
+ 0x7603CB59, 0xB0EF6C63, 0xFE608479, 0x2A0C378C,
+ 0xDB3233A8, 0x0F8A9A09, 0xA877DEAD, 0x31B38C45
+ );
+ for (i = 0; i < 500; i++) {
+ secp256k1_ge p;
+ if (secp256k1_ge_set_xo_var(&p, &x, 1)) {
+ secp256k1_gej j;
+ CHECK(secp256k1_ge_is_valid_var(&p));
+ secp256k1_gej_set_ge(&j, &p);
+ CHECK(secp256k1_gej_is_valid_var(&j));
+ test_point_times_order(&j);
+ }
+ secp256k1_fe_sqr(&x, &x);
+ }
+ secp256k1_fe_normalize_var(&x);
+ CHECK(secp256k1_fe_equal_var(&x, &xr));
+}
+
+void ecmult_const_random_mult(void) {
+ /* random starting point A (on the curve) */
+ secp256k1_ge a = SECP256K1_GE_CONST(
+ 0x6d986544, 0x57ff52b8, 0xcf1b8126, 0x5b802a5b,
+ 0xa97f9263, 0xb1e88044, 0x93351325, 0x91bc450a,
+ 0x535c59f7, 0x325e5d2b, 0xc391fbe8, 0x3c12787c,
+ 0x337e4a98, 0xe82a9011, 0x0123ba37, 0xdd769c7d
+ );
+ /* random initial factor xn */
+ secp256k1_scalar xn = SECP256K1_SCALAR_CONST(
+ 0x649d4f77, 0xc4242df7, 0x7f2079c9, 0x14530327,
+ 0xa31b876a, 0xd2d8ce2a, 0x2236d5c6, 0xd7b2029b
+ );
+ /* expected xn * A (from sage) */
+ secp256k1_ge expected_b = SECP256K1_GE_CONST(
+ 0x23773684, 0x4d209dc7, 0x098a786f, 0x20d06fcd,
+ 0x070a38bf, 0xc11ac651, 0x03004319, 0x1e2a8786,
+ 0xed8c3b8e, 0xc06dd57b, 0xd06ea66e, 0x45492b0f,
+ 0xb84e4e1b, 0xfb77e21f, 0x96baae2a, 0x63dec956
+ );
+ secp256k1_gej b;
+ secp256k1_ecmult_const(&b, &a, &xn);
+
+ CHECK(secp256k1_ge_is_valid_var(&a));
+ ge_equals_gej(&expected_b, &b);
+}
+
+void ecmult_const_commutativity(void) {
+ secp256k1_scalar a;
+ secp256k1_scalar b;
+ secp256k1_gej res1;
+ secp256k1_gej res2;
+ secp256k1_ge mid1;
+ secp256k1_ge mid2;
+ random_scalar_order_test(&a);
+ random_scalar_order_test(&b);
+
+ secp256k1_ecmult_const(&res1, &secp256k1_ge_const_g, &a);
+ secp256k1_ecmult_const(&res2, &secp256k1_ge_const_g, &b);
+ secp256k1_ge_set_gej(&mid1, &res1);
+ secp256k1_ge_set_gej(&mid2, &res2);
+ secp256k1_ecmult_const(&res1, &mid1, &b);
+ secp256k1_ecmult_const(&res2, &mid2, &a);
+ secp256k1_ge_set_gej(&mid1, &res1);
+ secp256k1_ge_set_gej(&mid2, &res2);
+ ge_equals_ge(&mid1, &mid2);
+}
+
+void ecmult_const_mult_zero_one(void) {
+ secp256k1_scalar zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
+ secp256k1_scalar one = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1);
+ secp256k1_scalar negone;
+ secp256k1_gej res1;
+ secp256k1_ge res2;
+ secp256k1_ge point;
+ secp256k1_scalar_negate(&negone, &one);
+
+ random_group_element_test(&point);
+ secp256k1_ecmult_const(&res1, &point, &zero);
+ secp256k1_ge_set_gej(&res2, &res1);
+ CHECK(secp256k1_ge_is_infinity(&res2));
+ secp256k1_ecmult_const(&res1, &point, &one);
+ secp256k1_ge_set_gej(&res2, &res1);
+ ge_equals_ge(&res2, &point);
+ secp256k1_ecmult_const(&res1, &point, &negone);
+ secp256k1_gej_neg(&res1, &res1);
+ secp256k1_ge_set_gej(&res2, &res1);
+ ge_equals_ge(&res2, &point);
+}
+
+void ecmult_const_chain_multiply(void) {
+ /* Check known result (randomly generated test problem from sage) */
+ const secp256k1_scalar scalar = SECP256K1_SCALAR_CONST(
+ 0x4968d524, 0x2abf9b7a, 0x466abbcf, 0x34b11b6d,
+ 0xcd83d307, 0x827bed62, 0x05fad0ce, 0x18fae63b
+ );
+ const secp256k1_gej expected_point = SECP256K1_GEJ_CONST(
+ 0x5494c15d, 0x32099706, 0xc2395f94, 0x348745fd,
+ 0x757ce30e, 0x4e8c90fb, 0xa2bad184, 0xf883c69f,
+ 0x5d195d20, 0xe191bf7f, 0x1be3e55f, 0x56a80196,
+ 0x6071ad01, 0xf1462f66, 0xc997fa94, 0xdb858435
+ );
+ secp256k1_gej point;
+ secp256k1_ge res;
+ int i;
+
+ secp256k1_gej_set_ge(&point, &secp256k1_ge_const_g);
+ for (i = 0; i < 100; ++i) {
+ secp256k1_ge tmp;
+ secp256k1_ge_set_gej(&tmp, &point);
+ secp256k1_ecmult_const(&point, &tmp, &scalar);
+ }
+ secp256k1_ge_set_gej(&res, &point);
+ ge_equals_gej(&res, &expected_point);
+}
+
+void run_ecmult_const_tests(void) {
+ ecmult_const_mult_zero_one();
+ ecmult_const_random_mult();
+ ecmult_const_commutativity();
+ ecmult_const_chain_multiply();
+}
+
+void test_wnaf(const secp256k1_scalar *number, int w) {
+ secp256k1_scalar x, two, t;
+ int wnaf[256];
+ int zeroes = -1;
+ int i;
+ int bits;
+ secp256k1_scalar_set_int(&x, 0);
+ secp256k1_scalar_set_int(&two, 2);
+ bits = secp256k1_ecmult_wnaf(wnaf, 256, number, w);
+ CHECK(bits <= 256);
+ for (i = bits-1; i >= 0; i--) {
+ int v = wnaf[i];
+ secp256k1_scalar_mul(&x, &x, &two);
+ if (v) {
+ CHECK(zeroes == -1 || zeroes >= w-1); /* check that distance between non-zero elements is at least w-1 */
+ zeroes=0;
+ CHECK((v & 1) == 1); /* check non-zero elements are odd */
+ CHECK(v <= (1 << (w-1)) - 1); /* check range below */
+ CHECK(v >= -(1 << (w-1)) - 1); /* check range above */
+ } else {
+ CHECK(zeroes != -1); /* check that no unnecessary zero padding exists */
+ zeroes++;
+ }
+ if (v >= 0) {
+ secp256k1_scalar_set_int(&t, v);
+ } else {
+ secp256k1_scalar_set_int(&t, -v);
+ secp256k1_scalar_negate(&t, &t);
+ }
+ secp256k1_scalar_add(&x, &x, &t);
+ }
+ CHECK(secp256k1_scalar_eq(&x, number)); /* check that wnaf represents number */
+}
+
+void test_constant_wnaf_negate(const secp256k1_scalar *number) {
+ secp256k1_scalar neg1 = *number;
+ secp256k1_scalar neg2 = *number;
+ int sign1 = 1;
+ int sign2 = 1;
+
+ if (!secp256k1_scalar_get_bits(&neg1, 0, 1)) {
+ secp256k1_scalar_negate(&neg1, &neg1);
+ sign1 = -1;
+ }
+ sign2 = secp256k1_scalar_cond_negate(&neg2, secp256k1_scalar_is_even(&neg2));
+ CHECK(sign1 == sign2);
+ CHECK(secp256k1_scalar_eq(&neg1, &neg2));
+}
+
+void test_constant_wnaf(const secp256k1_scalar *number, int w) {
+ secp256k1_scalar x, shift;
+ int wnaf[256] = {0};
+ int i;
+ int skew;
+ secp256k1_scalar num = *number;
+
+ secp256k1_scalar_set_int(&x, 0);
+ secp256k1_scalar_set_int(&shift, 1 << w);
+ /* With USE_ENDOMORPHISM on we only consider 128-bit numbers */
+#ifdef USE_ENDOMORPHISM
+ for (i = 0; i < 16; ++i) {
+ secp256k1_scalar_shr_int(&num, 8);
+ }
+#endif
+ skew = secp256k1_wnaf_const(wnaf, num, w);
+
+ for (i = WNAF_SIZE(w); i >= 0; --i) {
+ secp256k1_scalar t;
+ int v = wnaf[i];
+ CHECK(v != 0); /* check nonzero */
+ CHECK(v & 1); /* check parity */
+ CHECK(v > -(1 << w)); /* check range above */
+ CHECK(v < (1 << w)); /* check range below */
+
+ secp256k1_scalar_mul(&x, &x, &shift);
+ if (v >= 0) {
+ secp256k1_scalar_set_int(&t, v);
+ } else {
+ secp256k1_scalar_set_int(&t, -v);
+ secp256k1_scalar_negate(&t, &t);
+ }
+ secp256k1_scalar_add(&x, &x, &t);
+ }
+ /* Skew num because when encoding numbers as odd we use an offset */
+ secp256k1_scalar_cadd_bit(&num, skew == 2, 1);
+ CHECK(secp256k1_scalar_eq(&x, &num));
+}
+
+void run_wnaf(void) {
+ int i;
+ secp256k1_scalar n = {{0}};
+
+ /* Sanity check: 1 and 2 are the smallest odd and even numbers and should
+ * have easier-to-diagnose failure modes */
+ n.d[0] = 1;
+ test_constant_wnaf(&n, 4);
+ n.d[0] = 2;
+ test_constant_wnaf(&n, 4);
+ /* Random tests */
+ for (i = 0; i < count; i++) {
+ random_scalar_order(&n);
+ test_wnaf(&n, 4+(i%10));
+ test_constant_wnaf_negate(&n);
+ test_constant_wnaf(&n, 4 + (i % 10));
+ }
+ secp256k1_scalar_set_int(&n, 0);
+ CHECK(secp256k1_scalar_cond_negate(&n, 1) == -1);
+ CHECK(secp256k1_scalar_is_zero(&n));
+ CHECK(secp256k1_scalar_cond_negate(&n, 0) == 1);
+ CHECK(secp256k1_scalar_is_zero(&n));
+}
+
+void test_ecmult_constants(void) {
+ /* Test ecmult_gen() for [0..36) and [order-36..0). */
+ secp256k1_scalar x;
+ secp256k1_gej r;
+ secp256k1_ge ng;
+ int i;
+ int j;
+ secp256k1_ge_neg(&ng, &secp256k1_ge_const_g);
+ for (i = 0; i < 36; i++ ) {
+ secp256k1_scalar_set_int(&x, i);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x);
+ for (j = 0; j < i; j++) {
+ if (j == i - 1) {
+ ge_equals_gej(&secp256k1_ge_const_g, &r);
+ }
+ secp256k1_gej_add_ge(&r, &r, &ng);
+ }
+ CHECK(secp256k1_gej_is_infinity(&r));
+ }
+ for (i = 1; i <= 36; i++ ) {
+ secp256k1_scalar_set_int(&x, i);
+ secp256k1_scalar_negate(&x, &x);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x);
+ for (j = 0; j < i; j++) {
+ if (j == i - 1) {
+ ge_equals_gej(&ng, &r);
+ }
+ secp256k1_gej_add_ge(&r, &r, &secp256k1_ge_const_g);
+ }
+ CHECK(secp256k1_gej_is_infinity(&r));
+ }
+}
+
+void run_ecmult_constants(void) {
+ test_ecmult_constants();
+}
+
+void test_ecmult_gen_blind(void) {
+ /* Test ecmult_gen() blinding and confirm that the blinding changes, the affine points match, and the z's don't match. */
+ secp256k1_scalar key;
+ secp256k1_scalar b;
+ unsigned char seed32[32];
+ secp256k1_gej pgej;
+ secp256k1_gej pgej2;
+ secp256k1_gej i;
+ secp256k1_ge pge;
+ random_scalar_order_test(&key);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej, &key);
+ secp256k1_rand256(seed32);
+ b = ctx->ecmult_gen_ctx.blind;
+ i = ctx->ecmult_gen_ctx.initial;
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32);
+ CHECK(!secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind));
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej2, &key);
+ CHECK(!gej_xyz_equals_gej(&pgej, &pgej2));
+ CHECK(!gej_xyz_equals_gej(&i, &ctx->ecmult_gen_ctx.initial));
+ secp256k1_ge_set_gej(&pge, &pgej);
+ ge_equals_gej(&pge, &pgej2);
+}
+
+void test_ecmult_gen_blind_reset(void) {
+ /* Test ecmult_gen() blinding reset and confirm that the blinding is consistent. */
+ secp256k1_scalar b;
+ secp256k1_gej initial;
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0);
+ b = ctx->ecmult_gen_ctx.blind;
+ initial = ctx->ecmult_gen_ctx.initial;
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0);
+ CHECK(secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind));
+ CHECK(gej_xyz_equals_gej(&initial, &ctx->ecmult_gen_ctx.initial));
+}
+
+void run_ecmult_gen_blind(void) {
+ int i;
+ test_ecmult_gen_blind_reset();
+ for (i = 0; i < 10; i++) {
+ test_ecmult_gen_blind();
+ }
+}
+
+#ifdef USE_ENDOMORPHISM
+/***** ENDOMORPHISH TESTS *****/
+void test_scalar_split(void) {
+ secp256k1_scalar full;
+ secp256k1_scalar s1, slam;
+ const unsigned char zero[32] = {0};
+ unsigned char tmp[32];
+
+ random_scalar_order_test(&full);
+ secp256k1_scalar_split_lambda(&s1, &slam, &full);
+
+ /* check that both are <= 128 bits in size */
+ if (secp256k1_scalar_is_high(&s1)) {
+ secp256k1_scalar_negate(&s1, &s1);
+ }
+ if (secp256k1_scalar_is_high(&slam)) {
+ secp256k1_scalar_negate(&slam, &slam);
+ }
+
+ secp256k1_scalar_get_b32(tmp, &s1);
+ CHECK(memcmp(zero, tmp, 16) == 0);
+ secp256k1_scalar_get_b32(tmp, &slam);
+ CHECK(memcmp(zero, tmp, 16) == 0);
+}
+
+void run_endomorphism_tests(void) {
+ test_scalar_split();
+}
+#endif
+
+void ec_pubkey_parse_pointtest(const unsigned char *input, int xvalid, int yvalid) {
+ unsigned char pubkeyc[65];
+ secp256k1_pubkey pubkey;
+ secp256k1_ge ge;
+ size_t pubkeyclen;
+ int32_t ecount;
+ ecount = 0;
+ secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
+ for (pubkeyclen = 3; pubkeyclen <= 65; pubkeyclen++) {
+ /* Smaller sizes are tested exhaustively elsewhere. */
+ int32_t i;
+ memcpy(&pubkeyc[1], input, 64);
+ VG_UNDEF(&pubkeyc[pubkeyclen], 65 - pubkeyclen);
+ for (i = 0; i < 256; i++) {
+ /* Try all type bytes. */
+ int xpass;
+ int ypass;
+ int ysign;
+ pubkeyc[0] = i;
+ /* What sign does this point have? */
+ ysign = (input[63] & 1) + 2;
+ /* For the current type (i) do we expect parsing to work? Handled all of compressed/uncompressed/hybrid. */
+ xpass = xvalid && (pubkeyclen == 33) && ((i & 254) == 2);
+ /* Do we expect a parse and re-serialize as uncompressed to give a matching y? */
+ ypass = xvalid && yvalid && ((i & 4) == ((pubkeyclen == 65) << 2)) &&
+ ((i == 4) || ((i & 251) == ysign)) && ((pubkeyclen == 33) || (pubkeyclen == 65));
+ if (xpass || ypass) {
+ /* These cases must parse. */
+ unsigned char pubkeyo[65];
+ size_t outl;
+ memset(&pubkey, 0, sizeof(pubkey));
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ ecount = 0;
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 1);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ outl = 65;
+ VG_UNDEF(pubkeyo, 65);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyo, &outl, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
+ VG_CHECK(pubkeyo, outl);
+ CHECK(outl == 33);
+ CHECK(memcmp(&pubkeyo[1], &pubkeyc[1], 32) == 0);
+ CHECK((pubkeyclen != 33) || (pubkeyo[0] == pubkeyc[0]));
+ if (ypass) {
+ /* This test isn't always done because we decode with alternative signs, so the y won't match. */
+ CHECK(pubkeyo[0] == ysign);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 1);
+ memset(&pubkey, 0, sizeof(pubkey));
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ secp256k1_pubkey_save(&pubkey, &ge);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ outl = 65;
+ VG_UNDEF(pubkeyo, 65);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyo, &outl, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 1);
+ VG_CHECK(pubkeyo, outl);
+ CHECK(outl == 65);
+ CHECK(pubkeyo[0] == 4);
+ CHECK(memcmp(&pubkeyo[1], input, 64) == 0);
+ }
+ CHECK(ecount == 0);
+ } else {
+ /* These cases must fail to parse. */
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 1);
+ }
+ }
+ }
+ secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
+}
+
+void run_ec_pubkey_parse_test(void) {
+#define SECP256K1_EC_PARSE_TEST_NVALID (12)
+ const unsigned char valid[SECP256K1_EC_PARSE_TEST_NVALID][64] = {
+ {
+ /* Point with leading and trailing zeros in x and y serialization. */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x52,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0xef, 0xa1, 0x7b, 0x77, 0x61, 0xe1, 0xe4, 0x27, 0x06, 0x98, 0x9f, 0xb4, 0x83,
+ 0xb8, 0xd2, 0xd4, 0x9b, 0xf7, 0x8f, 0xae, 0x98, 0x03, 0xf0, 0x99, 0xb8, 0x34, 0xed, 0xeb, 0x00
+ },
+ {
+ /* Point with x equal to a 3rd root of unity.*/
+ 0x7a, 0xe9, 0x6a, 0x2b, 0x65, 0x7c, 0x07, 0x10, 0x6e, 0x64, 0x47, 0x9e, 0xac, 0x34, 0x34, 0xe9,
+ 0x9c, 0xf0, 0x49, 0x75, 0x12, 0xf5, 0x89, 0x95, 0xc1, 0x39, 0x6c, 0x28, 0x71, 0x95, 0x01, 0xee,
+ 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14,
+ 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee,
+ },
+ {
+ /* Point with largest x. (1/2) */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2c,
+ 0x0e, 0x99, 0x4b, 0x14, 0xea, 0x72, 0xf8, 0xc3, 0xeb, 0x95, 0xc7, 0x1e, 0xf6, 0x92, 0x57, 0x5e,
+ 0x77, 0x50, 0x58, 0x33, 0x2d, 0x7e, 0x52, 0xd0, 0x99, 0x5c, 0xf8, 0x03, 0x88, 0x71, 0xb6, 0x7d,
+ },
+ {
+ /* Point with largest x. (2/2) */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2c,
+ 0xf1, 0x66, 0xb4, 0xeb, 0x15, 0x8d, 0x07, 0x3c, 0x14, 0x6a, 0x38, 0xe1, 0x09, 0x6d, 0xa8, 0xa1,
+ 0x88, 0xaf, 0xa7, 0xcc, 0xd2, 0x81, 0xad, 0x2f, 0x66, 0xa3, 0x07, 0xfb, 0x77, 0x8e, 0x45, 0xb2,
+ },
+ {
+ /* Point with smallest x. (1/2) */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14,
+ 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee,
+ },
+ {
+ /* Point with smallest x. (2/2) */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xbd, 0xe7, 0x0d, 0xf5, 0x19, 0x39, 0xb9, 0x4c, 0x9c, 0x24, 0x97, 0x9f, 0xa7, 0xdd, 0x04, 0xeb,
+ 0xd9, 0xb3, 0x57, 0x2d, 0xa7, 0x80, 0x22, 0x90, 0x43, 0x8a, 0xf2, 0xa6, 0x81, 0x89, 0x54, 0x41,
+ },
+ {
+ /* Point with largest y. (1/3) */
+ 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6,
+ 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
+ },
+ {
+ /* Point with largest y. (2/3) */
+ 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c,
+ 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
+ },
+ {
+ /* Point with largest y. (3/3) */
+ 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc,
+ 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
+ },
+ {
+ /* Point with smallest y. (1/3) */
+ 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6,
+ 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ },
+ {
+ /* Point with smallest y. (2/3) */
+ 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c,
+ 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ },
+ {
+ /* Point with smallest y. (3/3) */
+ 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc,
+ 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
+ }
+ };
+#define SECP256K1_EC_PARSE_TEST_NXVALID (4)
+ const unsigned char onlyxvalid[SECP256K1_EC_PARSE_TEST_NXVALID][64] = {
+ {
+ /* Valid if y overflow ignored (y = 1 mod p). (1/3) */
+ 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6,
+ 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
+ },
+ {
+ /* Valid if y overflow ignored (y = 1 mod p). (2/3) */
+ 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c,
+ 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
+ },
+ {
+ /* Valid if y overflow ignored (y = 1 mod p). (3/3)*/
+ 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc,
+ 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
+ },
+ {
+ /* x on curve, y is from y^2 = x^3 + 8. */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03
+ }
+ };
+#define SECP256K1_EC_PARSE_TEST_NINVALID (7)
+ const unsigned char invalid[SECP256K1_EC_PARSE_TEST_NINVALID][64] = {
+ {
+ /* x is third root of -8, y is -1 * (x^3+7); also on the curve for y^2 = x^3 + 9. */
+ 0x0a, 0x2d, 0x2b, 0xa9, 0x35, 0x07, 0xf1, 0xdf, 0x23, 0x37, 0x70, 0xc2, 0xa7, 0x97, 0x96, 0x2c,
+ 0xc6, 0x1f, 0x6d, 0x15, 0xda, 0x14, 0xec, 0xd4, 0x7d, 0x8d, 0x27, 0xae, 0x1c, 0xd5, 0xf8, 0x53,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ },
+ {
+ /* Valid if x overflow ignored (x = 1 mod p). */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
+ 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14,
+ 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee,
+ },
+ {
+ /* Valid if x overflow ignored (x = 1 mod p). */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
+ 0xbd, 0xe7, 0x0d, 0xf5, 0x19, 0x39, 0xb9, 0x4c, 0x9c, 0x24, 0x97, 0x9f, 0xa7, 0xdd, 0x04, 0xeb,
+ 0xd9, 0xb3, 0x57, 0x2d, 0xa7, 0x80, 0x22, 0x90, 0x43, 0x8a, 0xf2, 0xa6, 0x81, 0x89, 0x54, 0x41,
+ },
+ {
+ /* x is -1, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 5. */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
+ 0xf4, 0x84, 0x14, 0x5c, 0xb0, 0x14, 0x9b, 0x82, 0x5d, 0xff, 0x41, 0x2f, 0xa0, 0x52, 0xa8, 0x3f,
+ 0xcb, 0x72, 0xdb, 0x61, 0xd5, 0x6f, 0x37, 0x70, 0xce, 0x06, 0x6b, 0x73, 0x49, 0xa2, 0xaa, 0x28,
+ },
+ {
+ /* x is -1, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 5. */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
+ 0x0b, 0x7b, 0xeb, 0xa3, 0x4f, 0xeb, 0x64, 0x7d, 0xa2, 0x00, 0xbe, 0xd0, 0x5f, 0xad, 0x57, 0xc0,
+ 0x34, 0x8d, 0x24, 0x9e, 0x2a, 0x90, 0xc8, 0x8f, 0x31, 0xf9, 0x94, 0x8b, 0xb6, 0x5d, 0x52, 0x07,
+ },
+ {
+ /* x is zero, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 7. */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8f, 0x53, 0x7e, 0xef, 0xdf, 0xc1, 0x60, 0x6a, 0x07, 0x27, 0xcd, 0x69, 0xb4, 0xa7, 0x33, 0x3d,
+ 0x38, 0xed, 0x44, 0xe3, 0x93, 0x2a, 0x71, 0x79, 0xee, 0xcb, 0x4b, 0x6f, 0xba, 0x93, 0x60, 0xdc,
+ },
+ {
+ /* x is zero, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 7. */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0xac, 0x81, 0x10, 0x20, 0x3e, 0x9f, 0x95, 0xf8, 0xd8, 0x32, 0x96, 0x4b, 0x58, 0xcc, 0xc2,
+ 0xc7, 0x12, 0xbb, 0x1c, 0x6c, 0xd5, 0x8e, 0x86, 0x11, 0x34, 0xb4, 0x8f, 0x45, 0x6c, 0x9b, 0x53
+ }
+ };
+ const unsigned char pubkeyc[66] = {
+ /* Serialization of G. */
+ 0x04, 0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B,
+ 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9, 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17,
+ 0x98, 0x48, 0x3A, 0xDA, 0x77, 0x26, 0xA3, 0xC4, 0x65, 0x5D, 0xA4, 0xFB, 0xFC, 0x0E, 0x11, 0x08,
+ 0xA8, 0xFD, 0x17, 0xB4, 0x48, 0xA6, 0x85, 0x54, 0x19, 0x9C, 0x47, 0xD0, 0x8F, 0xFB, 0x10, 0xD4,
+ 0xB8, 0x00
+ };
+ unsigned char sout[65];
+ unsigned char shortkey[2];
+ secp256k1_ge ge;
+ secp256k1_pubkey pubkey;
+ size_t len;
+ int32_t i;
+ int32_t ecount;
+ int32_t ecount2;
+ ecount = 0;
+ /* Nothing should be reading this far into pubkeyc. */
+ VG_UNDEF(&pubkeyc[65], 1);
+ secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
+ /* Zero length claimed, fail, zeroize, no illegal arg error. */
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ VG_UNDEF(shortkey, 2);
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 0) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 1);
+ /* Length one claimed, fail, zeroize, no illegal arg error. */
+ for (i = 0; i < 256 ; i++) {
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ shortkey[0] = i;
+ VG_UNDEF(&shortkey[1], 1);
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 1) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 1);
+ }
+ /* Length two claimed, fail, zeroize, no illegal arg error. */
+ for (i = 0; i < 65536 ; i++) {
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ shortkey[0] = i & 255;
+ shortkey[1] = i >> 8;
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 2) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 1);
+ }
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ /* 33 bytes claimed on otherwise valid input starting with 0x04, fail, zeroize output, no illegal arg error. */
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 33) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 1);
+ /* NULL pubkey, illegal arg error. Pubkey isn't rewritten before this step, since it's NULL into the parser. */
+ CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, pubkeyc, 65) == 0);
+ CHECK(ecount == 2);
+ /* NULL input string. Illegal arg and zeroize output. */
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, NULL, 65) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 1);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 2);
+ /* 64 bytes claimed on input starting with 0x04, fail, zeroize output, no illegal arg error. */
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 64) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 1);
+ /* 66 bytes claimed, fail, zeroize output, no illegal arg error. */
+ memset(&pubkey, 0xfe, sizeof(pubkey));
+ ecount = 0;
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 66) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
+ CHECK(ecount == 1);
+ /* Valid parse. */
+ memset(&pubkey, 0, sizeof(pubkey));
+ ecount = 0;
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 65) == 1);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(ecount == 0);
+ VG_UNDEF(&ge, sizeof(ge));
+ CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 1);
+ VG_CHECK(&ge.x, sizeof(ge.x));
+ VG_CHECK(&ge.y, sizeof(ge.y));
+ VG_CHECK(&ge.infinity, sizeof(ge.infinity));
+ ge_equals_ge(&secp256k1_ge_const_g, &ge);
+ CHECK(ecount == 0);
+ /* secp256k1_ec_pubkey_serialize illegal args. */
+ ecount = 0;
+ len = 65;
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, NULL, &len, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 0);
+ CHECK(ecount == 1);
+ CHECK(len == 0);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, NULL, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 0);
+ CHECK(ecount == 2);
+ len = 65;
+ VG_UNDEF(sout, 65);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, NULL, SECP256K1_EC_UNCOMPRESSED) == 0);
+ VG_CHECK(sout, 65);
+ CHECK(ecount == 3);
+ CHECK(len == 0);
+ len = 65;
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, &pubkey, ~0) == 0);
+ CHECK(ecount == 4);
+ CHECK(len == 0);
+ len = 65;
+ VG_UNDEF(sout, 65);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 1);
+ VG_CHECK(sout, 65);
+ CHECK(ecount == 4);
+ CHECK(len == 65);
+ /* Multiple illegal args. Should still set arg error only once. */
+ ecount = 0;
+ ecount2 = 11;
+ CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, NULL, 65) == 0);
+ CHECK(ecount == 1);
+ /* Does the illegal arg callback actually change the behavior? */
+ secp256k1_context_set_illegal_callback(ctx, uncounting_illegal_callback_fn, &ecount2);
+ CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, NULL, 65) == 0);
+ CHECK(ecount == 1);
+ CHECK(ecount2 == 10);
+ secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
+ /* Try a bunch of prefabbed points with all possible encodings. */
+ for (i = 0; i < SECP256K1_EC_PARSE_TEST_NVALID; i++) {
+ ec_pubkey_parse_pointtest(valid[i], 1, 1);
+ }
+ for (i = 0; i < SECP256K1_EC_PARSE_TEST_NXVALID; i++) {
+ ec_pubkey_parse_pointtest(onlyxvalid[i], 1, 0);
+ }
+ for (i = 0; i < SECP256K1_EC_PARSE_TEST_NINVALID; i++) {
+ ec_pubkey_parse_pointtest(invalid[i], 0, 0);
+ }
+}
+
+void run_eckey_edge_case_test(void) {
+ const unsigned char orderc[32] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
+ 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41
+ };
+ const unsigned char zeros[sizeof(secp256k1_pubkey)] = {0x00};
+ unsigned char ctmp[33];
+ unsigned char ctmp2[33];
+ secp256k1_pubkey pubkey;
+ secp256k1_pubkey pubkey2;
+ secp256k1_pubkey pubkey_one;
+ secp256k1_pubkey pubkey_negone;
+ const secp256k1_pubkey *pubkeys[3];
+ size_t len;
+ int32_t ecount;
+ /* Group order is too large, reject. */
+ CHECK(secp256k1_ec_seckey_verify(ctx, orderc) == 0);
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, orderc) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ /* Maximum value is too large, reject. */
+ memset(ctmp, 255, 32);
+ CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
+ memset(&pubkey, 1, sizeof(pubkey));
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ /* Zero is too small, reject. */
+ memset(ctmp, 0, 32);
+ CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
+ memset(&pubkey, 1, sizeof(pubkey));
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ /* One must be accepted. */
+ ctmp[31] = 0x01;
+ CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1);
+ memset(&pubkey, 0, sizeof(pubkey));
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 1);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
+ pubkey_one = pubkey;
+ /* Group order + 1 is too large, reject. */
+ memcpy(ctmp, orderc, 32);
+ ctmp[31] = 0x42;
+ CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
+ memset(&pubkey, 1, sizeof(pubkey));
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ /* -1 must be accepted. */
+ ctmp[31] = 0x40;
+ CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1);
+ memset(&pubkey, 0, sizeof(pubkey));
+ VG_UNDEF(&pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 1);
+ VG_CHECK(&pubkey, sizeof(pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
+ pubkey_negone = pubkey;
+ /* Tweak of zero leaves the value changed. */
+ memset(ctmp2, 0, 32);
+ CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, ctmp2) == 1);
+ CHECK(memcmp(orderc, ctmp, 31) == 0 && ctmp[31] == 0x40);
+ memcpy(&pubkey2, &pubkey, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
+ CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
+ /* Multiply tweak of zero zeroizes the output. */
+ CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, ctmp2) == 0);
+ CHECK(memcmp(zeros, ctmp, 32) == 0);
+ CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, ctmp2) == 0);
+ CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
+ memcpy(&pubkey, &pubkey2, sizeof(pubkey));
+ /* Overflowing key tweak zeroizes. */
+ memcpy(ctmp, orderc, 32);
+ ctmp[31] = 0x40;
+ CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, orderc) == 0);
+ CHECK(memcmp(zeros, ctmp, 32) == 0);
+ memcpy(ctmp, orderc, 32);
+ ctmp[31] = 0x40;
+ CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, orderc) == 0);
+ CHECK(memcmp(zeros, ctmp, 32) == 0);
+ memcpy(ctmp, orderc, 32);
+ ctmp[31] = 0x40;
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, orderc) == 0);
+ CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
+ memcpy(&pubkey, &pubkey2, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, orderc) == 0);
+ CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
+ memcpy(&pubkey, &pubkey2, sizeof(pubkey));
+ /* Private key tweaks results in a key of zero. */
+ ctmp2[31] = 1;
+ CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 0);
+ CHECK(memcmp(zeros, ctmp2, 32) == 0);
+ ctmp2[31] = 1;
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0);
+ CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
+ memcpy(&pubkey, &pubkey2, sizeof(pubkey));
+ /* Tweak computation wraps and results in a key of 1. */
+ ctmp2[31] = 2;
+ CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 1);
+ CHECK(memcmp(ctmp2, zeros, 31) == 0 && ctmp2[31] == 1);
+ ctmp2[31] = 2;
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
+ ctmp2[31] = 1;
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, ctmp2) == 1);
+ CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
+ /* Tweak mul * 2 = 1+1. */
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
+ ctmp2[31] = 2;
+ CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey2, ctmp2) == 1);
+ CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
+ /* Test argument errors. */
+ ecount = 0;
+ secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
+ CHECK(ecount == 0);
+ /* Zeroize pubkey on parse error. */
+ memset(&pubkey, 0, 32);
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0);
+ CHECK(ecount == 1);
+ CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
+ memcpy(&pubkey, &pubkey2, sizeof(pubkey));
+ memset(&pubkey2, 0, 32);
+ CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey2, ctmp2) == 0);
+ CHECK(ecount == 2);
+ CHECK(memcmp(&pubkey2, zeros, sizeof(pubkey2)) == 0);
+ /* Plain argument errors. */
+ ecount = 0;
+ CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1);
+ CHECK(ecount == 0);
+ CHECK(secp256k1_ec_seckey_verify(ctx, NULL) == 0);
+ CHECK(ecount == 1);
+ ecount = 0;
+ memset(ctmp2, 0, 32);
+ ctmp2[31] = 4;
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, NULL, ctmp2) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, NULL) == 0);
+ CHECK(ecount == 2);
+ ecount = 0;
+ memset(ctmp2, 0, 32);
+ ctmp2[31] = 4;
+ CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, NULL, ctmp2) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, NULL) == 0);
+ CHECK(ecount == 2);
+ ecount = 0;
+ memset(ctmp2, 0, 32);
+ CHECK(secp256k1_ec_privkey_tweak_add(ctx, NULL, ctmp2) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, NULL) == 0);
+ CHECK(ecount == 2);
+ ecount = 0;
+ memset(ctmp2, 0, 32);
+ ctmp2[31] = 1;
+ CHECK(secp256k1_ec_privkey_tweak_mul(ctx, NULL, ctmp2) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, NULL) == 0);
+ CHECK(ecount == 2);
+ ecount = 0;
+ CHECK(secp256k1_ec_pubkey_create(ctx, NULL, ctmp) == 0);
+ CHECK(ecount == 1);
+ memset(&pubkey, 1, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, NULL) == 0);
+ CHECK(ecount == 2);
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ /* secp256k1_ec_pubkey_combine tests. */
+ ecount = 0;
+ pubkeys[0] = &pubkey_one;
+ VG_UNDEF(&pubkeys[0], sizeof(secp256k1_pubkey *));
+ VG_UNDEF(&pubkeys[1], sizeof(secp256k1_pubkey *));
+ VG_UNDEF(&pubkeys[2], sizeof(secp256k1_pubkey *));
+ memset(&pubkey, 255, sizeof(secp256k1_pubkey));
+ VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 0) == 0);
+ VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ec_pubkey_combine(ctx, NULL, pubkeys, 1) == 0);
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ CHECK(ecount == 2);
+ memset(&pubkey, 255, sizeof(secp256k1_pubkey));
+ VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, NULL, 1) == 0);
+ VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ CHECK(ecount == 3);
+ pubkeys[0] = &pubkey_negone;
+ memset(&pubkey, 255, sizeof(secp256k1_pubkey));
+ VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 1) == 1);
+ VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
+ CHECK(ecount == 3);
+ len = 33;
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp, &len, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp2, &len, &pubkey_negone, SECP256K1_EC_COMPRESSED) == 1);
+ CHECK(memcmp(ctmp, ctmp2, 33) == 0);
+ /* Result is infinity. */
+ pubkeys[0] = &pubkey_one;
+ pubkeys[1] = &pubkey_negone;
+ memset(&pubkey, 255, sizeof(secp256k1_pubkey));
+ VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 2) == 0);
+ VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
+ CHECK(ecount == 3);
+ /* Passes through infinity but comes out one. */
+ pubkeys[2] = &pubkey_one;
+ memset(&pubkey, 255, sizeof(secp256k1_pubkey));
+ VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 3) == 1);
+ VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
+ CHECK(ecount == 3);
+ len = 33;
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp, &len, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp2, &len, &pubkey_one, SECP256K1_EC_COMPRESSED) == 1);
+ CHECK(memcmp(ctmp, ctmp2, 33) == 0);
+ /* Adds to two. */
+ pubkeys[1] = &pubkey_one;
+ memset(&pubkey, 255, sizeof(secp256k1_pubkey));
+ VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 2) == 1);
+ VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
+ CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
+ CHECK(ecount == 3);
+ secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
+}
+
+void random_sign(secp256k1_scalar *sigr, secp256k1_scalar *sigs, const secp256k1_scalar *key, const secp256k1_scalar *msg, int *recid) {
+ secp256k1_scalar nonce;
+ do {
+ random_scalar_order_test(&nonce);
+ } while(!secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, sigr, sigs, key, msg, &nonce, recid));
+}
+
+void test_ecdsa_sign_verify(void) {
+ secp256k1_gej pubj;
+ secp256k1_ge pub;
+ secp256k1_scalar one;
+ secp256k1_scalar msg, key;
+ secp256k1_scalar sigr, sigs;
+ int recid;
+ int getrec;
+ random_scalar_order_test(&msg);
+ random_scalar_order_test(&key);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pubj, &key);
+ secp256k1_ge_set_gej(&pub, &pubj);
+ getrec = secp256k1_rand_bits(1);
+ random_sign(&sigr, &sigs, &key, &msg, getrec?&recid:NULL);
+ if (getrec) {
+ CHECK(recid >= 0 && recid < 4);
+ }
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &pub, &msg));
+ secp256k1_scalar_set_int(&one, 1);
+ secp256k1_scalar_add(&msg, &msg, &one);
+ CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &pub, &msg));
+}
+
+void run_ecdsa_sign_verify(void) {
+ int i;
+ for (i = 0; i < 10*count; i++) {
+ test_ecdsa_sign_verify();
+ }
+}
+
+/** Dummy nonce generation function that just uses a precomputed nonce, and fails if it is not accepted. Use only for testing. */
+static int precomputed_nonce_function(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
+ (void)msg32;
+ (void)key32;
+ (void)algo16;
+ memcpy(nonce32, data, 32);
+ return (counter == 0);
+}
+
+static int nonce_function_test_fail(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
+ /* Dummy nonce generator that has a fatal error on the first counter value. */
+ if (counter == 0) {
+ return 0;
+ }
+ return nonce_function_rfc6979(nonce32, msg32, key32, algo16, data, counter - 1);
+}
+
+static int nonce_function_test_retry(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
+ /* Dummy nonce generator that produces unacceptable nonces for the first several counter values. */
+ if (counter < 3) {
+ memset(nonce32, counter==0 ? 0 : 255, 32);
+ if (counter == 2) {
+ nonce32[31]--;
+ }
+ return 1;
+ }
+ if (counter < 5) {
+ static const unsigned char order[] = {
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
+ 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,
+ 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41
+ };
+ memcpy(nonce32, order, 32);
+ if (counter == 4) {
+ nonce32[31]++;
+ }
+ return 1;
+ }
+ /* Retry rate of 6979 is negligible esp. as we only call this in deterministic tests. */
+ /* If someone does fine a case where it retries for secp256k1, we'd like to know. */
+ if (counter > 5) {
+ return 0;
+ }
+ return nonce_function_rfc6979(nonce32, msg32, key32, algo16, data, counter - 5);
+}
+
+int is_empty_signature(const secp256k1_ecdsa_signature *sig) {
+ static const unsigned char res[sizeof(secp256k1_ecdsa_signature)] = {0};
+ return memcmp(sig, res, sizeof(secp256k1_ecdsa_signature)) == 0;
+}
+
+void test_ecdsa_end_to_end(void) {
+ unsigned char extra[32] = {0x00};
+ unsigned char privkey[32];
+ unsigned char message[32];
+ unsigned char privkey2[32];
+ secp256k1_ecdsa_signature signature[6];
+ secp256k1_scalar r, s;
+ unsigned char sig[74];
+ size_t siglen = 74;
+ unsigned char pubkeyc[65];
+ size_t pubkeyclen = 65;
+ secp256k1_pubkey pubkey;
+ unsigned char seckey[300];
+ size_t seckeylen = 300;
+
+ /* Generate a random key and message. */
+ {
+ secp256k1_scalar msg, key;
+ random_scalar_order_test(&msg);
+ random_scalar_order_test(&key);
+ secp256k1_scalar_get_b32(privkey, &key);
+ secp256k1_scalar_get_b32(message, &msg);
+ }
+
+ /* Construct and verify corresponding public key. */
+ CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1);
+
+ /* Verify exporting and importing public key. */
+ CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyc, &pubkeyclen, &pubkey, secp256k1_rand_bits(1) == 1 ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED));
+ memset(&pubkey, 0, sizeof(pubkey));
+ CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 1);
+
+ /* Verify private key import and export. */
+ CHECK(ec_privkey_export_der(ctx, seckey, &seckeylen, privkey, secp256k1_rand_bits(1) == 1));
+ CHECK(ec_privkey_import_der(ctx, privkey2, seckey, seckeylen) == 1);
+ CHECK(memcmp(privkey, privkey2, 32) == 0);
+
+ /* Optionally tweak the keys using addition. */
+ if (secp256k1_rand_int(3) == 0) {
+ int ret1;
+ int ret2;
+ unsigned char rnd[32];
+ secp256k1_pubkey pubkey2;
+ secp256k1_rand256_test(rnd);
+ ret1 = secp256k1_ec_privkey_tweak_add(ctx, privkey, rnd);
+ ret2 = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, rnd);
+ CHECK(ret1 == ret2);
+ if (ret1 == 0) {
+ return;
+ }
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
+ CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
+ }
+
+ /* Optionally tweak the keys using multiplication. */
+ if (secp256k1_rand_int(3) == 0) {
+ int ret1;
+ int ret2;
+ unsigned char rnd[32];
+ secp256k1_pubkey pubkey2;
+ secp256k1_rand256_test(rnd);
+ ret1 = secp256k1_ec_privkey_tweak_mul(ctx, privkey, rnd);
+ ret2 = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, rnd);
+ CHECK(ret1 == ret2);
+ if (ret1 == 0) {
+ return;
+ }
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
+ CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
+ }
+
+ /* Sign. */
+ CHECK(secp256k1_ecdsa_sign(ctx, &signature[0], message, privkey, NULL, NULL) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, &signature[4], message, privkey, NULL, NULL) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, &signature[1], message, privkey, NULL, extra) == 1);
+ extra[31] = 1;
+ CHECK(secp256k1_ecdsa_sign(ctx, &signature[2], message, privkey, NULL, extra) == 1);
+ extra[31] = 0;
+ extra[0] = 1;
+ CHECK(secp256k1_ecdsa_sign(ctx, &signature[3], message, privkey, NULL, extra) == 1);
+ CHECK(memcmp(&signature[0], &signature[4], sizeof(signature[0])) == 0);
+ CHECK(memcmp(&signature[0], &signature[1], sizeof(signature[0])) != 0);
+ CHECK(memcmp(&signature[0], &signature[2], sizeof(signature[0])) != 0);
+ CHECK(memcmp(&signature[0], &signature[3], sizeof(signature[0])) != 0);
+ CHECK(memcmp(&signature[1], &signature[2], sizeof(signature[0])) != 0);
+ CHECK(memcmp(&signature[1], &signature[3], sizeof(signature[0])) != 0);
+ CHECK(memcmp(&signature[2], &signature[3], sizeof(signature[0])) != 0);
+ /* Verify. */
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[1], message, &pubkey) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[2], message, &pubkey) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[3], message, &pubkey) == 1);
+ /* Test lower-S form, malleate, verify and fail, test again, malleate again */
+ CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[0]));
+ secp256k1_ecdsa_signature_load(ctx, &r, &s, &signature[0]);
+ secp256k1_scalar_negate(&s, &s);
+ secp256k1_ecdsa_signature_save(&signature[5], &r, &s);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 0);
+ CHECK(secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5]));
+ CHECK(secp256k1_ecdsa_signature_normalize(ctx, &signature[5], &signature[5]));
+ CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5]));
+ CHECK(!secp256k1_ecdsa_signature_normalize(ctx, &signature[5], &signature[5]));
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 1);
+ secp256k1_scalar_negate(&s, &s);
+ secp256k1_ecdsa_signature_save(&signature[5], &r, &s);
+ CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5]));
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 1);
+ CHECK(memcmp(&signature[5], &signature[0], 64) == 0);
+
+ /* Serialize/parse DER and verify again */
+ CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, sig, &siglen, &signature[0]) == 1);
+ memset(&signature[0], 0, sizeof(signature[0]));
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &signature[0], sig, siglen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 1);
+ /* Serialize/destroy/parse DER and verify again. */
+ siglen = 74;
+ CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, sig, &siglen, &signature[0]) == 1);
+ sig[secp256k1_rand_int(siglen)] += 1 + secp256k1_rand_int(255);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &signature[0], sig, siglen) == 0 ||
+ secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 0);
+}
+
+void test_random_pubkeys(void) {
+ secp256k1_ge elem;
+ secp256k1_ge elem2;
+ unsigned char in[65];
+ /* Generate some randomly sized pubkeys. */
+ size_t len = secp256k1_rand_bits(2) == 0 ? 65 : 33;
+ if (secp256k1_rand_bits(2) == 0) {
+ len = secp256k1_rand_bits(6);
+ }
+ if (len == 65) {
+ in[0] = secp256k1_rand_bits(1) ? 4 : (secp256k1_rand_bits(1) ? 6 : 7);
+ } else {
+ in[0] = secp256k1_rand_bits(1) ? 2 : 3;
+ }
+ if (secp256k1_rand_bits(3) == 0) {
+ in[0] = secp256k1_rand_bits(8);
+ }
+ if (len > 1) {
+ secp256k1_rand256(&in[1]);
+ }
+ if (len > 33) {
+ secp256k1_rand256(&in[33]);
+ }
+ if (secp256k1_eckey_pubkey_parse(&elem, in, len)) {
+ unsigned char out[65];
+ unsigned char firstb;
+ int res;
+ size_t size = len;
+ firstb = in[0];
+ /* If the pubkey can be parsed, it should round-trip... */
+ CHECK(secp256k1_eckey_pubkey_serialize(&elem, out, &size, len == 33));
+ CHECK(size == len);
+ CHECK(memcmp(&in[1], &out[1], len-1) == 0);
+ /* ... except for the type of hybrid inputs. */
+ if ((in[0] != 6) && (in[0] != 7)) {
+ CHECK(in[0] == out[0]);
+ }
+ size = 65;
+ CHECK(secp256k1_eckey_pubkey_serialize(&elem, in, &size, 0));
+ CHECK(size == 65);
+ CHECK(secp256k1_eckey_pubkey_parse(&elem2, in, size));
+ ge_equals_ge(&elem,&elem2);
+ /* Check that the X9.62 hybrid type is checked. */
+ in[0] = secp256k1_rand_bits(1) ? 6 : 7;
+ res = secp256k1_eckey_pubkey_parse(&elem2, in, size);
+ if (firstb == 2 || firstb == 3) {
+ if (in[0] == firstb + 4) {
+ CHECK(res);
+ } else {
+ CHECK(!res);
+ }
+ }
+ if (res) {
+ ge_equals_ge(&elem,&elem2);
+ CHECK(secp256k1_eckey_pubkey_serialize(&elem, out, &size, 0));
+ CHECK(memcmp(&in[1], &out[1], 64) == 0);
+ }
+ }
+}
+
+void run_random_pubkeys(void) {
+ int i;
+ for (i = 0; i < 10*count; i++) {
+ test_random_pubkeys();
+ }
+}
+
+void run_ecdsa_end_to_end(void) {
+ int i;
+ for (i = 0; i < 64*count; i++) {
+ test_ecdsa_end_to_end();
+ }
+}
+
+int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_der, int certainly_not_der) {
+ static const unsigned char zeroes[32] = {0};
+#ifdef ENABLE_OPENSSL_TESTS
+ static const unsigned char max_scalar[32] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
+ 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40
+ };
+#endif
+
+ int ret = 0;
+
+ secp256k1_ecdsa_signature sig_der;
+ unsigned char roundtrip_der[2048];
+ unsigned char compact_der[64];
+ size_t len_der = 2048;
+ int parsed_der = 0, valid_der = 0, roundtrips_der = 0;
+
+ secp256k1_ecdsa_signature sig_der_lax;
+ unsigned char roundtrip_der_lax[2048];
+ unsigned char compact_der_lax[64];
+ size_t len_der_lax = 2048;
+ int parsed_der_lax = 0, valid_der_lax = 0, roundtrips_der_lax = 0;
+
+#ifdef ENABLE_OPENSSL_TESTS
+ ECDSA_SIG *sig_openssl;
+ const unsigned char *sigptr;
+ unsigned char roundtrip_openssl[2048];
+ int len_openssl = 2048;
+ int parsed_openssl, valid_openssl = 0, roundtrips_openssl = 0;
+#endif
+
+ parsed_der = secp256k1_ecdsa_signature_parse_der(ctx, &sig_der, sig, siglen);
+ if (parsed_der) {
+ ret |= (!secp256k1_ecdsa_signature_serialize_compact(ctx, compact_der, &sig_der)) << 0;
+ valid_der = (memcmp(compact_der, zeroes, 32) != 0) && (memcmp(compact_der + 32, zeroes, 32) != 0);
+ }
+ if (valid_der) {
+ ret |= (!secp256k1_ecdsa_signature_serialize_der(ctx, roundtrip_der, &len_der, &sig_der)) << 1;
+ roundtrips_der = (len_der == siglen) && memcmp(roundtrip_der, sig, siglen) == 0;
+ }
+
+ parsed_der_lax = ecdsa_signature_parse_der_lax(ctx, &sig_der_lax, sig, siglen);
+ if (parsed_der_lax) {
+ ret |= (!secp256k1_ecdsa_signature_serialize_compact(ctx, compact_der_lax, &sig_der_lax)) << 10;
+ valid_der_lax = (memcmp(compact_der_lax, zeroes, 32) != 0) && (memcmp(compact_der_lax + 32, zeroes, 32) != 0);
+ }
+ if (valid_der_lax) {
+ ret |= (!secp256k1_ecdsa_signature_serialize_der(ctx, roundtrip_der_lax, &len_der_lax, &sig_der_lax)) << 11;
+ roundtrips_der_lax = (len_der_lax == siglen) && memcmp(roundtrip_der_lax, sig, siglen) == 0;
+ }
+
+ if (certainly_der) {
+ ret |= (!parsed_der) << 2;
+ }
+ if (certainly_not_der) {
+ ret |= (parsed_der) << 17;
+ }
+ if (valid_der) {
+ ret |= (!roundtrips_der) << 3;
+ }
+
+ if (valid_der) {
+ ret |= (!roundtrips_der_lax) << 12;
+ ret |= (len_der != len_der_lax) << 13;
+ ret |= (memcmp(roundtrip_der_lax, roundtrip_der, len_der) != 0) << 14;
+ }
+ ret |= (roundtrips_der != roundtrips_der_lax) << 15;
+ if (parsed_der) {
+ ret |= (!parsed_der_lax) << 16;
+ }
+
+#ifdef ENABLE_OPENSSL_TESTS
+ sig_openssl = ECDSA_SIG_new();
+ sigptr = sig;
+ parsed_openssl = (d2i_ECDSA_SIG(&sig_openssl, &sigptr, siglen) != NULL);
+ if (parsed_openssl) {
+ valid_openssl = !BN_is_negative(sig_openssl->r) && !BN_is_negative(sig_openssl->s) && BN_num_bits(sig_openssl->r) > 0 && BN_num_bits(sig_openssl->r) <= 256 && BN_num_bits(sig_openssl->s) > 0 && BN_num_bits(sig_openssl->s) <= 256;
+ if (valid_openssl) {
+ unsigned char tmp[32] = {0};
+ BN_bn2bin(sig_openssl->r, tmp + 32 - BN_num_bytes(sig_openssl->r));
+ valid_openssl = memcmp(tmp, max_scalar, 32) < 0;
+ }
+ if (valid_openssl) {
+ unsigned char tmp[32] = {0};
+ BN_bn2bin(sig_openssl->s, tmp + 32 - BN_num_bytes(sig_openssl->s));
+ valid_openssl = memcmp(tmp, max_scalar, 32) < 0;
+ }
+ }
+ len_openssl = i2d_ECDSA_SIG(sig_openssl, NULL);
+ if (len_openssl <= 2048) {
+ unsigned char *ptr = roundtrip_openssl;
+ CHECK(i2d_ECDSA_SIG(sig_openssl, &ptr) == len_openssl);
+ roundtrips_openssl = valid_openssl && ((size_t)len_openssl == siglen) && (memcmp(roundtrip_openssl, sig, siglen) == 0);
+ } else {
+ len_openssl = 0;
+ }
+ ECDSA_SIG_free(sig_openssl);
+
+ ret |= (parsed_der && !parsed_openssl) << 4;
+ ret |= (valid_der && !valid_openssl) << 5;
+ ret |= (roundtrips_openssl && !parsed_der) << 6;
+ ret |= (roundtrips_der != roundtrips_openssl) << 7;
+ if (roundtrips_openssl) {
+ ret |= (len_der != (size_t)len_openssl) << 8;
+ ret |= (memcmp(roundtrip_der, roundtrip_openssl, len_der) != 0) << 9;
+ }
+#endif
+ return ret;
+}
+
+static void assign_big_endian(unsigned char *ptr, size_t ptrlen, uint32_t val) {
+ size_t i;
+ for (i = 0; i < ptrlen; i++) {
+ int shift = ptrlen - 1 - i;
+ if (shift >= 4) {
+ ptr[i] = 0;
+ } else {
+ ptr[i] = (val >> shift) & 0xFF;
+ }
+ }
+}
+
+static void damage_array(unsigned char *sig, size_t *len) {
+ int pos;
+ int action = secp256k1_rand_bits(3);
+ if (action < 1 && *len > 3) {
+ /* Delete a byte. */
+ pos = secp256k1_rand_int(*len);
+ memmove(sig + pos, sig + pos + 1, *len - pos - 1);
+ (*len)--;
+ return;
+ } else if (action < 2 && *len < 2048) {
+ /* Insert a byte. */
+ pos = secp256k1_rand_int(1 + *len);
+ memmove(sig + pos + 1, sig + pos, *len - pos);
+ sig[pos] = secp256k1_rand_bits(8);
+ (*len)++;
+ return;
+ } else if (action < 4) {
+ /* Modify a byte. */
+ sig[secp256k1_rand_int(*len)] += 1 + secp256k1_rand_int(255);
+ return;
+ } else { /* action < 8 */
+ /* Modify a bit. */
+ sig[secp256k1_rand_int(*len)] ^= 1 << secp256k1_rand_bits(3);
+ return;
+ }
+}
+
+static void random_ber_signature(unsigned char *sig, size_t *len, int* certainly_der, int* certainly_not_der) {
+ int der;
+ int nlow[2], nlen[2], nlenlen[2], nhbit[2], nhbyte[2], nzlen[2];
+ size_t tlen, elen, glen;
+ int indet;
+ int n;
+
+ *len = 0;
+ der = secp256k1_rand_bits(2) == 0;
+ *certainly_der = der;
+ *certainly_not_der = 0;
+ indet = der ? 0 : secp256k1_rand_int(10) == 0;
+
+ for (n = 0; n < 2; n++) {
+ /* We generate two classes of numbers: nlow==1 "low" ones (up to 32 bytes), nlow==0 "high" ones (32 bytes with 129 top bits set, or larger than 32 bytes) */
+ nlow[n] = der ? 1 : (secp256k1_rand_bits(3) != 0);
+ /* The length of the number in bytes (the first byte of which will always be nonzero) */
+ nlen[n] = nlow[n] ? secp256k1_rand_int(33) : 32 + secp256k1_rand_int(200) * secp256k1_rand_int(8) / 8;
+ CHECK(nlen[n] <= 232);
+ /* The top bit of the number. */
+ nhbit[n] = (nlow[n] == 0 && nlen[n] == 32) ? 1 : (nlen[n] == 0 ? 0 : secp256k1_rand_bits(1));
+ /* The top byte of the number (after the potential hardcoded 16 0xFF characters for "high" 32 bytes numbers) */
+ nhbyte[n] = nlen[n] == 0 ? 0 : (nhbit[n] ? 128 + secp256k1_rand_bits(7) : 1 + secp256k1_rand_int(127));
+ /* The number of zero bytes in front of the number (which is 0 or 1 in case of DER, otherwise we extend up to 300 bytes) */
+ nzlen[n] = der ? ((nlen[n] == 0 || nhbit[n]) ? 1 : 0) : (nlow[n] ? secp256k1_rand_int(3) : secp256k1_rand_int(300 - nlen[n]) * secp256k1_rand_int(8) / 8);
+ if (nzlen[n] > ((nlen[n] == 0 || nhbit[n]) ? 1 : 0)) {
+ *certainly_not_der = 1;
+ }
+ CHECK(nlen[n] + nzlen[n] <= 300);
+ /* The length of the length descriptor for the number. 0 means short encoding, anything else is long encoding. */
+ nlenlen[n] = nlen[n] + nzlen[n] < 128 ? 0 : (nlen[n] + nzlen[n] < 256 ? 1 : 2);
+ if (!der) {
+ /* nlenlen[n] max 127 bytes */
+ int add = secp256k1_rand_int(127 - nlenlen[n]) * secp256k1_rand_int(16) * secp256k1_rand_int(16) / 256;
+ nlenlen[n] += add;
+ if (add != 0) {
+ *certainly_not_der = 1;
+ }
+ }
+ CHECK(nlen[n] + nzlen[n] + nlenlen[n] <= 427);
+ }
+
+ /* The total length of the data to go, so far */
+ tlen = 2 + nlenlen[0] + nlen[0] + nzlen[0] + 2 + nlenlen[1] + nlen[1] + nzlen[1];
+ CHECK(tlen <= 856);
+
+ /* The length of the garbage inside the tuple. */
+ elen = (der || indet) ? 0 : secp256k1_rand_int(980 - tlen) * secp256k1_rand_int(8) / 8;
+ if (elen != 0) {
+ *certainly_not_der = 1;
+ }
+ tlen += elen;
+ CHECK(tlen <= 980);
+
+ /* The length of the garbage after the end of the tuple. */
+ glen = der ? 0 : secp256k1_rand_int(990 - tlen) * secp256k1_rand_int(8) / 8;
+ if (glen != 0) {
+ *certainly_not_der = 1;
+ }
+ CHECK(tlen + glen <= 990);
+
+ /* Write the tuple header. */
+ sig[(*len)++] = 0x30;
+ if (indet) {
+ /* Indeterminate length */
+ sig[(*len)++] = 0x80;
+ *certainly_not_der = 1;
+ } else {
+ int tlenlen = tlen < 128 ? 0 : (tlen < 256 ? 1 : 2);
+ if (!der) {
+ int add = secp256k1_rand_int(127 - tlenlen) * secp256k1_rand_int(16) * secp256k1_rand_int(16) / 256;
+ tlenlen += add;
+ if (add != 0) {
+ *certainly_not_der = 1;
+ }
+ }
+ if (tlenlen == 0) {
+ /* Short length notation */
+ sig[(*len)++] = tlen;
+ } else {
+ /* Long length notation */
+ sig[(*len)++] = 128 + tlenlen;
+ assign_big_endian(sig + *len, tlenlen, tlen);
+ *len += tlenlen;
+ }
+ tlen += tlenlen;
+ }
+ tlen += 2;
+ CHECK(tlen + glen <= 1119);
+
+ for (n = 0; n < 2; n++) {
+ /* Write the integer header. */
+ sig[(*len)++] = 0x02;
+ if (nlenlen[n] == 0) {
+ /* Short length notation */
+ sig[(*len)++] = nlen[n] + nzlen[n];
+ } else {
+ /* Long length notation. */
+ sig[(*len)++] = 128 + nlenlen[n];
+ assign_big_endian(sig + *len, nlenlen[n], nlen[n] + nzlen[n]);
+ *len += nlenlen[n];
+ }
+ /* Write zero padding */
+ while (nzlen[n] > 0) {
+ sig[(*len)++] = 0x00;
+ nzlen[n]--;
+ }
+ if (nlen[n] == 32 && !nlow[n]) {
+ /* Special extra 16 0xFF bytes in "high" 32-byte numbers */
+ int i;
+ for (i = 0; i < 16; i++) {
+ sig[(*len)++] = 0xFF;
+ }
+ nlen[n] -= 16;
+ }
+ /* Write first byte of number */
+ if (nlen[n] > 0) {
+ sig[(*len)++] = nhbyte[n];
+ nlen[n]--;
+ }
+ /* Generate remaining random bytes of number */
+ secp256k1_rand_bytes_test(sig + *len, nlen[n]);
+ *len += nlen[n];
+ nlen[n] = 0;
+ }
+
+ /* Generate random garbage inside tuple. */
+ secp256k1_rand_bytes_test(sig + *len, elen);
+ *len += elen;
+
+ /* Generate end-of-contents bytes. */
+ if (indet) {
+ sig[(*len)++] = 0;
+ sig[(*len)++] = 0;
+ tlen += 2;
+ }
+ CHECK(tlen + glen <= 1121);
+
+ /* Generate random garbage outside tuple. */
+ secp256k1_rand_bytes_test(sig + *len, glen);
+ *len += glen;
+ tlen += glen;
+ CHECK(tlen <= 1121);
+ CHECK(tlen == *len);
+}
+
+void run_ecdsa_der_parse(void) {
+ int i,j;
+ for (i = 0; i < 200 * count; i++) {
+ unsigned char buffer[2048];
+ size_t buflen = 0;
+ int certainly_der = 0;
+ int certainly_not_der = 0;
+ random_ber_signature(buffer, &buflen, &certainly_der, &certainly_not_der);
+ CHECK(buflen <= 2048);
+ for (j = 0; j < 16; j++) {
+ int ret = 0;
+ if (j > 0) {
+ damage_array(buffer, &buflen);
+ /* We don't know anything anymore about the DERness of the result */
+ certainly_der = 0;
+ certainly_not_der = 0;
+ }
+ ret = test_ecdsa_der_parse(buffer, buflen, certainly_der, certainly_not_der);
+ if (ret != 0) {
+ size_t k;
+ fprintf(stderr, "Failure %x on ", ret);
+ for (k = 0; k < buflen; k++) {
+ fprintf(stderr, "%02x ", buffer[k]);
+ }
+ fprintf(stderr, "\n");
+ }
+ CHECK(ret == 0);
+ }
+ }
+}
+
+/* Tests several edge cases. */
+void test_ecdsa_edge_cases(void) {
+ int t;
+ secp256k1_ecdsa_signature sig;
+
+ /* Test the case where ECDSA recomputes a point that is infinity. */
+ {
+ secp256k1_gej keyj;
+ secp256k1_ge key;
+ secp256k1_scalar msg;
+ secp256k1_scalar sr, ss;
+ secp256k1_scalar_set_int(&ss, 1);
+ secp256k1_scalar_negate(&ss, &ss);
+ secp256k1_scalar_inverse(&ss, &ss);
+ secp256k1_scalar_set_int(&sr, 1);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &keyj, &sr);
+ secp256k1_ge_set_gej(&key, &keyj);
+ msg = ss;
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
+ }
+
+ /* Verify signature with r of zero fails. */
+ {
+ const unsigned char pubkey_mods_zero[33] = {
+ 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0,
+ 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41,
+ 0x41
+ };
+ secp256k1_ge key;
+ secp256k1_scalar msg;
+ secp256k1_scalar sr, ss;
+ secp256k1_scalar_set_int(&ss, 1);
+ secp256k1_scalar_set_int(&msg, 0);
+ secp256k1_scalar_set_int(&sr, 0);
+ CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey_mods_zero, 33));
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
+ }
+
+ /* Verify signature with s of zero fails. */
+ {
+ const unsigned char pubkey[33] = {
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01
+ };
+ secp256k1_ge key;
+ secp256k1_scalar msg;
+ secp256k1_scalar sr, ss;
+ secp256k1_scalar_set_int(&ss, 0);
+ secp256k1_scalar_set_int(&msg, 0);
+ secp256k1_scalar_set_int(&sr, 1);
+ CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
+ }
+
+ /* Verify signature with message 0 passes. */
+ {
+ const unsigned char pubkey[33] = {
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02
+ };
+ const unsigned char pubkey2[33] = {
+ 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0,
+ 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41,
+ 0x43
+ };
+ secp256k1_ge key;
+ secp256k1_ge key2;
+ secp256k1_scalar msg;
+ secp256k1_scalar sr, ss;
+ secp256k1_scalar_set_int(&ss, 2);
+ secp256k1_scalar_set_int(&msg, 0);
+ secp256k1_scalar_set_int(&sr, 2);
+ CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
+ CHECK(secp256k1_eckey_pubkey_parse(&key2, pubkey2, 33));
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
+ secp256k1_scalar_negate(&ss, &ss);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
+ secp256k1_scalar_set_int(&ss, 1);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 0);
+ }
+
+ /* Verify signature with message 1 passes. */
+ {
+ const unsigned char pubkey[33] = {
+ 0x02, 0x14, 0x4e, 0x5a, 0x58, 0xef, 0x5b, 0x22,
+ 0x6f, 0xd2, 0xe2, 0x07, 0x6a, 0x77, 0xcf, 0x05,
+ 0xb4, 0x1d, 0xe7, 0x4a, 0x30, 0x98, 0x27, 0x8c,
+ 0x93, 0xe6, 0xe6, 0x3c, 0x0b, 0xc4, 0x73, 0x76,
+ 0x25
+ };
+ const unsigned char pubkey2[33] = {
+ 0x02, 0x8a, 0xd5, 0x37, 0xed, 0x73, 0xd9, 0x40,
+ 0x1d, 0xa0, 0x33, 0xd2, 0xdc, 0xf0, 0xaf, 0xae,
+ 0x34, 0xcf, 0x5f, 0x96, 0x4c, 0x73, 0x28, 0x0f,
+ 0x92, 0xc0, 0xf6, 0x9d, 0xd9, 0xb2, 0x09, 0x10,
+ 0x62
+ };
+ const unsigned char csr[32] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4,
+ 0x40, 0x2d, 0xa1, 0x72, 0x2f, 0xc9, 0xba, 0xeb
+ };
+ secp256k1_ge key;
+ secp256k1_ge key2;
+ secp256k1_scalar msg;
+ secp256k1_scalar sr, ss;
+ secp256k1_scalar_set_int(&ss, 1);
+ secp256k1_scalar_set_int(&msg, 1);
+ secp256k1_scalar_set_b32(&sr, csr, NULL);
+ CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
+ CHECK(secp256k1_eckey_pubkey_parse(&key2, pubkey2, 33));
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
+ secp256k1_scalar_negate(&ss, &ss);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
+ secp256k1_scalar_set_int(&ss, 2);
+ secp256k1_scalar_inverse_var(&ss, &ss);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 0);
+ }
+
+ /* Verify signature with message -1 passes. */
+ {
+ const unsigned char pubkey[33] = {
+ 0x03, 0xaf, 0x97, 0xff, 0x7d, 0x3a, 0xf6, 0xa0,
+ 0x02, 0x94, 0xbd, 0x9f, 0x4b, 0x2e, 0xd7, 0x52,
+ 0x28, 0xdb, 0x49, 0x2a, 0x65, 0xcb, 0x1e, 0x27,
+ 0x57, 0x9c, 0xba, 0x74, 0x20, 0xd5, 0x1d, 0x20,
+ 0xf1
+ };
+ const unsigned char csr[32] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4,
+ 0x40, 0x2d, 0xa1, 0x72, 0x2f, 0xc9, 0xba, 0xee
+ };
+ secp256k1_ge key;
+ secp256k1_scalar msg;
+ secp256k1_scalar sr, ss;
+ secp256k1_scalar_set_int(&ss, 1);
+ secp256k1_scalar_set_int(&msg, 1);
+ secp256k1_scalar_negate(&msg, &msg);
+ secp256k1_scalar_set_b32(&sr, csr, NULL);
+ CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
+ secp256k1_scalar_negate(&ss, &ss);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
+ secp256k1_scalar_set_int(&ss, 3);
+ secp256k1_scalar_inverse_var(&ss, &ss);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
+ }
+
+ /* Signature where s would be zero. */
+ {
+ secp256k1_pubkey pubkey;
+ size_t siglen;
+ int32_t ecount;
+ unsigned char signature[72];
+ static const unsigned char nonce[32] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ };
+ static const unsigned char nonce2[32] = {
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
+ 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,
+ 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x40
+ };
+ const unsigned char key[32] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ };
+ unsigned char msg[32] = {
+ 0x86, 0x41, 0x99, 0x81, 0x06, 0x23, 0x44, 0x53,
+ 0xaa, 0x5f, 0x9d, 0x6a, 0x31, 0x78, 0xf4, 0xf7,
+ 0xb8, 0x12, 0xe0, 0x0b, 0x81, 0x7a, 0x77, 0x62,
+ 0x65, 0xdf, 0xdd, 0x31, 0xb9, 0x3e, 0x29, 0xa9,
+ };
+ ecount = 0;
+ secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce) == 0);
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce2) == 0);
+ msg[31] = 0xaa;
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce) == 1);
+ CHECK(ecount == 0);
+ CHECK(secp256k1_ecdsa_sign(ctx, NULL, msg, key, precomputed_nonce_function, nonce2) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, NULL, key, precomputed_nonce_function, nonce2) == 0);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, NULL, precomputed_nonce_function, nonce2) == 0);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce2) == 1);
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, key) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, NULL, msg, &pubkey) == 0);
+ CHECK(ecount == 4);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, NULL, &pubkey) == 0);
+ CHECK(ecount == 5);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, NULL) == 0);
+ CHECK(ecount == 6);
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, &pubkey) == 1);
+ CHECK(ecount == 6);
+ CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, NULL) == 0);
+ CHECK(ecount == 7);
+ /* That pubkeyload fails via an ARGCHECK is a little odd but makes sense because pubkeys are an opaque data type. */
+ CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, &pubkey) == 0);
+ CHECK(ecount == 8);
+ siglen = 72;
+ CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, NULL, &siglen, &sig) == 0);
+ CHECK(ecount == 9);
+ CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, NULL, &sig) == 0);
+ CHECK(ecount == 10);
+ CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, NULL) == 0);
+ CHECK(ecount == 11);
+ CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, &sig) == 1);
+ CHECK(ecount == 11);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, NULL, signature, siglen) == 0);
+ CHECK(ecount == 12);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, NULL, siglen) == 0);
+ CHECK(ecount == 13);
+ CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, signature, siglen) == 1);
+ CHECK(ecount == 13);
+ siglen = 10;
+ /* Too little room for a signature does not fail via ARGCHECK. */
+ CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, &sig) == 0);
+ CHECK(ecount == 13);
+ ecount = 0;
+ CHECK(secp256k1_ecdsa_signature_normalize(ctx, NULL, NULL) == 0);
+ CHECK(ecount == 1);
+ CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, NULL, &sig) == 0);
+ CHECK(ecount == 2);
+ CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, signature, NULL) == 0);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, signature, &sig) == 1);
+ CHECK(ecount == 3);
+ CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, NULL, signature) == 0);
+ CHECK(ecount == 4);
+ CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, NULL) == 0);
+ CHECK(ecount == 5);
+ CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, signature) == 1);
+ CHECK(ecount == 5);
+ memset(signature, 255, 64);
+ CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, signature) == 0);
+ CHECK(ecount == 5);
+ secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
+ }
+
+ /* Nonce function corner cases. */
+ for (t = 0; t < 2; t++) {
+ static const unsigned char zero[32] = {0x00};
+ int i;
+ unsigned char key[32];
+ unsigned char msg[32];
+ secp256k1_ecdsa_signature sig2;
+ secp256k1_scalar sr[512], ss;
+ const unsigned char *extra;
+ extra = t == 0 ? NULL : zero;
+ memset(msg, 0, 32);
+ msg[31] = 1;
+ /* High key results in signature failure. */
+ memset(key, 0xFF, 32);
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, NULL, extra) == 0);
+ CHECK(is_empty_signature(&sig));
+ /* Zero key results in signature failure. */
+ memset(key, 0, 32);
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, NULL, extra) == 0);
+ CHECK(is_empty_signature(&sig));
+ /* Nonce function failure results in signature failure. */
+ key[31] = 1;
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, nonce_function_test_fail, extra) == 0);
+ CHECK(is_empty_signature(&sig));
+ /* The retry loop successfully makes its way to the first good value. */
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, nonce_function_test_retry, extra) == 1);
+ CHECK(!is_empty_signature(&sig));
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, nonce_function_rfc6979, extra) == 1);
+ CHECK(!is_empty_signature(&sig2));
+ CHECK(memcmp(&sig, &sig2, sizeof(sig)) == 0);
+ /* The default nonce function is deterministic. */
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1);
+ CHECK(!is_empty_signature(&sig2));
+ CHECK(memcmp(&sig, &sig2, sizeof(sig)) == 0);
+ /* The default nonce function changes output with different messages. */
+ for(i = 0; i < 256; i++) {
+ int j;
+ msg[0] = i;
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1);
+ CHECK(!is_empty_signature(&sig2));
+ secp256k1_ecdsa_signature_load(ctx, &sr[i], &ss, &sig2);
+ for (j = 0; j < i; j++) {
+ CHECK(!secp256k1_scalar_eq(&sr[i], &sr[j]));
+ }
+ }
+ msg[0] = 0;
+ msg[31] = 2;
+ /* The default nonce function changes output with different keys. */
+ for(i = 256; i < 512; i++) {
+ int j;
+ key[0] = i - 256;
+ CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1);
+ CHECK(!is_empty_signature(&sig2));
+ secp256k1_ecdsa_signature_load(ctx, &sr[i], &ss, &sig2);
+ for (j = 0; j < i; j++) {
+ CHECK(!secp256k1_scalar_eq(&sr[i], &sr[j]));
+ }
+ }
+ key[0] = 0;
+ }
+
+ {
+ /* Check that optional nonce arguments do not have equivalent effect. */
+ const unsigned char zeros[32] = {0};
+ unsigned char nonce[32];
+ unsigned char nonce2[32];
+ unsigned char nonce3[32];
+ unsigned char nonce4[32];
+ VG_UNDEF(nonce,32);
+ VG_UNDEF(nonce2,32);
+ VG_UNDEF(nonce3,32);
+ VG_UNDEF(nonce4,32);
+ CHECK(nonce_function_rfc6979(nonce, zeros, zeros, NULL, NULL, 0) == 1);
+ VG_CHECK(nonce,32);
+ CHECK(nonce_function_rfc6979(nonce2, zeros, zeros, zeros, NULL, 0) == 1);
+ VG_CHECK(nonce2,32);
+ CHECK(nonce_function_rfc6979(nonce3, zeros, zeros, NULL, (void *)zeros, 0) == 1);
+ VG_CHECK(nonce3,32);
+ CHECK(nonce_function_rfc6979(nonce4, zeros, zeros, zeros, (void *)zeros, 0) == 1);
+ VG_CHECK(nonce4,32);
+ CHECK(memcmp(nonce, nonce2, 32) != 0);
+ CHECK(memcmp(nonce, nonce3, 32) != 0);
+ CHECK(memcmp(nonce, nonce4, 32) != 0);
+ CHECK(memcmp(nonce2, nonce3, 32) != 0);
+ CHECK(memcmp(nonce2, nonce4, 32) != 0);
+ CHECK(memcmp(nonce3, nonce4, 32) != 0);
+ }
+
+
+ /* Privkey export where pubkey is the point at infinity. */
+ {
+ unsigned char privkey[300];
+ unsigned char seckey[32] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
+ 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41,
+ };
+ size_t outlen = 300;
+ CHECK(!ec_privkey_export_der(ctx, privkey, &outlen, seckey, 0));
+ outlen = 300;
+ CHECK(!ec_privkey_export_der(ctx, privkey, &outlen, seckey, 1));
+ }
+}
+
+void run_ecdsa_edge_cases(void) {
+ test_ecdsa_edge_cases();
+}
+
+#ifdef ENABLE_OPENSSL_TESTS
+EC_KEY *get_openssl_key(const unsigned char *key32) {
+ unsigned char privkey[300];
+ size_t privkeylen;
+ const unsigned char* pbegin = privkey;
+ int compr = secp256k1_rand_bits(1);
+ EC_KEY *ec_key = EC_KEY_new_by_curve_name(NID_secp256k1);
+ CHECK(ec_privkey_export_der(ctx, privkey, &privkeylen, key32, compr));
+ CHECK(d2i_ECPrivateKey(&ec_key, &pbegin, privkeylen));
+ CHECK(EC_KEY_check_key(ec_key));
+ return ec_key;
+}
+
+void test_ecdsa_openssl(void) {
+ secp256k1_gej qj;
+ secp256k1_ge q;
+ secp256k1_scalar sigr, sigs;
+ secp256k1_scalar one;
+ secp256k1_scalar msg2;
+ secp256k1_scalar key, msg;
+ EC_KEY *ec_key;
+ unsigned int sigsize = 80;
+ size_t secp_sigsize = 80;
+ unsigned char message[32];
+ unsigned char signature[80];
+ unsigned char key32[32];
+ secp256k1_rand256_test(message);
+ secp256k1_scalar_set_b32(&msg, message, NULL);
+ random_scalar_order_test(&key);
+ secp256k1_scalar_get_b32(key32, &key);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &qj, &key);
+ secp256k1_ge_set_gej(&q, &qj);
+ ec_key = get_openssl_key(key32);
+ CHECK(ec_key != NULL);
+ CHECK(ECDSA_sign(0, message, sizeof(message), signature, &sigsize, ec_key));
+ CHECK(secp256k1_ecdsa_sig_parse(&sigr, &sigs, signature, sigsize));
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &q, &msg));
+ secp256k1_scalar_set_int(&one, 1);
+ secp256k1_scalar_add(&msg2, &msg, &one);
+ CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &q, &msg2));
+
+ random_sign(&sigr, &sigs, &key, &msg, NULL);
+ CHECK(secp256k1_ecdsa_sig_serialize(signature, &secp_sigsize, &sigr, &sigs));
+ CHECK(ECDSA_verify(0, message, sizeof(message), signature, secp_sigsize, ec_key) == 1);
+
+ EC_KEY_free(ec_key);
+}
+
+void run_ecdsa_openssl(void) {
+ int i;
+ for (i = 0; i < 10*count; i++) {
+ test_ecdsa_openssl();
+ }
+}
+#endif
+
+#ifdef ENABLE_MODULE_ECDH
+# include "modules/ecdh/tests_impl.h"
+#endif
+
+#ifdef ENABLE_MODULE_SCHNORR
+# include "modules/schnorr/tests_impl.h"
+#endif
+
+#ifdef ENABLE_MODULE_RECOVERY
+# include "modules/recovery/tests_impl.h"
+#endif
+
+int main(int argc, char **argv) {
+ unsigned char seed16[16] = {0};
+ unsigned char run32[32] = {0};
+ /* find iteration count */
+ if (argc > 1) {
+ count = strtol(argv[1], NULL, 0);
+ }
+
+ /* find random seed */
+ if (argc > 2) {
+ int pos = 0;
+ const char* ch = argv[2];
+ while (pos < 16 && ch[0] != 0 && ch[1] != 0) {
+ unsigned short sh;
+ if (sscanf(ch, "%2hx", &sh)) {
+ seed16[pos] = sh;
+ } else {
+ break;
+ }
+ ch += 2;
+ pos++;
+ }
+ } else {
+ FILE *frand = fopen("/dev/urandom", "r");
+ if ((frand == NULL) || !fread(&seed16, sizeof(seed16), 1, frand)) {
+ uint64_t t = time(NULL) * (uint64_t)1337;
+ seed16[0] ^= t;
+ seed16[1] ^= t >> 8;
+ seed16[2] ^= t >> 16;
+ seed16[3] ^= t >> 24;
+ seed16[4] ^= t >> 32;
+ seed16[5] ^= t >> 40;
+ seed16[6] ^= t >> 48;
+ seed16[7] ^= t >> 56;
+ }
+ fclose(frand);
+ }
+ secp256k1_rand_seed(seed16);
+
+ printf("test count = %i\n", count);
+ printf("random seed = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", seed16[0], seed16[1], seed16[2], seed16[3], seed16[4], seed16[5], seed16[6], seed16[7], seed16[8], seed16[9], seed16[10], seed16[11], seed16[12], seed16[13], seed16[14], seed16[15]);
+
+ /* initialize */
+ run_context_tests();
+ ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+ if (secp256k1_rand_bits(1)) {
+ secp256k1_rand256(run32);
+ CHECK(secp256k1_context_randomize(ctx, secp256k1_rand_bits(1) ? run32 : NULL));
+ }
+
+ run_rand_bits();
+ run_rand_int();
+
+ run_sha256_tests();
+ run_hmac_sha256_tests();
+ run_rfc6979_hmac_sha256_tests();
+
+#ifndef USE_NUM_NONE
+ /* num tests */
+ run_num_smalltests();
+#endif
+
+ /* scalar tests */
+ run_scalar_tests();
+
+ /* field tests */
+ run_field_inv();
+ run_field_inv_var();
+ run_field_inv_all_var();
+ run_field_misc();
+ run_field_convert();
+ run_sqr();
+ run_sqrt();
+
+ /* group tests */
+ run_ge();
+ run_group_decompress();
+
+ /* ecmult tests */
+ run_wnaf();
+ run_point_times_order();
+ run_ecmult_chain();
+ run_ecmult_constants();
+ run_ecmult_gen_blind();
+ run_ecmult_const_tests();
+ run_ec_combine();
+
+ /* endomorphism tests */
+#ifdef USE_ENDOMORPHISM
+ run_endomorphism_tests();
+#endif
+
+ /* EC point parser test */
+ run_ec_pubkey_parse_test();
+
+ /* EC key edge cases */
+ run_eckey_edge_case_test();
+
+#ifdef ENABLE_MODULE_ECDH
+ /* ecdh tests */
+ run_ecdh_tests();
+#endif
+
+ /* ecdsa tests */
+ run_random_pubkeys();
+ run_ecdsa_der_parse();
+ run_ecdsa_sign_verify();
+ run_ecdsa_end_to_end();
+ run_ecdsa_edge_cases();
+#ifdef ENABLE_OPENSSL_TESTS
+ run_ecdsa_openssl();
+#endif
+
+#ifdef ENABLE_MODULE_SCHNORR
+ /* Schnorr tests */
+ run_schnorr_tests();
+#endif
+
+#ifdef ENABLE_MODULE_RECOVERY
+ /* ECDSA pubkey recovery tests */
+ run_recovery_tests();
+#endif
+
+ secp256k1_rand256(run32);
+ printf("random run = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", run32[0], run32[1], run32[2], run32[3], run32[4], run32[5], run32[6], run32[7], run32[8], run32[9], run32[10], run32[11], run32[12], run32[13], run32[14], run32[15]);
+
+ /* shutdown */
+ secp256k1_context_destroy(ctx);
+
+ printf("no problems found\n");
+ return 0;
+}
diff --git a/crypto/secp256k1/libsecp256k1/src/tests_exhaustive.c b/crypto/secp256k1/libsecp256k1/src/tests_exhaustive.c
new file mode 100644
index 000000000..b040bb073
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/tests_exhaustive.c
@@ -0,0 +1,470 @@
+/***********************************************************************
+ * Copyright (c) 2016 Andrew Poelstra *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <time.h>
+
+#undef USE_ECMULT_STATIC_PRECOMPUTATION
+
+#ifndef EXHAUSTIVE_TEST_ORDER
+/* see group_impl.h for allowable values */
+#define EXHAUSTIVE_TEST_ORDER 13
+#define EXHAUSTIVE_TEST_LAMBDA 9 /* cube root of 1 mod 13 */
+#endif
+
+#include "include/secp256k1.h"
+#include "group.h"
+#include "secp256k1.c"
+#include "testrand_impl.h"
+
+#ifdef ENABLE_MODULE_RECOVERY
+#include "src/modules/recovery/main_impl.h"
+#include "include/secp256k1_recovery.h"
+#endif
+
+/** stolen from tests.c */
+void ge_equals_ge(const secp256k1_ge *a, const secp256k1_ge *b) {
+ CHECK(a->infinity == b->infinity);
+ if (a->infinity) {
+ return;
+ }
+ CHECK(secp256k1_fe_equal_var(&a->x, &b->x));
+ CHECK(secp256k1_fe_equal_var(&a->y, &b->y));
+}
+
+void ge_equals_gej(const secp256k1_ge *a, const secp256k1_gej *b) {
+ secp256k1_fe z2s;
+ secp256k1_fe u1, u2, s1, s2;
+ CHECK(a->infinity == b->infinity);
+ if (a->infinity) {
+ return;
+ }
+ /* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */
+ secp256k1_fe_sqr(&z2s, &b->z);
+ secp256k1_fe_mul(&u1, &a->x, &z2s);
+ u2 = b->x; secp256k1_fe_normalize_weak(&u2);
+ secp256k1_fe_mul(&s1, &a->y, &z2s); secp256k1_fe_mul(&s1, &s1, &b->z);
+ s2 = b->y; secp256k1_fe_normalize_weak(&s2);
+ CHECK(secp256k1_fe_equal_var(&u1, &u2));
+ CHECK(secp256k1_fe_equal_var(&s1, &s2));
+}
+
+void random_fe(secp256k1_fe *x) {
+ unsigned char bin[32];
+ do {
+ secp256k1_rand256(bin);
+ if (secp256k1_fe_set_b32(x, bin)) {
+ return;
+ }
+ } while(1);
+}
+/** END stolen from tests.c */
+
+int secp256k1_nonce_function_smallint(unsigned char *nonce32, const unsigned char *msg32,
+ const unsigned char *key32, const unsigned char *algo16,
+ void *data, unsigned int attempt) {
+ secp256k1_scalar s;
+ int *idata = data;
+ (void)msg32;
+ (void)key32;
+ (void)algo16;
+ /* Some nonces cannot be used because they'd cause s and/or r to be zero.
+ * The signing function has retry logic here that just re-calls the nonce
+ * function with an increased `attempt`. So if attempt > 0 this means we
+ * need to change the nonce to avoid an infinite loop. */
+ if (attempt > 0) {
+ *idata = (*idata + 1) % EXHAUSTIVE_TEST_ORDER;
+ }
+ secp256k1_scalar_set_int(&s, *idata);
+ secp256k1_scalar_get_b32(nonce32, &s);
+ return 1;
+}
+
+#ifdef USE_ENDOMORPHISM
+void test_exhaustive_endomorphism(const secp256k1_ge *group, int order) {
+ int i;
+ for (i = 0; i < order; i++) {
+ secp256k1_ge res;
+ secp256k1_ge_mul_lambda(&res, &group[i]);
+ ge_equals_ge(&group[i * EXHAUSTIVE_TEST_LAMBDA % EXHAUSTIVE_TEST_ORDER], &res);
+ }
+}
+#endif
+
+void test_exhaustive_addition(const secp256k1_ge *group, const secp256k1_gej *groupj, int order) {
+ int i, j;
+
+ /* Sanity-check (and check infinity functions) */
+ CHECK(secp256k1_ge_is_infinity(&group[0]));
+ CHECK(secp256k1_gej_is_infinity(&groupj[0]));
+ for (i = 1; i < order; i++) {
+ CHECK(!secp256k1_ge_is_infinity(&group[i]));
+ CHECK(!secp256k1_gej_is_infinity(&groupj[i]));
+ }
+
+ /* Check all addition formulae */
+ for (j = 0; j < order; j++) {
+ secp256k1_fe fe_inv;
+ secp256k1_fe_inv(&fe_inv, &groupj[j].z);
+ for (i = 0; i < order; i++) {
+ secp256k1_ge zless_gej;
+ secp256k1_gej tmp;
+ /* add_var */
+ secp256k1_gej_add_var(&tmp, &groupj[i], &groupj[j], NULL);
+ ge_equals_gej(&group[(i + j) % order], &tmp);
+ /* add_ge */
+ if (j > 0) {
+ secp256k1_gej_add_ge(&tmp, &groupj[i], &group[j]);
+ ge_equals_gej(&group[(i + j) % order], &tmp);
+ }
+ /* add_ge_var */
+ secp256k1_gej_add_ge_var(&tmp, &groupj[i], &group[j], NULL);
+ ge_equals_gej(&group[(i + j) % order], &tmp);
+ /* add_zinv_var */
+ zless_gej.infinity = groupj[j].infinity;
+ zless_gej.x = groupj[j].x;
+ zless_gej.y = groupj[j].y;
+ secp256k1_gej_add_zinv_var(&tmp, &groupj[i], &zless_gej, &fe_inv);
+ ge_equals_gej(&group[(i + j) % order], &tmp);
+ }
+ }
+
+ /* Check doubling */
+ for (i = 0; i < order; i++) {
+ secp256k1_gej tmp;
+ if (i > 0) {
+ secp256k1_gej_double_nonzero(&tmp, &groupj[i], NULL);
+ ge_equals_gej(&group[(2 * i) % order], &tmp);
+ }
+ secp256k1_gej_double_var(&tmp, &groupj[i], NULL);
+ ge_equals_gej(&group[(2 * i) % order], &tmp);
+ }
+
+ /* Check negation */
+ for (i = 1; i < order; i++) {
+ secp256k1_ge tmp;
+ secp256k1_gej tmpj;
+ secp256k1_ge_neg(&tmp, &group[i]);
+ ge_equals_ge(&group[order - i], &tmp);
+ secp256k1_gej_neg(&tmpj, &groupj[i]);
+ ge_equals_gej(&group[order - i], &tmpj);
+ }
+}
+
+void test_exhaustive_ecmult(const secp256k1_context *ctx, const secp256k1_ge *group, const secp256k1_gej *groupj, int order) {
+ int i, j, r_log;
+ for (r_log = 1; r_log < order; r_log++) {
+ for (j = 0; j < order; j++) {
+ for (i = 0; i < order; i++) {
+ secp256k1_gej tmp;
+ secp256k1_scalar na, ng;
+ secp256k1_scalar_set_int(&na, i);
+ secp256k1_scalar_set_int(&ng, j);
+
+ secp256k1_ecmult(&ctx->ecmult_ctx, &tmp, &groupj[r_log], &na, &ng);
+ ge_equals_gej(&group[(i * r_log + j) % order], &tmp);
+
+ if (i > 0) {
+ secp256k1_ecmult_const(&tmp, &group[i], &ng);
+ ge_equals_gej(&group[(i * j) % order], &tmp);
+ }
+ }
+ }
+ }
+}
+
+void r_from_k(secp256k1_scalar *r, const secp256k1_ge *group, int k) {
+ secp256k1_fe x;
+ unsigned char x_bin[32];
+ k %= EXHAUSTIVE_TEST_ORDER;
+ x = group[k].x;
+ secp256k1_fe_normalize(&x);
+ secp256k1_fe_get_b32(x_bin, &x);
+ secp256k1_scalar_set_b32(r, x_bin, NULL);
+}
+
+void test_exhaustive_verify(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
+ int s, r, msg, key;
+ for (s = 1; s < order; s++) {
+ for (r = 1; r < order; r++) {
+ for (msg = 1; msg < order; msg++) {
+ for (key = 1; key < order; key++) {
+ secp256k1_ge nonconst_ge;
+ secp256k1_ecdsa_signature sig;
+ secp256k1_pubkey pk;
+ secp256k1_scalar sk_s, msg_s, r_s, s_s;
+ secp256k1_scalar s_times_k_s, msg_plus_r_times_sk_s;
+ int k, should_verify;
+ unsigned char msg32[32];
+
+ secp256k1_scalar_set_int(&s_s, s);
+ secp256k1_scalar_set_int(&r_s, r);
+ secp256k1_scalar_set_int(&msg_s, msg);
+ secp256k1_scalar_set_int(&sk_s, key);
+
+ /* Verify by hand */
+ /* Run through every k value that gives us this r and check that *one* works.
+ * Note there could be none, there could be multiple, ECDSA is weird. */
+ should_verify = 0;
+ for (k = 0; k < order; k++) {
+ secp256k1_scalar check_x_s;
+ r_from_k(&check_x_s, group, k);
+ if (r_s == check_x_s) {
+ secp256k1_scalar_set_int(&s_times_k_s, k);
+ secp256k1_scalar_mul(&s_times_k_s, &s_times_k_s, &s_s);
+ secp256k1_scalar_mul(&msg_plus_r_times_sk_s, &r_s, &sk_s);
+ secp256k1_scalar_add(&msg_plus_r_times_sk_s, &msg_plus_r_times_sk_s, &msg_s);
+ should_verify |= secp256k1_scalar_eq(&s_times_k_s, &msg_plus_r_times_sk_s);
+ }
+ }
+ /* nb we have a "high s" rule */
+ should_verify &= !secp256k1_scalar_is_high(&s_s);
+
+ /* Verify by calling verify */
+ secp256k1_ecdsa_signature_save(&sig, &r_s, &s_s);
+ memcpy(&nonconst_ge, &group[sk_s], sizeof(nonconst_ge));
+ secp256k1_pubkey_save(&pk, &nonconst_ge);
+ secp256k1_scalar_get_b32(msg32, &msg_s);
+ CHECK(should_verify ==
+ secp256k1_ecdsa_verify(ctx, &sig, msg32, &pk));
+ }
+ }
+ }
+ }
+}
+
+void test_exhaustive_sign(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
+ int i, j, k;
+
+ /* Loop */
+ for (i = 1; i < order; i++) { /* message */
+ for (j = 1; j < order; j++) { /* key */
+ for (k = 1; k < order; k++) { /* nonce */
+ const int starting_k = k;
+ secp256k1_ecdsa_signature sig;
+ secp256k1_scalar sk, msg, r, s, expected_r;
+ unsigned char sk32[32], msg32[32];
+ secp256k1_scalar_set_int(&msg, i);
+ secp256k1_scalar_set_int(&sk, j);
+ secp256k1_scalar_get_b32(sk32, &sk);
+ secp256k1_scalar_get_b32(msg32, &msg);
+
+ secp256k1_ecdsa_sign(ctx, &sig, msg32, sk32, secp256k1_nonce_function_smallint, &k);
+
+ secp256k1_ecdsa_signature_load(ctx, &r, &s, &sig);
+ /* Note that we compute expected_r *after* signing -- this is important
+ * because our nonce-computing function function might change k during
+ * signing. */
+ r_from_k(&expected_r, group, k);
+ CHECK(r == expected_r);
+ CHECK((k * s) % order == (i + r * j) % order ||
+ (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order);
+
+ /* Overflow means we've tried every possible nonce */
+ if (k < starting_k) {
+ break;
+ }
+ }
+ }
+ }
+
+ /* We would like to verify zero-knowledge here by counting how often every
+ * possible (s, r) tuple appears, but because the group order is larger
+ * than the field order, when coercing the x-values to scalar values, some
+ * appear more often than others, so we are actually not zero-knowledge.
+ * (This effect also appears in the real code, but the difference is on the
+ * order of 1/2^128th the field order, so the deviation is not useful to a
+ * computationally bounded attacker.)
+ */
+}
+
+#ifdef ENABLE_MODULE_RECOVERY
+void test_exhaustive_recovery_sign(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
+ int i, j, k;
+
+ /* Loop */
+ for (i = 1; i < order; i++) { /* message */
+ for (j = 1; j < order; j++) { /* key */
+ for (k = 1; k < order; k++) { /* nonce */
+ const int starting_k = k;
+ secp256k1_fe r_dot_y_normalized;
+ secp256k1_ecdsa_recoverable_signature rsig;
+ secp256k1_ecdsa_signature sig;
+ secp256k1_scalar sk, msg, r, s, expected_r;
+ unsigned char sk32[32], msg32[32];
+ int expected_recid;
+ int recid;
+ secp256k1_scalar_set_int(&msg, i);
+ secp256k1_scalar_set_int(&sk, j);
+ secp256k1_scalar_get_b32(sk32, &sk);
+ secp256k1_scalar_get_b32(msg32, &msg);
+
+ secp256k1_ecdsa_sign_recoverable(ctx, &rsig, msg32, sk32, secp256k1_nonce_function_smallint, &k);
+
+ /* Check directly */
+ secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, &rsig);
+ r_from_k(&expected_r, group, k);
+ CHECK(r == expected_r);
+ CHECK((k * s) % order == (i + r * j) % order ||
+ (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order);
+ /* In computing the recid, there is an overflow condition that is disabled in
+ * scalar_low_impl.h `secp256k1_scalar_set_b32` because almost every r.y value
+ * will exceed the group order, and our signing code always holds out for r
+ * values that don't overflow, so with a proper overflow check the tests would
+ * loop indefinitely. */
+ r_dot_y_normalized = group[k].y;
+ secp256k1_fe_normalize(&r_dot_y_normalized);
+ /* Also the recovery id is flipped depending if we hit the low-s branch */
+ if ((k * s) % order == (i + r * j) % order) {
+ expected_recid = secp256k1_fe_is_odd(&r_dot_y_normalized) ? 1 : 0;
+ } else {
+ expected_recid = secp256k1_fe_is_odd(&r_dot_y_normalized) ? 0 : 1;
+ }
+ CHECK(recid == expected_recid);
+
+ /* Convert to a standard sig then check */
+ secp256k1_ecdsa_recoverable_signature_convert(ctx, &sig, &rsig);
+ secp256k1_ecdsa_signature_load(ctx, &r, &s, &sig);
+ /* Note that we compute expected_r *after* signing -- this is important
+ * because our nonce-computing function function might change k during
+ * signing. */
+ r_from_k(&expected_r, group, k);
+ CHECK(r == expected_r);
+ CHECK((k * s) % order == (i + r * j) % order ||
+ (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order);
+
+ /* Overflow means we've tried every possible nonce */
+ if (k < starting_k) {
+ break;
+ }
+ }
+ }
+ }
+}
+
+void test_exhaustive_recovery_verify(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
+ /* This is essentially a copy of test_exhaustive_verify, with recovery added */
+ int s, r, msg, key;
+ for (s = 1; s < order; s++) {
+ for (r = 1; r < order; r++) {
+ for (msg = 1; msg < order; msg++) {
+ for (key = 1; key < order; key++) {
+ secp256k1_ge nonconst_ge;
+ secp256k1_ecdsa_recoverable_signature rsig;
+ secp256k1_ecdsa_signature sig;
+ secp256k1_pubkey pk;
+ secp256k1_scalar sk_s, msg_s, r_s, s_s;
+ secp256k1_scalar s_times_k_s, msg_plus_r_times_sk_s;
+ int recid = 0;
+ int k, should_verify;
+ unsigned char msg32[32];
+
+ secp256k1_scalar_set_int(&s_s, s);
+ secp256k1_scalar_set_int(&r_s, r);
+ secp256k1_scalar_set_int(&msg_s, msg);
+ secp256k1_scalar_set_int(&sk_s, key);
+ secp256k1_scalar_get_b32(msg32, &msg_s);
+
+ /* Verify by hand */
+ /* Run through every k value that gives us this r and check that *one* works.
+ * Note there could be none, there could be multiple, ECDSA is weird. */
+ should_verify = 0;
+ for (k = 0; k < order; k++) {
+ secp256k1_scalar check_x_s;
+ r_from_k(&check_x_s, group, k);
+ if (r_s == check_x_s) {
+ secp256k1_scalar_set_int(&s_times_k_s, k);
+ secp256k1_scalar_mul(&s_times_k_s, &s_times_k_s, &s_s);
+ secp256k1_scalar_mul(&msg_plus_r_times_sk_s, &r_s, &sk_s);
+ secp256k1_scalar_add(&msg_plus_r_times_sk_s, &msg_plus_r_times_sk_s, &msg_s);
+ should_verify |= secp256k1_scalar_eq(&s_times_k_s, &msg_plus_r_times_sk_s);
+ }
+ }
+ /* nb we have a "high s" rule */
+ should_verify &= !secp256k1_scalar_is_high(&s_s);
+
+ /* We would like to try recovering the pubkey and checking that it matches,
+ * but pubkey recovery is impossible in the exhaustive tests (the reason
+ * being that there are 12 nonzero r values, 12 nonzero points, and no
+ * overlap between the sets, so there are no valid signatures). */
+
+ /* Verify by converting to a standard signature and calling verify */
+ secp256k1_ecdsa_recoverable_signature_save(&rsig, &r_s, &s_s, recid);
+ secp256k1_ecdsa_recoverable_signature_convert(ctx, &sig, &rsig);
+ memcpy(&nonconst_ge, &group[sk_s], sizeof(nonconst_ge));
+ secp256k1_pubkey_save(&pk, &nonconst_ge);
+ CHECK(should_verify ==
+ secp256k1_ecdsa_verify(ctx, &sig, msg32, &pk));
+ }
+ }
+ }
+ }
+}
+#endif
+
+int main(void) {
+ int i;
+ secp256k1_gej groupj[EXHAUSTIVE_TEST_ORDER];
+ secp256k1_ge group[EXHAUSTIVE_TEST_ORDER];
+
+ /* Build context */
+ secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+
+ /* TODO set z = 1, then do num_tests runs with random z values */
+
+ /* Generate the entire group */
+ secp256k1_gej_set_infinity(&groupj[0]);
+ secp256k1_ge_set_gej(&group[0], &groupj[0]);
+ for (i = 1; i < EXHAUSTIVE_TEST_ORDER; i++) {
+ /* Set a different random z-value for each Jacobian point */
+ secp256k1_fe z;
+ random_fe(&z);
+
+ secp256k1_gej_add_ge(&groupj[i], &groupj[i - 1], &secp256k1_ge_const_g);
+ secp256k1_ge_set_gej(&group[i], &groupj[i]);
+ secp256k1_gej_rescale(&groupj[i], &z);
+
+ /* Verify against ecmult_gen */
+ {
+ secp256k1_scalar scalar_i;
+ secp256k1_gej generatedj;
+ secp256k1_ge generated;
+
+ secp256k1_scalar_set_int(&scalar_i, i);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &generatedj, &scalar_i);
+ secp256k1_ge_set_gej(&generated, &generatedj);
+
+ CHECK(group[i].infinity == 0);
+ CHECK(generated.infinity == 0);
+ CHECK(secp256k1_fe_equal_var(&generated.x, &group[i].x));
+ CHECK(secp256k1_fe_equal_var(&generated.y, &group[i].y));
+ }
+ }
+
+ /* Run the tests */
+#ifdef USE_ENDOMORPHISM
+ test_exhaustive_endomorphism(group, EXHAUSTIVE_TEST_ORDER);
+#endif
+ test_exhaustive_addition(group, groupj, EXHAUSTIVE_TEST_ORDER);
+ test_exhaustive_ecmult(ctx, group, groupj, EXHAUSTIVE_TEST_ORDER);
+ test_exhaustive_sign(ctx, group, EXHAUSTIVE_TEST_ORDER);
+ test_exhaustive_verify(ctx, group, EXHAUSTIVE_TEST_ORDER);
+
+#ifdef ENABLE_MODULE_RECOVERY
+ test_exhaustive_recovery_sign(ctx, group, EXHAUSTIVE_TEST_ORDER);
+ test_exhaustive_recovery_verify(ctx, group, EXHAUSTIVE_TEST_ORDER);
+#endif
+
+ secp256k1_context_destroy(ctx);
+ return 0;
+}
+
diff --git a/crypto/secp256k1/libsecp256k1/src/util.h b/crypto/secp256k1/libsecp256k1/src/util.h
new file mode 100644
index 000000000..4092a86c9
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/util.h
@@ -0,0 +1,113 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_UTIL_H_
+#define _SECP256K1_UTIL_H_
+
+#if defined HAVE_CONFIG_H
+#include "libsecp256k1-config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+
+typedef struct {
+ void (*fn)(const char *text, void* data);
+ const void* data;
+} secp256k1_callback;
+
+static SECP256K1_INLINE void secp256k1_callback_call(const secp256k1_callback * const cb, const char * const text) {
+ cb->fn(text, (void*)cb->data);
+}
+
+#ifdef DETERMINISTIC
+#define TEST_FAILURE(msg) do { \
+ fprintf(stderr, "%s\n", msg); \
+ abort(); \
+} while(0);
+#else
+#define TEST_FAILURE(msg) do { \
+ fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, msg); \
+ abort(); \
+} while(0)
+#endif
+
+#ifdef HAVE_BUILTIN_EXPECT
+#define EXPECT(x,c) __builtin_expect((x),(c))
+#else
+#define EXPECT(x,c) (x)
+#endif
+
+#ifdef DETERMINISTIC
+#define CHECK(cond) do { \
+ if (EXPECT(!(cond), 0)) { \
+ TEST_FAILURE("test condition failed"); \
+ } \
+} while(0)
+#else
+#define CHECK(cond) do { \
+ if (EXPECT(!(cond), 0)) { \
+ TEST_FAILURE("test condition failed: " #cond); \
+ } \
+} while(0)
+#endif
+
+/* Like assert(), but when VERIFY is defined, and side-effect safe. */
+#if defined(COVERAGE)
+#define VERIFY_CHECK(check)
+#define VERIFY_SETUP(stmt)
+#elif defined(VERIFY)
+#define VERIFY_CHECK CHECK
+#define VERIFY_SETUP(stmt) do { stmt; } while(0)
+#else
+#define VERIFY_CHECK(cond) do { (void)(cond); } while(0)
+#define VERIFY_SETUP(stmt)
+#endif
+
+static SECP256K1_INLINE void *checked_malloc(const secp256k1_callback* cb, size_t size) {
+ void *ret = malloc(size);
+ if (ret == NULL) {
+ secp256k1_callback_call(cb, "Out of memory");
+ }
+ return ret;
+}
+
+/* Macro for restrict, when available and not in a VERIFY build. */
+#if defined(SECP256K1_BUILD) && defined(VERIFY)
+# define SECP256K1_RESTRICT
+#else
+# if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
+# if SECP256K1_GNUC_PREREQ(3,0)
+# define SECP256K1_RESTRICT __restrict__
+# elif (defined(_MSC_VER) && _MSC_VER >= 1400)
+# define SECP256K1_RESTRICT __restrict
+# else
+# define SECP256K1_RESTRICT
+# endif
+# else
+# define SECP256K1_RESTRICT restrict
+# endif
+#endif
+
+#if defined(_WIN32)
+# define I64FORMAT "I64d"
+# define I64uFORMAT "I64u"
+#else
+# define I64FORMAT "lld"
+# define I64uFORMAT "llu"
+#endif
+
+#if defined(HAVE___INT128)
+# if defined(__GNUC__)
+# define SECP256K1_GNUC_EXT __extension__
+# else
+# define SECP256K1_GNUC_EXT
+# endif
+SECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t;
+#endif
+
+#endif
diff --git a/crypto/secp256k1/panic_cb.go b/crypto/secp256k1/panic_cb.go
new file mode 100644
index 000000000..5da2bea37
--- /dev/null
+++ b/crypto/secp256k1/panic_cb.go
@@ -0,0 +1,24 @@
+// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+
+// +build !gofuzz
+// +build cgo
+
+package secp256k1
+
+import "C"
+import "unsafe"
+
+// Callbacks for converting libsecp256k1 internal faults into
+// recoverable Go panics.
+
+//export secp256k1GoPanicIllegal
+func secp256k1GoPanicIllegal(msg *C.char, data unsafe.Pointer) {
+ panic("illegal argument: " + C.GoString(msg))
+}
+
+//export secp256k1GoPanicError
+func secp256k1GoPanicError(msg *C.char, data unsafe.Pointer) {
+ panic("internal error: " + C.GoString(msg))
+}
diff --git a/crypto/secp256k1/scalar_mult_cgo.go b/crypto/secp256k1/scalar_mult_cgo.go
new file mode 100644
index 000000000..8e29d65b0
--- /dev/null
+++ b/crypto/secp256k1/scalar_mult_cgo.go
@@ -0,0 +1,58 @@
+// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+
+// +build !gofuzz
+// +build cgo
+
+package secp256k1
+
+import (
+ "math/big"
+ "unsafe"
+)
+
+/*
+
+#include "libsecp256k1/include/secp256k1.h"
+
+extern int secp256k1_ext_scalar_mul(const secp256k1_context* ctx, const unsigned char *point, const unsigned char *scalar);
+
+*/
+import "C"
+
+// ScalarMult func
+func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) {
+ // Ensure scalar is exactly 32 bytes. We pad always, even if
+ // scalar is 32 bytes long, to avoid a timing side channel.
+ if len(scalar) > 32 {
+ panic("can't handle scalars > 256 bits")
+ }
+ // NOTE: potential timing issue
+ padded := make([]byte, 32)
+ copy(padded[32-len(scalar):], scalar)
+ scalar = padded
+
+ // Do the multiplication in C, updating point.
+ point := make([]byte, 64)
+ readBits(Bx, point[:32])
+ readBits(By, point[32:])
+
+ pointPtr := (*C.uchar)(unsafe.Pointer(&point[0]))
+ scalarPtr := (*C.uchar)(unsafe.Pointer(&scalar[0]))
+ res := C.secp256k1_ext_scalar_mul(context, pointPtr, scalarPtr)
+
+ // Unpack the result and clear temporaries.
+ x := new(big.Int).SetBytes(point[:32])
+ y := new(big.Int).SetBytes(point[32:])
+ for i := range point {
+ point[i] = 0
+ }
+ for i := range padded {
+ scalar[i] = 0
+ }
+ if res != 1 {
+ return nil, nil
+ }
+ return x, y
+}
diff --git a/crypto/secp256k1/scalar_mult_nocgo.go b/crypto/secp256k1/scalar_mult_nocgo.go
new file mode 100644
index 000000000..55756b5be
--- /dev/null
+++ b/crypto/secp256k1/scalar_mult_nocgo.go
@@ -0,0 +1,13 @@
+// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+
+// +build gofuzz !cgo
+
+package secp256k1
+
+import "math/big"
+
+func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) {
+ panic("ScalarMult is not available when secp256k1 is built without cgo")
+}
diff --git a/crypto/secp256k1/secp256.go b/crypto/secp256k1/secp256.go
new file mode 100644
index 000000000..067b5e6c5
--- /dev/null
+++ b/crypto/secp256k1/secp256.go
@@ -0,0 +1,186 @@
+// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+
+// +build !gofuzz
+// +build cgo
+
+// Package secp256k1 wraps the bitcoin secp256k1 C library.
+package secp256k1
+
+/*
+#cgo CFLAGS: -I./libsecp256k1
+#cgo CFLAGS: -I./libsecp256k1/src/
+
+#ifdef __SIZEOF_INT128__
+# define HAVE___INT128
+# define USE_FIELD_5X52
+# define USE_SCALAR_4X64
+#else
+# define USE_FIELD_10X26
+# define USE_SCALAR_8X32
+#endif
+
+#define USE_ENDOMORPHISM
+#define USE_NUM_NONE
+#define USE_FIELD_INV_BUILTIN
+#define USE_SCALAR_INV_BUILTIN
+#define NDEBUG
+#include "./libsecp256k1/src/secp256k1.c"
+#include "./libsecp256k1/src/modules/recovery/main_impl.h"
+#include "ext.h"
+
+typedef void (*callbackFunc) (const char* msg, void* data);
+extern void secp256k1GoPanicIllegal(const char* msg, void* data);
+extern void secp256k1GoPanicError(const char* msg, void* data);
+*/
+import "C"
+
+import (
+ "errors"
+ "math/big"
+ "unsafe"
+)
+
+var context *C.secp256k1_context
+
+func init() {
+ // around 20 ms on a modern CPU.
+ context = C.secp256k1_context_create_sign_verify()
+ C.secp256k1_context_set_illegal_callback(context, C.callbackFunc(C.secp256k1GoPanicIllegal), nil)
+ C.secp256k1_context_set_error_callback(context, C.callbackFunc(C.secp256k1GoPanicError), nil)
+}
+
+var (
+ // ErrInvalidMsgLen message
+ ErrInvalidMsgLen = errors.New("invalid message length, need 32 bytes")
+ // ErrInvalidSignatureLen message
+ ErrInvalidSignatureLen = errors.New("invalid signature length")
+ // ErrInvalidRecoveryID message
+ ErrInvalidRecoveryID = errors.New("invalid signature recovery id")
+ // ErrInvalidKey message
+ ErrInvalidKey = errors.New("invalid private key")
+ // ErrInvalidPubkey message
+ ErrInvalidPubkey = errors.New("invalid public key")
+ // ErrSignFailed message
+ ErrSignFailed = errors.New("signing failed")
+ // ErrRecoverFailed message
+ ErrRecoverFailed = errors.New("recovery failed")
+)
+
+// Sign creates a recoverable ECDSA signature.
+// The produced signature is in the 65-byte [R || S || V] format where V is 0 or 1.
+//
+// The caller is responsible for ensuring that msg cannot be chosen
+// directly by an attacker. It is usually preferable to use a cryptographic
+// hash function on any input before handing it to this function.
+func Sign(msg []byte, seckey []byte) ([]byte, error) {
+ if len(msg) != 32 {
+ return nil, ErrInvalidMsgLen
+ }
+ if len(seckey) != 32 {
+ return nil, ErrInvalidKey
+ }
+ seckeydata := (*C.uchar)(unsafe.Pointer(&seckey[0]))
+ if C.secp256k1_ec_seckey_verify(context, seckeydata) != 1 {
+ return nil, ErrInvalidKey
+ }
+
+ var (
+ msgdata = (*C.uchar)(unsafe.Pointer(&msg[0]))
+ noncefunc = C.secp256k1_nonce_function_rfc6979
+ sigstruct C.secp256k1_ecdsa_recoverable_signature
+ )
+ if C.secp256k1_ecdsa_sign_recoverable(context, &sigstruct, msgdata, seckeydata, noncefunc, nil) == 0 {
+ return nil, ErrSignFailed
+ }
+
+ var (
+ sig = make([]byte, 65)
+ sigdata = (*C.uchar)(unsafe.Pointer(&sig[0]))
+ recid C.int
+ )
+ C.secp256k1_ecdsa_recoverable_signature_serialize_compact(context, sigdata, &recid, &sigstruct)
+ sig[64] = byte(recid) // add back recid to get 65 bytes sig
+ return sig, nil
+}
+
+// RecoverPubkey returns the public key of the signer.
+// msg must be the 32-byte hash of the message to be signed.
+// sig must be a 65-byte compact ECDSA signature containing the
+// recovery id as the last element.
+func RecoverPubkey(msg []byte, sig []byte) ([]byte, error) {
+ if len(msg) != 32 {
+ return nil, ErrInvalidMsgLen
+ }
+ if err := checkSignature(sig); err != nil {
+ return nil, err
+ }
+
+ var (
+ pubkey = make([]byte, 65)
+ sigdata = (*C.uchar)(unsafe.Pointer(&sig[0]))
+ msgdata = (*C.uchar)(unsafe.Pointer(&msg[0]))
+ )
+ if C.secp256k1_ext_ecdsa_recover(context, (*C.uchar)(unsafe.Pointer(&pubkey[0])), sigdata, msgdata) == 0 {
+ return nil, ErrRecoverFailed
+ }
+ return pubkey, nil
+}
+
+// VerifySignature checks that the given pubkey created signature over message.
+// The signature should be in [R || S] format.
+func VerifySignature(pubkey, msg, signature []byte) bool {
+ if len(msg) != 32 || len(signature) != 64 || len(pubkey) == 0 {
+ return false
+ }
+ sigdata := (*C.uchar)(unsafe.Pointer(&signature[0]))
+ msgdata := (*C.uchar)(unsafe.Pointer(&msg[0]))
+ keydata := (*C.uchar)(unsafe.Pointer(&pubkey[0]))
+ return C.secp256k1_ext_ecdsa_verify(context, sigdata, msgdata, keydata, C.size_t(len(pubkey))) != 0
+}
+
+// DecompressPubkey parses a public key in the 33-byte compressed format.
+// It returns non-nil coordinates if the public key is valid.
+func DecompressPubkey(pubkey []byte) (x, y *big.Int) {
+ if len(pubkey) != 33 {
+ return nil, nil
+ }
+ var (
+ pubkeydata = (*C.uchar)(unsafe.Pointer(&pubkey[0]))
+ pubkeylen = C.size_t(len(pubkey))
+ out = make([]byte, 65)
+ outdata = (*C.uchar)(unsafe.Pointer(&out[0]))
+ outlen = C.size_t(len(out))
+ )
+ if C.secp256k1_ext_reencode_pubkey(context, outdata, outlen, pubkeydata, pubkeylen) == 0 {
+ return nil, nil
+ }
+ return new(big.Int).SetBytes(out[1:33]), new(big.Int).SetBytes(out[33:])
+}
+
+// CompressPubkey encodes a public key to 33-byte compressed format.
+func CompressPubkey(x, y *big.Int) []byte {
+ var (
+ pubkey = S256().Marshal(x, y)
+ pubkeydata = (*C.uchar)(unsafe.Pointer(&pubkey[0]))
+ pubkeylen = C.size_t(len(pubkey))
+ out = make([]byte, 33)
+ outdata = (*C.uchar)(unsafe.Pointer(&out[0]))
+ outlen = C.size_t(len(out))
+ )
+ if C.secp256k1_ext_reencode_pubkey(context, outdata, outlen, pubkeydata, pubkeylen) == 0 {
+ panic("libsecp256k1 error")
+ }
+ return out
+}
+
+func checkSignature(sig []byte) error {
+ if len(sig) != 65 {
+ return ErrInvalidSignatureLen
+ }
+ if sig[64] >= 4 {
+ return ErrInvalidRecoveryID
+ }
+ return nil
+}
diff --git a/crypto/secp256k1/secp256_test.go b/crypto/secp256k1/secp256_test.go
new file mode 100644
index 000000000..ef2a3a379
--- /dev/null
+++ b/crypto/secp256k1/secp256_test.go
@@ -0,0 +1,238 @@
+// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+
+package secp256k1
+
+import (
+ "bytes"
+ "crypto/ecdsa"
+ "crypto/elliptic"
+ "crypto/rand"
+ "encoding/hex"
+ "io"
+ "testing"
+)
+
+const TestCount = 1000
+
+func generateKeyPair() (pubkey, privkey []byte) {
+ key, err := ecdsa.GenerateKey(S256(), rand.Reader)
+ if err != nil {
+ panic(err)
+ }
+ pubkey = elliptic.Marshal(S256(), key.X, key.Y)
+
+ privkey = make([]byte, 32)
+ blob := key.D.Bytes()
+ copy(privkey[32-len(blob):], blob)
+
+ return pubkey, privkey
+}
+
+func csprngEntropy(n int) []byte {
+ buf := make([]byte, n)
+ if _, err := io.ReadFull(rand.Reader, buf); err != nil {
+ panic("reading from crypto/rand failed: " + err.Error())
+ }
+ return buf
+}
+
+func randSig() []byte {
+ sig := csprngEntropy(65)
+ sig[32] &= 0x70
+ sig[64] %= 4
+ return sig
+}
+
+// tests for malleability
+// highest bit of signature ECDSA s value must be 0, in the 33th byte
+func compactSigCheck(t *testing.T, sig []byte) {
+ var b = int(sig[32])
+ if b < 0 {
+ t.Errorf("highest bit is negative: %d", b)
+ }
+ if ((b >> 7) == 1) != ((b & 0x80) == 0x80) {
+ t.Errorf("highest bit: %d bit >> 7: %d", b, b>>7)
+ }
+ if (b & 0x80) == 0x80 {
+ t.Errorf("highest bit: %d bit & 0x80: %d", b, b&0x80)
+ }
+}
+
+func TestSignatureValidity(t *testing.T) {
+ pubkey, seckey := generateKeyPair()
+ msg := csprngEntropy(32)
+ sig, err := Sign(msg, seckey)
+ if err != nil {
+ t.Errorf("signature error: %s", err)
+ }
+ compactSigCheck(t, sig)
+ if len(pubkey) != 65 {
+ t.Errorf("pubkey length mismatch: want: 65 have: %d", len(pubkey))
+ }
+ if len(seckey) != 32 {
+ t.Errorf("seckey length mismatch: want: 32 have: %d", len(seckey))
+ }
+ if len(sig) != 65 {
+ t.Errorf("sig length mismatch: want: 65 have: %d", len(sig))
+ }
+ recid := int(sig[64])
+ if recid > 4 || recid < 0 {
+ t.Errorf("sig recid mismatch: want: within 0 to 4 have: %d", int(sig[64]))
+ }
+}
+
+func TestInvalidRecoveryID(t *testing.T) {
+ _, seckey := generateKeyPair()
+ msg := csprngEntropy(32)
+ sig, _ := Sign(msg, seckey)
+ sig[64] = 99
+ _, err := RecoverPubkey(msg, sig)
+ if err != ErrInvalidRecoveryID {
+ t.Fatalf("got %q, want %q", err, ErrInvalidRecoveryID)
+ }
+}
+
+func TestSignAndRecover(t *testing.T) {
+ pubkey1, seckey := generateKeyPair()
+ msg := csprngEntropy(32)
+ sig, err := Sign(msg, seckey)
+ if err != nil {
+ t.Errorf("signature error: %s", err)
+ }
+ pubkey2, err := RecoverPubkey(msg, sig)
+ if err != nil {
+ t.Errorf("recover error: %s", err)
+ }
+ if !bytes.Equal(pubkey1, pubkey2) {
+ t.Errorf("pubkey mismatch: want: %x have: %x", pubkey1, pubkey2)
+ }
+}
+
+func TestSignDeterministic(t *testing.T) {
+ _, seckey := generateKeyPair()
+ msg := make([]byte, 32)
+ copy(msg, "hi there")
+
+ sig1, err := Sign(msg, seckey)
+ if err != nil {
+ t.Fatal(err)
+ }
+ sig2, err := Sign(msg, seckey)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(sig1, sig2) {
+ t.Fatal("signatures not equal")
+ }
+}
+
+func TestRandomMessagesWithSameKey(t *testing.T) {
+ pubkey, seckey := generateKeyPair()
+ keys := func() ([]byte, []byte) {
+ return pubkey, seckey
+ }
+ signAndRecoverWithRandomMessages(t, keys)
+}
+
+func TestRandomMessagesWithRandomKeys(t *testing.T) {
+ keys := func() ([]byte, []byte) {
+ pubkey, seckey := generateKeyPair()
+ return pubkey, seckey
+ }
+ signAndRecoverWithRandomMessages(t, keys)
+}
+
+func signAndRecoverWithRandomMessages(t *testing.T, keys func() ([]byte, []byte)) {
+ for i := 0; i < TestCount; i++ {
+ pubkey1, seckey := keys()
+ msg := csprngEntropy(32)
+ sig, err := Sign(msg, seckey)
+ if err != nil {
+ t.Fatalf("signature error: %s", err)
+ }
+ if sig == nil {
+ t.Fatal("signature is nil")
+ }
+ compactSigCheck(t, sig)
+
+ // TODO: why do we flip around the recovery id?
+ sig[len(sig)-1] %= 4
+
+ pubkey2, err := RecoverPubkey(msg, sig)
+ if err != nil {
+ t.Fatalf("recover error: %s", err)
+ }
+ if pubkey2 == nil {
+ t.Error("pubkey is nil")
+ }
+ if !bytes.Equal(pubkey1, pubkey2) {
+ t.Fatalf("pubkey mismatch: want: %x have: %x", pubkey1, pubkey2)
+ }
+ }
+}
+
+func TestRecoveryOfRandomSignature(t *testing.T) {
+ pubkey1, _ := generateKeyPair()
+ msg := csprngEntropy(32)
+
+ for i := 0; i < TestCount; i++ {
+ // recovery can sometimes work, but if so should always give wrong pubkey
+ pubkey2, _ := RecoverPubkey(msg, randSig())
+ if bytes.Equal(pubkey1, pubkey2) {
+ t.Fatalf("iteration: %d: pubkey mismatch: do NOT want %x: ", i, pubkey2)
+ }
+ }
+}
+
+func TestRandomMessagesAgainstValidSig(t *testing.T) {
+ pubkey1, seckey := generateKeyPair()
+ msg := csprngEntropy(32)
+ sig, _ := Sign(msg, seckey)
+
+ for i := 0; i < TestCount; i++ {
+ msg = csprngEntropy(32)
+ pubkey2, _ := RecoverPubkey(msg, sig)
+ // recovery can sometimes work, but if so should always give wrong pubkey
+ if bytes.Equal(pubkey1, pubkey2) {
+ t.Fatalf("iteration: %d: pubkey mismatch: do NOT want %x: ", i, pubkey2)
+ }
+ }
+}
+
+// Useful when the underlying libsecp256k1 API changes to quickly
+// check only recover function without use of signature function
+func TestRecoverSanity(t *testing.T) {
+ msg, _ := hex.DecodeString("ce0677bb30baa8cf067c88db9811f4333d131bf8bcf12fe7065d211dce971008")
+ sig, _ := hex.DecodeString("90f27b8b488db00b00606796d2987f6a5f59ae62ea05effe84fef5b8b0e549984a691139ad57a3f0b906637673aa2f63d1f55cb1a69199d4009eea23ceaddc9301")
+ pubkey1, _ := hex.DecodeString("04e32df42865e97135acfb65f3bae71bdc86f4d49150ad6a440b6f15878109880a0a2b2667f7e725ceea70c673093bf67663e0312623c8e091b13cf2c0f11ef652")
+ pubkey2, err := RecoverPubkey(msg, sig)
+ if err != nil {
+ t.Fatalf("recover error: %s", err)
+ }
+ if !bytes.Equal(pubkey1, pubkey2) {
+ t.Errorf("pubkey mismatch: want: %x have: %x", pubkey1, pubkey2)
+ }
+}
+
+func BenchmarkSign(b *testing.B) {
+ _, seckey := generateKeyPair()
+ msg := csprngEntropy(32)
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ Sign(msg, seckey)
+ }
+}
+
+func BenchmarkRecover(b *testing.B) {
+ msg := csprngEntropy(32)
+ _, seckey := generateKeyPair()
+ sig, _ := Sign(msg, seckey)
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ RecoverPubkey(msg, sig)
+ }
+}
diff --git a/crypto/util_test.go b/crypto/util_test.go
index 3cdba9e9c..0488dcadb 100644
--- a/crypto/util_test.go
+++ b/crypto/util_test.go
@@ -19,10 +19,12 @@ package crypto
import (
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestEncodeDecode(t *testing.T) {
+ partitiontest.PartitionTest(t)
toBeHashed := []byte("this is a test")
hashed := Hash(toBeHashed)
hashedStr := hashed.String()
@@ -33,6 +35,7 @@ func TestEncodeDecode(t *testing.T) {
}
func TestDigest_IsZero(t *testing.T) {
+ partitiontest.PartitionTest(t)
d := Digest{}
require.True(t, d.IsZero())
require.Zero(t, d)
diff --git a/crypto/vrf_test.go b/crypto/vrf_test.go
index dc91653e7..42e8dc7cc 100644
--- a/crypto/vrf_test.go
+++ b/crypto/vrf_test.go
@@ -20,6 +20,8 @@ import (
"crypto/rand"
"encoding/hex"
"testing"
+
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func mustDecode(t *testing.T, out []byte, hexIn string) {
@@ -72,6 +74,7 @@ func testVector(t *testing.T, skHex, pkHex, alphaHex, piHex, betaHex string) {
// ECVRF-ED25519-SHA512-Elligator2 test vectors from: https://www.ietf.org/id/draft-irtf-cfrg-vrf-03.txt appendix A.4
func TestVRFTestVectors(t *testing.T) {
+ partitiontest.PartitionTest(t)
testVector(t,
"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60", //sk
"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a", //pk
diff --git a/daemon/algod/api/algod.oas2.json b/daemon/algod/api/algod.oas2.json
index fa39bf77a..46e15396f 100644
--- a/daemon/algod/api/algod.oas2.json
+++ b/daemon/algod/api/algod.oas2.json
@@ -811,7 +811,10 @@
],
"responses": {
"200": {
- "$ref": "#/responses/PendingTransactionResponse"
+ "description": "Given a transaction id of a recently submitted transaction, it returns information about it. There are several cases when this might succeed:\n- transaction committed (committed round \u003e 0)\n- transaction still in the pool (committed round = 0, pool error = \"\")\n- transaction removed from pool due to error (committed round = 0, pool error != \"\")\n\nOr the transaction may have happened sufficiently long ago that the node no longer remembers it, and this will return an error.",
+ "schema": {
+ "$ref": "#/definitions/PendingTransactionResponse"
+ }
},
"400": {
"description": "Bad Request",
@@ -1748,8 +1751,13 @@
"logs": {
"type": "array",
"items": {
- "$ref": "#/definitions/LogItem"
+ "type": "string",
+ "format": "byte"
}
+ },
+ "cost": {
+ "description": "Execution cost of app call transaction",
+ "type": "integer"
}
}
},
@@ -1917,21 +1925,80 @@
}
}
},
- "LogItem": {
- "description": "Application Log",
+ "PendingTransactionResponse": {
+ "description": "Details about a pending transaction. If the transaction was recently confirmed, includes confirmation details like the round and reward details.",
"type": "object",
"required": [
- "id",
- "value"
+ "txn",
+ "pool-error"
],
"properties": {
- "id": {
- "description": "unique application identifier",
+ "asset-index": {
+ "description": "The asset index if the transaction was found and it created an asset.",
+ "type": "integer"
+ },
+ "application-index": {
+ "description": "The application index if the transaction was found and it created an application.",
"type": "integer"
},
- "value": {
- "description": " base64 encoded log message",
+ "close-rewards": {
+ "description": "Rewards in microalgos applied to the close remainder to account.",
+ "type": "integer"
+ },
+ "closing-amount": {
+ "description": "Closing amount for the transaction.",
+ "type": "integer"
+ },
+ "asset-closing-amount": {
+ "description": "The number of the asset's unit that were transferred to the close-to address.",
+ "type": "integer"
+ },
+ "confirmed-round": {
+ "description": "The round where this transaction was confirmed, if present.",
+ "type": "integer"
+ },
+ "pool-error": {
+ "description": "Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.\n",
"type": "string"
+ },
+ "receiver-rewards": {
+ "description": "Rewards in microalgos applied to the receiver account.",
+ "type": "integer"
+ },
+ "sender-rewards": {
+ "description": "Rewards in microalgos applied to the sender account.",
+ "type": "integer"
+ },
+ "local-state-delta": {
+ "description": "\\[ld\\] Local state key/value changes for the application being executed by this transaction.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AccountStateDelta"
+ }
+ },
+ "global-state-delta": {
+ "description": "\\[gd\\] Global state key/value changes for the application being executed by this transaction.",
+ "$ref": "#/definitions/StateDelta"
+ },
+ "logs": {
+ "description": "\\[lg\\] Logs for the application being executed by this transaction.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "byte"
+ }
+ },
+ "inner-txns": {
+ "description": "Inner transactions produced by application execution.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PendingTransactionResponse"
+ }
+ },
+ "txn": {
+ "description": "The raw signed transaction.",
+ "type": "object",
+ "x-algorand-format": "SignedTransaction"
}
}
}
@@ -2274,78 +2341,6 @@
}
}
},
- "PendingTransactionResponse": {
- "description": "Given a transaction id of a recently submitted transaction, it returns information about it. There are several cases when this might succeed:\n- transaction committed (committed round \u003e 0)\n- transaction still in the pool (committed round = 0, pool error = \"\")\n- transaction removed from pool due to error (committed round = 0, pool error != \"\")\n\nOr the transaction may have happened sufficiently long ago that the node no longer remembers it, and this will return an error.",
- "schema": {
- "description": "Details about a pending transaction. If the transaction was recently confirmed, includes confirmation details like the round and reward details.",
- "type": "object",
- "required": [
- "txn",
- "pool-error"
- ],
- "properties": {
- "asset-index": {
- "description": "The asset index if the transaction was found and it created an asset.",
- "type": "integer"
- },
- "application-index": {
- "description": "The application index if the transaction was found and it created an application.",
- "type": "integer"
- },
- "close-rewards": {
- "description": "Rewards in microalgos applied to the close remainder to account.",
- "type": "integer"
- },
- "closing-amount": {
- "description": "Closing amount for the transaction.",
- "type": "integer"
- },
- "asset-closing-amount": {
- "description": "The number of the asset's unit that were transferred to the close-to address.",
- "type": "integer"
- },
- "confirmed-round": {
- "description": "The round where this transaction was confirmed, if present.",
- "type": "integer"
- },
- "pool-error": {
- "description": "Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.\n",
- "type": "string"
- },
- "receiver-rewards": {
- "description": "Rewards in microalgos applied to the receiver account.",
- "type": "integer"
- },
- "sender-rewards": {
- "description": "Rewards in microalgos applied to the sender account.",
- "type": "integer"
- },
- "local-state-delta": {
- "description": "\\[ld\\] Local state key/value changes for the application being executed by this transaction.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/AccountStateDelta"
- }
- },
- "global-state-delta": {
- "description": "\\[gd\\] Global state key/value changes for the application being executed by this transaction.",
- "$ref": "#/definitions/StateDelta"
- },
- "logs": {
- "description": "\\[lg\\] Logs for the application being executed by this transaction.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/LogItem"
- }
- },
- "txn": {
- "description": "The raw signed transaction.",
- "type": "object",
- "x-algorand-format": "SignedTransaction"
- }
- }
- }
- },
"PendingTransactionsResponse": {
"description": "A potentially truncated list of transactions currently in the node's transaction pool. You can compute whether or not the list is truncated if the number of elements in the **top-transactions** array is fewer than **total-transactions**.",
"schema": {
diff --git a/daemon/algod/api/algod.oas3.yml b/daemon/algod/api/algod.oas3.yml
index 46e157c13..423b23180 100644
--- a/daemon/algod/api/algod.oas3.yml
+++ b/daemon/algod/api/algod.oas3.yml
@@ -453,82 +453,6 @@
}
}
},
- "PendingTransactionResponse": {
- "content": {
- "application/json": {
- "schema": {
- "description": "Details about a pending transaction. If the transaction was recently confirmed, includes confirmation details like the round and reward details.",
- "properties": {
- "application-index": {
- "description": "The application index if the transaction was found and it created an application.",
- "type": "integer"
- },
- "asset-closing-amount": {
- "description": "The number of the asset's unit that were transferred to the close-to address.",
- "type": "integer"
- },
- "asset-index": {
- "description": "The asset index if the transaction was found and it created an asset.",
- "type": "integer"
- },
- "close-rewards": {
- "description": "Rewards in microalgos applied to the close remainder to account.",
- "type": "integer"
- },
- "closing-amount": {
- "description": "Closing amount for the transaction.",
- "type": "integer"
- },
- "confirmed-round": {
- "description": "The round where this transaction was confirmed, if present.",
- "type": "integer"
- },
- "global-state-delta": {
- "$ref": "#/components/schemas/StateDelta"
- },
- "local-state-delta": {
- "description": "\\[ld\\] Local state key/value changes for the application being executed by this transaction.",
- "items": {
- "$ref": "#/components/schemas/AccountStateDelta"
- },
- "type": "array"
- },
- "logs": {
- "description": "\\[lg\\] Logs for the application being executed by this transaction.",
- "items": {
- "$ref": "#/components/schemas/LogItem"
- },
- "type": "array"
- },
- "pool-error": {
- "description": "Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.\n",
- "type": "string"
- },
- "receiver-rewards": {
- "description": "Rewards in microalgos applied to the receiver account.",
- "type": "integer"
- },
- "sender-rewards": {
- "description": "Rewards in microalgos applied to the sender account.",
- "type": "integer"
- },
- "txn": {
- "description": "The raw signed transaction.",
- "properties": {},
- "type": "object",
- "x-algorand-format": "SignedTransaction"
- }
- },
- "required": [
- "pool-error",
- "txn"
- ],
- "type": "object"
- }
- }
- },
- "description": "Given a transaction id of a recently submitted transaction, it returns information about it. There are several cases when this might succeed:\n- transaction committed (committed round > 0)\n- transaction still in the pool (committed round = 0, pool error = \"\")\n- transaction removed from pool due to error (committed round = 0, pool error != \"\")\n\nOr the transaction may have happened sufficiently long ago that the node no longer remembers it, and this will return an error."
- },
"PendingTransactionsResponse": {
"content": {
"application/json": {
@@ -1247,6 +1171,10 @@
},
"type": "array"
},
+ "cost": {
+ "description": "Execution cost of app call transaction",
+ "type": "integer"
+ },
"disassembly": {
"description": "Disassembled program line by line.",
"items": {
@@ -1277,7 +1205,9 @@
},
"logs": {
"items": {
- "$ref": "#/components/schemas/LogItem"
+ "format": "byte",
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
+ "type": "string"
},
"type": "array"
}
@@ -1340,21 +1270,81 @@
],
"type": "object"
},
- "LogItem": {
- "description": "Application Log",
+ "PendingTransactionResponse": {
+ "description": "Details about a pending transaction. If the transaction was recently confirmed, includes confirmation details like the round and reward details.",
"properties": {
- "id": {
- "description": "unique application identifier",
+ "application-index": {
+ "description": "The application index if the transaction was found and it created an application.",
"type": "integer"
},
- "value": {
- "description": " base64 encoded log message",
+ "asset-closing-amount": {
+ "description": "The number of the asset's unit that were transferred to the close-to address.",
+ "type": "integer"
+ },
+ "asset-index": {
+ "description": "The asset index if the transaction was found and it created an asset.",
+ "type": "integer"
+ },
+ "close-rewards": {
+ "description": "Rewards in microalgos applied to the close remainder to account.",
+ "type": "integer"
+ },
+ "closing-amount": {
+ "description": "Closing amount for the transaction.",
+ "type": "integer"
+ },
+ "confirmed-round": {
+ "description": "The round where this transaction was confirmed, if present.",
+ "type": "integer"
+ },
+ "global-state-delta": {
+ "$ref": "#/components/schemas/StateDelta"
+ },
+ "inner-txns": {
+ "description": "Inner transactions produced by application execution.",
+ "items": {
+ "$ref": "#/components/schemas/PendingTransactionResponse"
+ },
+ "type": "array"
+ },
+ "local-state-delta": {
+ "description": "\\[ld\\] Local state key/value changes for the application being executed by this transaction.",
+ "items": {
+ "$ref": "#/components/schemas/AccountStateDelta"
+ },
+ "type": "array"
+ },
+ "logs": {
+ "description": "\\[lg\\] Logs for the application being executed by this transaction.",
+ "items": {
+ "format": "byte",
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "pool-error": {
+ "description": "Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.\n",
"type": "string"
+ },
+ "receiver-rewards": {
+ "description": "Rewards in microalgos applied to the receiver account.",
+ "type": "integer"
+ },
+ "sender-rewards": {
+ "description": "Rewards in microalgos applied to the sender account.",
+ "type": "integer"
+ },
+ "txn": {
+ "description": "The raw signed transaction.",
+ "properties": {},
+ "type": "object",
+ "x-algorand-format": "SignedTransaction"
}
},
"required": [
- "id",
- "value"
+ "pool-error",
+ "txn"
],
"type": "object"
},
@@ -3335,144 +3325,12 @@
"content": {
"application/json": {
"schema": {
- "description": "Details about a pending transaction. If the transaction was recently confirmed, includes confirmation details like the round and reward details.",
- "properties": {
- "application-index": {
- "description": "The application index if the transaction was found and it created an application.",
- "type": "integer"
- },
- "asset-closing-amount": {
- "description": "The number of the asset's unit that were transferred to the close-to address.",
- "type": "integer"
- },
- "asset-index": {
- "description": "The asset index if the transaction was found and it created an asset.",
- "type": "integer"
- },
- "close-rewards": {
- "description": "Rewards in microalgos applied to the close remainder to account.",
- "type": "integer"
- },
- "closing-amount": {
- "description": "Closing amount for the transaction.",
- "type": "integer"
- },
- "confirmed-round": {
- "description": "The round where this transaction was confirmed, if present.",
- "type": "integer"
- },
- "global-state-delta": {
- "$ref": "#/components/schemas/StateDelta"
- },
- "local-state-delta": {
- "description": "\\[ld\\] Local state key/value changes for the application being executed by this transaction.",
- "items": {
- "$ref": "#/components/schemas/AccountStateDelta"
- },
- "type": "array"
- },
- "logs": {
- "description": "\\[lg\\] Logs for the application being executed by this transaction.",
- "items": {
- "$ref": "#/components/schemas/LogItem"
- },
- "type": "array"
- },
- "pool-error": {
- "description": "Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.\n",
- "type": "string"
- },
- "receiver-rewards": {
- "description": "Rewards in microalgos applied to the receiver account.",
- "type": "integer"
- },
- "sender-rewards": {
- "description": "Rewards in microalgos applied to the sender account.",
- "type": "integer"
- },
- "txn": {
- "description": "The raw signed transaction.",
- "properties": {},
- "type": "object",
- "x-algorand-format": "SignedTransaction"
- }
- },
- "required": [
- "pool-error",
- "txn"
- ],
- "type": "object"
+ "$ref": "#/components/schemas/PendingTransactionResponse"
}
},
"application/msgpack": {
"schema": {
- "description": "Details about a pending transaction. If the transaction was recently confirmed, includes confirmation details like the round and reward details.",
- "properties": {
- "application-index": {
- "description": "The application index if the transaction was found and it created an application.",
- "type": "integer"
- },
- "asset-closing-amount": {
- "description": "The number of the asset's unit that were transferred to the close-to address.",
- "type": "integer"
- },
- "asset-index": {
- "description": "The asset index if the transaction was found and it created an asset.",
- "type": "integer"
- },
- "close-rewards": {
- "description": "Rewards in microalgos applied to the close remainder to account.",
- "type": "integer"
- },
- "closing-amount": {
- "description": "Closing amount for the transaction.",
- "type": "integer"
- },
- "confirmed-round": {
- "description": "The round where this transaction was confirmed, if present.",
- "type": "integer"
- },
- "global-state-delta": {
- "$ref": "#/components/schemas/StateDelta"
- },
- "local-state-delta": {
- "description": "\\[ld\\] Local state key/value changes for the application being executed by this transaction.",
- "items": {
- "$ref": "#/components/schemas/AccountStateDelta"
- },
- "type": "array"
- },
- "logs": {
- "description": "\\[lg\\] Logs for the application being executed by this transaction.",
- "items": {
- "$ref": "#/components/schemas/LogItem"
- },
- "type": "array"
- },
- "pool-error": {
- "description": "Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.\n",
- "type": "string"
- },
- "receiver-rewards": {
- "description": "Rewards in microalgos applied to the receiver account.",
- "type": "integer"
- },
- "sender-rewards": {
- "description": "Rewards in microalgos applied to the sender account.",
- "type": "integer"
- },
- "txn": {
- "description": "The raw signed transaction.",
- "properties": {},
- "type": "object",
- "x-algorand-format": "SignedTransaction"
- }
- },
- "required": [
- "pool-error",
- "txn"
- ],
- "type": "object"
+ "$ref": "#/components/schemas/PendingTransactionResponse"
}
}
},
diff --git a/daemon/algod/api/client/restClient.go b/daemon/algod/api/client/restClient.go
index beab935e7..626bec0b7 100644
--- a/daemon/algod/api/client/restClient.go
+++ b/daemon/algod/api/client/restClient.go
@@ -328,6 +328,10 @@ func (client RestClient) LedgerSupply() (response v1.Supply, err error) {
return
}
+type pendingTransactionsByAddrParams struct {
+ Max uint64 `url:"max"`
+}
+
type transactionsByAddrParams struct {
FirstRound uint64 `url:"firstRound"`
LastRound uint64 `url:"lastRound"`
@@ -359,6 +363,12 @@ func (client RestClient) TransactionsByAddr(addr string, first, last, max uint64
return
}
+// PendingTransactionsByAddr returns all the pending transactions for a PK [addr].
+func (client RestClient) PendingTransactionsByAddr(addr string, max uint64) (response v1.PendingTransactions, err error) {
+ err = client.get(&response, fmt.Sprintf("/v1/account/%s/transactions/pending", addr), pendingTransactionsByAddrParams{max})
+ return
+}
+
// AssetInformation gets the AssetInformationResponse associated with the passed asset index
func (client RestClient) AssetInformation(index uint64) (response v1.AssetParams, err error) {
err = client.get(&response, fmt.Sprintf("/v1/asset/%d", index), nil)
diff --git a/daemon/algod/api/server/lib/middlewares/auth_test.go b/daemon/algod/api/server/lib/middlewares/auth_test.go
index 544875f37..b0dd0fe26 100644
--- a/daemon/algod/api/server/lib/middlewares/auth_test.go
+++ b/daemon/algod/api/server/lib/middlewares/auth_test.go
@@ -21,6 +21,7 @@ import (
"net/http"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/labstack/echo/v4"
"github.com/stretchr/testify/require"
)
@@ -36,6 +37,8 @@ func success(ctx echo.Context) error {
}
func TestAuth(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
tokens := []string{"token1", "token2"}
tests := []struct {
diff --git a/daemon/algod/api/server/router_test.go b/daemon/algod/api/server/router_test.go
index 3c0d8295a..7474165a9 100644
--- a/daemon/algod/api/server/router_test.go
+++ b/daemon/algod/api/server/router_test.go
@@ -56,14 +56,16 @@ func (s *TestSuite) SetupTest() {
s.calls = 0
}
func (s *TestSuite) TestBaselineRoute() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
s.e.Router().Find(http.MethodGet, "/v0/this/is/no/endpoint", ctx)
assert.Equal(s.T(), echo.ErrNotFound, ctx.Handler()(ctx))
assert.Equal(s.T(), 0, s.calls)
}
func (s *TestSuite) TestAccountPendingTransaction() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
s.e.Router().Find(http.MethodGet, "/v1/account/address-param/transactions/pending", ctx)
assert.Equal(s.T(), "/v1/account/:addr/transactions/pending", ctx.Path())
@@ -75,7 +77,8 @@ func (s *TestSuite) TestAccountPendingTransaction() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestWaitAfterBlock() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
s.e.Router().Find(http.MethodGet, "/v1/status/wait-for-block-after/123456", ctx)
assert.Equal(s.T(), "/v1/status/wait-for-block-after/:round", ctx.Path())
@@ -87,7 +90,8 @@ func (s *TestSuite) TestWaitAfterBlock() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestAccountInformation() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
s.e.Router().Find(http.MethodGet, "/v1/account/ZBBRQD73JH5KZ7XRED6GALJYJUXOMBBP3X2Z2XFA4LATV3MUJKKMKG7SHA", ctx)
assert.Equal(s.T(), "/v1/account/:addr", ctx.Path())
@@ -99,7 +103,8 @@ func (s *TestSuite) TestAccountInformation() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestTransactionInformation() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
addr := "ZBBRQD73JH5KZ7XRED6GALJYJUXOMBBP3X2Z2XFA4LATV3MUJKKMKG7SHA"
txid := "ASPB5E72OT2UWSOCQGD5OPT3W4KV4LZZDL7L5MBCC3EBAIJCDHAA"
@@ -114,7 +119,8 @@ func (s *TestSuite) TestTransactionInformation() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestAccountTransaction() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
addr := "ZBBRQD73JH5KZ7XRED6GALJYJUXOMBBP3X2Z2XFA4LATV3MUJKKMKG7SHA"
s.e.Router().Find(http.MethodGet, "/v1/account/"+addr+"/transactions", ctx)
@@ -127,7 +133,8 @@ func (s *TestSuite) TestAccountTransaction() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestBlock() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
s.e.Router().Find(http.MethodGet, "/v1/block/123456", ctx)
assert.Equal(s.T(), "/v1/block/:round", ctx.Path())
@@ -139,7 +146,8 @@ func (s *TestSuite) TestBlock() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestPendingTransactionID() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
txid := "ASPB5E72OT2UWSOCQGD5OPT3W4KV4LZZDL7L5MBCC3EBAIJCDHAA"
s.e.Router().Find(http.MethodGet, "/v1/transactions/pending/"+txid, ctx)
@@ -152,7 +160,8 @@ func (s *TestSuite) TestPendingTransactionID() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestPendingTransactionInformationByAddress() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
addr := "ZBBRQD73JH5KZ7XRED6GALJYJUXOMBBP3X2Z2XFA4LATV3MUJKKMKG7SHA"
s.e.Router().Find(http.MethodGet, "/v1/account/"+addr+"/transactions/pending", ctx)
@@ -165,7 +174,8 @@ func (s *TestSuite) TestPendingTransactionInformationByAddress() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestGetAsset() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
s.e.Router().Find(http.MethodGet, "/v1/asset/123456", ctx)
assert.Equal(s.T(), "/v1/asset/:index", ctx.Path())
@@ -177,7 +187,8 @@ func (s *TestSuite) TestGetAsset() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func (s *TestSuite) TestGetTransactionByID() {
- partitiontest.PartitionTest(s.T())
+ // partitiontest.PartitionTest(s.T())
+ // Partitioning in TestTestSuite()
ctx := s.e.NewContext(nil, nil)
txid := "ASPB5E72OT2UWSOCQGD5OPT3W4KV4LZZDL7L5MBCC3EBAIJCDHAA"
s.e.Router().Find(http.MethodGet, "/v1/transaction/"+txid, ctx)
@@ -190,5 +201,6 @@ func (s *TestSuite) TestGetTransactionByID() {
assert.Equal(s.T(), callsBefore+1, s.calls)
}
func TestTestSuite(t *testing.T) {
+ partitiontest.PartitionTest(t)
suite.Run(t, new(TestSuite))
}
diff --git a/daemon/algod/api/server/v1/handlers/handlers.go b/daemon/algod/api/server/v1/handlers/handlers.go
index f956fb417..0384e887e 100644
--- a/daemon/algod/api/server/v1/handlers/handlers.go
+++ b/daemon/algod/api/server/v1/handlers/handlers.go
@@ -395,7 +395,7 @@ func computeCreatableIndexInPayset(tx node.TxnWithStatus, txnCounter uint64, pay
// computeAssetIndexFromTxn returns the created asset index given a confirmed
// transaction whose confirmation block is available in the ledger. Note that
// 0 is an invalid asset index (they start at 1).
-func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx uint64) {
+func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) uint64 {
// Must have ledger
if l == nil {
return 0
@@ -413,6 +413,15 @@ func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx uint6
return 0
}
+ aidx := uint64(tx.ApplyData.ConfigAsset)
+ if aidx > 0 {
+ return aidx
+ }
+ // If there is no ConfigAsset in the ApplyData, it must be a
+ // transaction before inner transactions were activated. Therefore
+ // the computeCreatableIndexInPayset function will work properly
+ // to deduce the aid. Proceed.
+
// Look up block where transaction was confirmed
blk, err := l.Block(tx.ConfirmedRound)
if err != nil {
@@ -430,7 +439,7 @@ func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx uint6
// computeAppIndexFromTxn returns the created app index given a confirmed
// transaction whose confirmation block is available in the ledger. Note that
// 0 is an invalid asset index (they start at 1).
-func computeAppIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx uint64) {
+func computeAppIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) uint64 {
// Must have ledger
if l == nil {
return 0
@@ -448,6 +457,15 @@ func computeAppIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx uint64)
return 0
}
+ aidx := uint64(tx.ApplyData.ApplicationID)
+ if aidx > 0 {
+ return aidx
+ }
+ // If there is no ApplicationID in the ApplyData, it must be a
+ // transaction before inner transactions were activated. Therefore
+ // the computeCreatableIndexInPayset function will work properly
+ // to deduce the aidx. Proceed.
+
// Look up block where transaction was confirmed
blk, err := l.Block(tx.ConfirmedRound)
if err != nil {
diff --git a/daemon/algod/api/server/v1/handlers/handlers_test.go b/daemon/algod/api/server/v1/handlers/handlers_test.go
index 861d1767d..8649efc4f 100644
--- a/daemon/algod/api/server/v1/handlers/handlers_test.go
+++ b/daemon/algod/api/server/v1/handlers/handlers_test.go
@@ -25,10 +25,12 @@ import (
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/node"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestDecorateUnknownTransactionTypeError(t *testing.T) {
+ partitiontest.PartitionTest(t)
type TestCase struct {
err error
txn node.TxnWithStatus
diff --git a/daemon/algod/api/server/v2/account.go b/daemon/algod/api/server/v2/account.go
index 018618265..2187a1068 100644
--- a/daemon/algod/api/server/v2/account.go
+++ b/daemon/algod/api/server/v2/account.go
@@ -105,7 +105,7 @@ func AccountDataToAccount(
amount := record.MicroAlgos
pendingRewards, overflowed := basics.OSubA(amount, amountWithoutPendingRewards)
if overflowed {
- return generated.Account{}, errors.New("overflow on pending reward calcuation")
+ return generated.Account{}, errors.New("overflow on pending reward calculation")
}
return generated.Account{
diff --git a/daemon/algod/api/server/v2/account_test.go b/daemon/algod/api/server/v2/account_test.go
index f9bc836fb..f7dd96d80 100644
--- a/daemon/algod/api/server/v2/account_test.go
+++ b/daemon/algod/api/server/v2/account_test.go
@@ -26,9 +26,11 @@ import (
"github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func TestAccount(t *testing.T) {
+ partitiontest.PartitionTest(t)
proto := config.Consensus[protocol.ConsensusFuture]
appIdx1 := basics.AppIndex(1)
appIdx2 := basics.AppIndex(2)
diff --git a/daemon/algod/api/server/v2/dryrun.go b/daemon/algod/api/server/v2/dryrun.go
index 5a76d6fd2..3677c4b28 100644
--- a/daemon/algod/api/server/v2/dryrun.go
+++ b/daemon/algod/api/server/v2/dryrun.go
@@ -87,7 +87,7 @@ func (dr *DryrunRequest) ExpandSources() error {
for i, s := range dr.Sources {
ops, err := logic.AssembleString(s.Source)
if err != nil {
- return fmt.Errorf("Dryrun Source[%d]: %v", i, err)
+ return fmt.Errorf("dryrun Source[%d]: %v", i, err)
}
switch s.FieldName {
case "lsig":
@@ -104,7 +104,7 @@ func (dr *DryrunRequest) ExpandSources() error {
}
}
default:
- return fmt.Errorf("Dryrun Source[%d]: bad field name %#v", i, s.FieldName)
+ return fmt.Errorf("dryrun Source[%d]: bad field name %#v", i, s.FieldName)
}
}
return nil
@@ -273,6 +273,9 @@ func (dl *dryrunLedger) LookupWithoutRewards(rnd basics.Round, addr basics.Addre
return basics.AccountData{}, 0, err
}
out.MicroAlgos.Raw = acct.AmountWithoutPendingRewards
+ // Clear RewardsBase since dryrun has no idea about rewards level so the underlying calculation with reward will fail.
+ // The amount needed is known as acct.Amount but this method must return AmountWithoutPendingRewards
+ out.RewardsBase = 0
}
appi, ok := dl.accountApps[addr]
if ok {
@@ -335,41 +338,6 @@ func (dl *dryrunLedger) GetCreatorForRound(rnd basics.Round, cidx basics.Creatab
return basics.Address{}, false, fmt.Errorf("unknown creatable type %d", ctype)
}
-func (dl *dryrunLedger) getAppParams(addr basics.Address, aidx basics.AppIndex) (params basics.AppParams, err error) {
- idx, ok := dl.accountApps[addr]
- if !ok {
- err = fmt.Errorf("addr %s is not know to dryrun", addr.String())
- return
- }
- if aidx != basics.AppIndex(dl.dr.Apps[idx].Id) {
- err = fmt.Errorf("creator addr %s does not match to app id %d", addr.String(), aidx)
- return
- }
- if params, err = ApplicationParamsToAppParams(&dl.dr.Apps[idx].Params); err != nil {
- return
- }
- return
-}
-
-func (dl *dryrunLedger) getLocalKV(addr basics.Address, aidx basics.AppIndex) (kv basics.TealKeyValue, err error) {
- idx, ok := dl.accountsIn[addr]
- if !ok {
- err = fmt.Errorf("addr %s is not know to dryrun", addr.String())
- return
- }
- var ad basics.AccountData
- if ad, err = AccountToAccountData(&dl.dr.Accounts[idx]); err != nil {
- return
- }
- loc, ok := ad.AppLocalStates[aidx]
- if !ok {
- err = fmt.Errorf("addr %s not opted in to app %d, cannot fetch state", addr.String(), aidx)
- return
- }
- kv = loc.KeyValue
- return
-}
-
func makeBalancesAdapter(dl *dryrunLedger, txn *transactions.Transaction, appIdx basics.AppIndex) (ba apply.Balances, err error) {
ba = ledger.MakeDebugBalances(dl, basics.Round(dl.dr.Round), protocol.ConsensusVersion(dl.dr.ProtocolVersion), dl.dr.LatestTimestamp)
@@ -397,16 +365,33 @@ func doDryrunRequest(dr *DryrunRequest, response *generated.DryrunResponse) {
return
}
proto := config.Consensus[protocol.ConsensusVersion(dr.ProtocolVersion)]
+ origEnableAppCostPooling := proto.EnableAppCostPooling
+ // Enable EnableAppCostPooling so that dryrun
+ // 1) can determine cost 2) reports actual cost for large programs that fail
+ proto.EnableAppCostPooling = true
+
+ // allow a huge execution budget
+ maxCurrentBudget := uint64(proto.MaxAppProgramCost * 100)
+ pooledAppBudget := maxCurrentBudget
+ allowedBudget := uint64(0)
+ cumulativeCost := uint64(0)
+ for _, stxn := range dr.Txns {
+ if stxn.Txn.Type == protocol.ApplicationCallTx {
+ allowedBudget += uint64(proto.MaxAppProgramCost)
+ }
+ }
response.Txns = make([]generated.DryrunTxnResult, len(dr.Txns))
for ti, stxn := range dr.Txns {
pse := logic.MakePastSideEffects(len(dr.Txns))
ep := logic.EvalParams{
- Txn: &stxn,
- Proto: &proto,
- TxnGroup: dr.Txns,
- GroupIndex: ti,
- PastSideEffects: pse,
+ Txn: &stxn,
+ Proto: &proto,
+ TxnGroup: dr.Txns,
+ GroupIndex: uint64(ti),
+ PastSideEffects: pse,
+ PooledApplicationBudget: &pooledAppBudget,
+ Specials: &transactions.SpecialAddresses{},
}
var result generated.DryrunTxnResult
if len(stxn.Lsig.Logic) > 0 {
@@ -522,8 +507,25 @@ func doDryrunRequest(dr *DryrunRequest, response *generated.DryrunResponse) {
result.LocalDeltas = &localDeltas
}
+ // ensure the program has not exceeded execution budget
+ cost := maxCurrentBudget - pooledAppBudget
+ if pass {
+ if !origEnableAppCostPooling {
+ if cost > uint64(proto.MaxAppProgramCost) {
+ pass = false
+ err = fmt.Errorf("cost budget exceeded: budget is %d but program cost was %d", proto.MaxAppProgramCost, cost)
+ }
+ } else if cumulativeCost+cost > allowedBudget {
+ pass = false
+ err = fmt.Errorf("cost budget exceeded: budget is %d but program cost was %d", allowedBudget-cumulativeCost, cost)
+ }
+ }
+ result.Cost = &cost
+ maxCurrentBudget = pooledAppBudget
+ cumulativeCost += cost
+
var err3 error
- result.Logs, err3 = DeltaLogToLog(delta.Logs, appIdx)
+ result.Logs, err3 = DeltaLogToLog(delta.Logs)
if err3 != nil {
messages = append(messages, err3.Error())
}
@@ -570,20 +572,16 @@ func StateDeltaToStateDelta(sd basics.StateDelta) *generated.StateDelta {
return &gsd
}
-// DeltaLogToLog EvalDelta.Logs to generated.LogItem
-func DeltaLogToLog(logs []basics.LogItem, appIdx basics.AppIndex) (*[]generated.LogItem, error) {
+// DeltaLogToLog base64 encode the logs
+func DeltaLogToLog(logs []string) (*[][]byte, error) {
if len(logs) == 0 {
return nil, nil
}
- encodedLogs := make([]generated.LogItem, 0, len(logs))
- for _, log := range logs {
- if log.ID != 0 {
- return nil, fmt.Errorf("logging for a foreign app is not supported")
- }
- msg := base64.StdEncoding.EncodeToString([]byte(log.Message))
- encodedLogs = append(encodedLogs, generated.LogItem{Id: uint64(appIdx), Value: msg})
+ logsAsBytes := make([][]byte, len(logs))
+ for i, log := range logs {
+ logsAsBytes[i] = []byte(log)
}
- return &encodedLogs, nil
+ return &logsAsBytes, nil
}
// MergeAppParams merges values, existing in "base" take priority over new in "update"
diff --git a/daemon/algod/api/server/v2/dryrun_test.go b/daemon/algod/api/server/v2/dryrun_test.go
index c926934dd..abb28143d 100644
--- a/daemon/algod/api/server/v2/dryrun_test.go
+++ b/daemon/algod/api/server/v2/dryrun_test.go
@@ -34,6 +34,7 @@ import (
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func unB64(x string) []byte {
@@ -126,9 +127,11 @@ func logResponse(t *testing.T, response *generated.DryrunResponse) {
}
}
-var dryrunProtoVersion protocol.ConsensusVersion = "dryrunTestProto"
+var dryrunProtoVersion protocol.ConsensusVersion = protocol.ConsensusFuture
+var dryrunMakeLedgerProto protocol.ConsensusVersion = "dryrunMakeLedgerProto"
func TestDryrunLogicSig(t *testing.T) {
+ partitiontest.PartitionTest(t)
// {"txns":[{"lsig":{"l":"AiABASI="},"txn":{}}]}
t.Parallel()
@@ -153,6 +156,7 @@ func TestDryrunLogicSig(t *testing.T) {
}
func TestDryrunLogicSigSource(t *testing.T) {
+ partitiontest.PartitionTest(t)
// {"txns":[{"lsig":{"l":"AiABASI="},"txn":{}}]}
t.Parallel()
@@ -353,7 +357,7 @@ func init() {
proto.MaxAppBytesValueLen = 64
proto.MaxAppSumKeyValueLens = 128
- config.Consensus[dryrunProtoVersion] = proto
+ config.Consensus[dryrunMakeLedgerProto] = proto
}
func checkLogicSigPass(t *testing.T, response *generated.DryrunResponse) {
@@ -384,6 +388,7 @@ func checkAppCallPass(t *testing.T, response *generated.DryrunResponse) {
}
func TestDryrunGlobal1(t *testing.T) {
+ partitiontest.PartitionTest(t)
// {"txns":[{"lsig":{"l":"AiABASI="},"txn":{}}]}
t.Parallel()
@@ -432,6 +437,7 @@ func TestDryrunGlobal1(t *testing.T) {
}
func TestDryrunGlobal2(t *testing.T) {
+ partitiontest.PartitionTest(t)
// {"txns":[{"lsig":{"l":"AiABASI="},"txn":{}}]}
t.Parallel()
@@ -484,6 +490,7 @@ func TestDryrunGlobal2(t *testing.T) {
}
func TestDryrunLocal1(t *testing.T) {
+ partitiontest.PartitionTest(t)
// {"txns":[{"lsig":{"l":"AiABASI="},"txn":{}}]}
t.Parallel()
@@ -557,6 +564,7 @@ func TestDryrunLocal1(t *testing.T) {
}
func TestDryrunLocal1A(t *testing.T) {
+ partitiontest.PartitionTest(t)
// {"txns":[{"lsig":{"l":"AiABASI="},"txn":{}}]}
t.Parallel()
@@ -637,6 +645,7 @@ func TestDryrunLocal1A(t *testing.T) {
}
func TestDryrunLocalCheck(t *testing.T) {
+ partitiontest.PartitionTest(t)
// {"txns":[{"lsig":{"l":"AiABASI="},"txn":{}}]}
t.Parallel()
var dr DryrunRequest
@@ -691,6 +700,7 @@ func TestDryrunLocalCheck(t *testing.T) {
}
func TestDryrunMultipleTxns(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
var dr DryrunRequest
@@ -738,6 +748,7 @@ func TestDryrunMultipleTxns(t *testing.T) {
}
func TestDryrunEncodeDecode(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
var gdr generated.DryrunRequest
@@ -819,6 +830,7 @@ func TestDryrunEncodeDecode(t *testing.T) {
dr1, err := DryrunRequestFromGenerated(&gdr)
require.NoError(t, err)
encoded, err = encode(protocol.CodecHandle, &dr)
+ require.NoError(t, err)
encoded2 := protocol.EncodeReflect(&dr)
require.Equal(t, encoded, encoded2)
@@ -829,7 +841,6 @@ func TestDryrunEncodeDecode(t *testing.T) {
require.NoError(t, err)
require.Equal(t, dr1, dr2)
- dec = protocol.NewDecoder(buf)
dr2 = DryrunRequest{}
err = decode(protocol.CodecHandle, encoded, &dr2)
require.NoError(t, err)
@@ -842,6 +853,7 @@ func TestDryrunEncodeDecode(t *testing.T) {
}
func TestDryrunMakeLedger(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
var dr DryrunRequest
@@ -954,6 +966,7 @@ var dataJSON = []byte(`{
}`)
func TestDryrunRequestJSON(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
var gdr generated.DryrunRequest
@@ -980,6 +993,7 @@ func TestDryrunRequestJSON(t *testing.T) {
}
func TestStateDeltaToStateDelta(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
sd := basics.StateDelta{
"byteskey": {
@@ -1030,6 +1044,7 @@ func randomAddress() basics.Address {
}
func TestDryrunOptIn(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
ops, err := logic.AssembleString(`#pragma version 2
@@ -1093,6 +1108,7 @@ int 1`)
}
func TestDryrunLogs(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
ops, err := logic.AssembleString(`
@@ -1120,6 +1136,7 @@ return
require.NoError(t, err)
approval := ops.Program
ops, err = logic.AssembleString("int 1")
+ require.NoError(t, err)
clst := ops.Program
ops, err = logic.AssembleString("#pragma version 5 \nint 1")
approv := ops.Program
@@ -1191,7 +1208,7 @@ return
logs := *response.Txns[0].Logs
assert.Equal(t, 32, len(logs))
for i, m := range logs {
- assert.Equal(t, base64.StdEncoding.EncodeToString([]byte(string(rune('B'+i)))), m.Value)
+ assert.Equal(t, []byte(string(rune('B'+i))), m)
}
encoded := string(protocol.EncodeJSON(response.Txns[0]))
assert.Contains(t, encoded, "logs")
@@ -1201,3 +1218,270 @@ return
assert.NotContains(t, encoded, "logs")
}
+
+func TestDryrunCost(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ var tests = []struct {
+ msg string
+ numHashes int
+ }{
+ {"REJECT", 12},
+ {"PASS", 5},
+ }
+
+ for _, test := range tests {
+ t.Run(test.msg, func(t *testing.T) {
+ costs := make([]uint64, 2)
+
+ ops, err := logic.AssembleString("#pragma version 5\nbyte 0x41\n" + strings.Repeat("keccak256\n", test.numHashes) + "pop\nint 1\n")
+ require.NoError(t, err)
+ approval := ops.Program
+ costs[0] = 3 + uint64(test.numHashes)*130
+
+ ops, err = logic.AssembleString("int 1")
+ require.NoError(t, err)
+ clst := ops.Program
+
+ ops, err = logic.AssembleString("#pragma version 5 \nint 1 \nint 2 \npop")
+ require.NoError(t, err)
+ approv := ops.Program
+ costs[1] = 3
+
+ var appIdx basics.AppIndex = 1
+ creator := randomAddress()
+ sender := randomAddress()
+ dr := DryrunRequest{
+ Txns: []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Header: transactions.Header{Sender: sender},
+ Type: protocol.ApplicationCallTx,
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: appIdx,
+ OnCompletion: transactions.OptInOC,
+ },
+ },
+ },
+ {
+ Txn: transactions.Transaction{
+ Header: transactions.Header{Sender: sender},
+ Type: protocol.ApplicationCallTx,
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: appIdx + 1,
+ OnCompletion: transactions.OptInOC,
+ },
+ },
+ },
+ },
+ Apps: []generated.Application{
+ {
+ Id: uint64(appIdx),
+ Params: generated.ApplicationParams{
+ Creator: creator.String(),
+ ApprovalProgram: approval,
+ ClearStateProgram: clst,
+ LocalStateSchema: &generated.ApplicationStateSchema{NumByteSlice: 1},
+ },
+ },
+ {
+ Id: uint64(appIdx + 1),
+ Params: generated.ApplicationParams{
+ Creator: creator.String(),
+ ApprovalProgram: approv,
+ ClearStateProgram: clst,
+ LocalStateSchema: &generated.ApplicationStateSchema{NumByteSlice: 1},
+ },
+ },
+ },
+ Accounts: []generated.Account{
+ {
+ Address: sender.String(),
+ Status: "Online",
+ Amount: 10000000,
+ },
+ },
+ }
+ dr.ProtocolVersion = string(dryrunProtoVersion)
+ var response generated.DryrunResponse
+ doDryrunRequest(&dr, &response)
+ require.Empty(t, response.Error)
+ require.Equal(t, 2, len(response.Txns))
+
+ for i, txn := range response.Txns {
+ messages := *txn.AppCallMessages
+ require.GreaterOrEqual(t, len(messages), 1)
+ require.NotNil(t, *txn.Cost)
+ require.Equal(t, costs[i], *txn.Cost)
+ statusMatches := false
+ costExceedFound := false
+ for _, msg := range messages {
+ if strings.Contains(msg, "cost budget exceeded") {
+ costExceedFound = true
+ }
+ if msg == test.msg {
+ statusMatches = true
+ }
+ }
+ if test.msg == "REJECT" {
+ require.True(t, costExceedFound, "budget error not found in messages")
+ }
+ require.True(t, statusMatches, "expected status not found in messages")
+ }
+ })
+ }
+}
+
+func TestDebugTxSubmit(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ a := require.New(t)
+ source := `#pragma version 5
+itxn_begin
+int acfg
+itxn_field TypeEnum
+int 1000000
+itxn_field ConfigAssetTotal
+int 3
+itxn_field ConfigAssetDecimals
+byte "oz"
+itxn_field ConfigAssetUnitName
+byte "Gold"
+itxn_field ConfigAssetName
+byte "https://gold.rush/"
+itxn_field ConfigAssetURL
+byte 0x67f0cd61653bd34316160bc3f5cd3763c85b114d50d38e1f4e72c3b994411e7b
+itxn_field ConfigAssetMetadataHash
+itxn_submit
+int 1`
+
+ ops, err := logic.AssembleString(source)
+ require.NoError(t, err)
+ approval := ops.Program
+
+ ops, err = logic.AssembleString("int 1")
+ clst := ops.Program
+ require.NoError(t, err)
+
+ sender, err := basics.UnmarshalChecksumAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU")
+ a.NoError(err)
+ app, err := basics.UnmarshalChecksumAddress("6BPQU5WNZMTO4X72A2THZCGNJNTTE7YL6AWCYSUUTZEIYMJSEPJCQQ6DQI")
+ a.NoError(err)
+
+ // make balance records
+ appIdx := basics.AppIndex(100)
+ dr := DryrunRequest{
+ Txns: []transactions.SignedTxn{{
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: transactions.Header{
+ Sender: sender,
+ Fee: basics.MicroAlgos{Raw: 100},
+ Note: []byte{1, 2, 3},
+ },
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: appIdx,
+ },
+ },
+ }},
+ Apps: []generated.Application{
+ {
+ Id: uint64(appIdx),
+ Params: generated.ApplicationParams{
+ Creator: sender.String(),
+ ApprovalProgram: approval,
+ ClearStateProgram: clst,
+ },
+ },
+ },
+ Accounts: []generated.Account{
+ {
+ Address: sender.String(),
+ Status: "Online",
+ Amount: 10000000,
+ AmountWithoutPendingRewards: 10000000,
+ },
+ {
+ Address: app.String(),
+ Status: "Offline",
+ Amount: 10000000,
+ AmountWithoutPendingRewards: 10000000,
+ },
+ {
+ Address: basics.Address{}.String(),
+ Status: "Offline",
+ },
+ },
+ }
+
+ dr.ProtocolVersion = string(dryrunProtoVersion)
+
+ var response generated.DryrunResponse
+ doDryrunRequest(&dr, &response)
+ require.NoError(t, err)
+ checkAppCallPass(t, &response)
+ if t.Failed() {
+ logResponse(t, &response)
+ }
+}
+
+func TestDryrunBalanceWithReward(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ ops, err := logic.AssembleString(`#pragma version 5
+int 0
+balance
+int 0
+>`)
+ require.NoError(t, err)
+ approval := ops.Program
+ ops, err = logic.AssembleString("int 1")
+ clst := ops.Program
+ require.NoError(t, err)
+ var appIdx basics.AppIndex = 1
+ creator := randomAddress()
+ rewardBase := uint64(10000000)
+ dr := DryrunRequest{
+ Txns: []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Header: transactions.Header{Sender: creator},
+ Type: protocol.ApplicationCallTx,
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: appIdx,
+ },
+ },
+ },
+ },
+ Apps: []generated.Application{
+ {
+ Id: uint64(appIdx),
+ Params: generated.ApplicationParams{
+ Creator: creator.String(),
+ ApprovalProgram: approval,
+ ClearStateProgram: clst,
+ LocalStateSchema: &generated.ApplicationStateSchema{NumByteSlice: 1},
+ },
+ },
+ },
+ Accounts: []generated.Account{
+ {
+ Address: creator.String(),
+ Status: "Online",
+ Amount: 10000000,
+ AmountWithoutPendingRewards: 10000000,
+ RewardBase: &rewardBase,
+ },
+ },
+ }
+ dr.ProtocolVersion = string(dryrunProtoVersion)
+
+ var response generated.DryrunResponse
+ doDryrunRequest(&dr, &response)
+ require.NoError(t, err)
+ checkAppCallPass(t, &response)
+ if t.Failed() {
+ logResponse(t, &response)
+ }
+}
diff --git a/daemon/algod/api/server/v2/generated/private/routes.go b/daemon/algod/api/server/v2/generated/private/routes.go
index 6cebc1644..3e6a3591a 100644
--- a/daemon/algod/api/server/v2/generated/private/routes.go
+++ b/daemon/algod/api/server/v2/generated/private/routes.go
@@ -235,138 +235,136 @@ func RegisterHandlers(router interface {
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "H4sIAAAAAAAC/+x9/ZPbOK7gv8Lze1X5OMvufMzspqum3vUmmdm+yWRS6d69u5fOzdASbHNbIrUi1W1P",
- "rv/3K4CkREmU7f7Y7Jt676ekLRIEARAEARD8MklVUSoJ0ujJ8ZdJyStegIGK/uJpqmppEpHhXxnotBKl",
- "EUpOjv03pk0l5GoynQj8teRmPZlOJC+gbYP9p5MK/l6LCrLJsalqmE50uoaCI2CzLbF1A2mTrFTiQJxY",
- "EKdvJjc7PvAsq0DrIZY/y3zLhEzzOgNmKi41T/GTZtfCrJlZC81cZyYkUxKYWjKz7jRmSwF5pmd+kn+v",
- "odoGs3SDj0/ppkUxqVQOQzxfq2IhJHisoEGqYQgzimWwpEZrbhiOgLj6hkYxDbxK12ypqj2oWiRCfEHW",
- "xeT400SDzKAibqUgrui/ywrgN0gMr1ZgJp+nscktDVSJEUVkaqeO+hXoOjeaUVua40pcgWTYa8Z+qrVh",
- "C2Bcso/fv2YvXrx4hRMpuDGQOSEbnVU7ejgn231yPMm4Af95KGs8X6mKyyxp2n/8/jWNf+YmeGgrrjXE",
- "F8sJfmGnb8Ym4DtGREhIAyviQ0f6sUdkUbQ/L2CpKjiQJ7bxgzIlHP+fypWUm3RdKiFNhC+MvjL7OarD",
- "gu67dFiDQKd9iZSqEOino+TV5y/Pps+Obv7l00ny7+7Pb17cHDj91w3cPRSINkzrqgKZbpNVBZxWy5rL",
- "IT0+OnnQa1XnGVvzK2I+L0jVu74M+1rVecXzGuVEpJU6yVdKM+7EKIMlr3PD/MCsljmqKYTmpJ0JzcpK",
- "XYkMsilq3+u1SNcs5dqCoHbsWuQ5ymCtIRuTtfjsdiymm5AkiNed6EET+o9LjHZeeygBG9IGSZorDYlR",
- "e7Ynv+NwmbFwQ2n3Kn27zYqdr4HR4PjBbrZEO4kynedbZoivGeOacea3pikTS7ZVNbsm5uTikvq72SDV",
- "CoZEI+Z09lFcvGPkGxAjQryFUjlwScTz625IMrkUq7oCza7XYNZuz6tAl0pqYGrxN0gNsv1/nv38nqmK",
- "/QRa8xV84OklA5mqbJzHbtDYDv43rZDhhV6VPL2Mb9e5KEQE5Z/4RhR1wWRdLKBCfvn9wShWgakrOYaQ",
- "hbhHzgq+GQ56XtUyJea2w3YMNRQlocucb2fsdMkKvvnuaOrQ0YznOStBZkKumNnIUSMNx96PXlKpWmYH",
- "2DAGGRbsmrqEVCwFZKyBsgMTN8w+fIS8HT6tZRWg44GMotOMsgcdCZuIzODSxS+s5CsIRGbG/uI0F301",
- "6hJko+DYYkufygquhKp102kERxp6t3ktlYGkrGApIjJ25siB2sO2ceq1cAZOqqThQkKGmpeQVgasJhrF",
- "KRhw92FmuEUvuIZvX45t4O3XA7m/VH2u7+T4QdymRoldkpF9Eb+6BRs3mzr9Dzj8hWNrsUrszwNGitU5",
- "biVLkdM28zfknydDrUkJdAjhNx4tVpKbuoLjC/kU/2IJOzNcZrzK8JfC/vRTnRtxJlb4U25/eqdWIj0T",
- "qxFiNrhGT1PUrbD/ILy4Ojab6KHhnVKXdRlOKO2cShdbdvpmjMkW5m0F86Q5yoanivONP2nctofZNIwc",
- "QXKUdiXHhpewrQCx5emS/tksSZ74svoN/ynLPEZTFGC30ZJTwDkLPrrf8Cdc8mDPBAhFpByJOqft8/hL",
- "gNC/VrCcHE/+Zd56Sub2q547uDjizXRy0sJ5+JHannZ+vYNM+5kJablDTaf2TPjw+CDUKCZkqPZw+FOu",
- "0ss74VBWqoTKCMvHBcIZrhQCz9bAM6hYxg2ftYcqa2eNyDt1/DP1o1MSVJEt7mf6D88ZfsZVyI0339B0",
- "FRqNOBU4mjK0+Ow+YkfCBmSJKlZYI4+hcXYrLF+3g1sF3WjUT44sn/vQItx5a+1KRj38JHDq7anxZKGq",
- "u8lLTxAka8/CjCPUxvrFmXc5S03rMnH0idjTtkEPUOt+HKrVkEJ98DFadahwZvg/gAoaoT4EFbqAHpoK",
- "qihFDg+wXtdcr4eTQAPnxXN29ueTb549/+X5N9/iDl1WalXxgi22BjR77PYVps02hyfDmZGCr3MTh/7t",
- "S3+C6sLdSyFCuIF9yIo6B9QMlmLM+gsQuzfVtqrlA5AQqkpVEZuXRMeoVOXJFVRaqIj74oNrwVwL1EPW",
- "7u79brFl11wzHJuOY7XMoJrFKI/nLNrSDRR630ZhQZ9vZEsbB5BXFd8OOGDnG5mdG/cQnnSJ7617zUqo",
- "ErORLINFvQr3KLasVME4y6gjKcT3KoMzw02tH0ALtMBaZJARIQp8oWrDOJMqwwWNjeP6YcSXSU4U8v2Y",
- "UOWYtd1/FoDWccrr1dowNCtVjLVtx4SnlikJ7RV65OjXnNltKzuc9ZPlFfBsyxYAkqmFO1+5kx9NkpNb",
- "xviIi9NOLVrNmaCDV1mpFLSGLHHhpb2o+XaWy2YHnQhxQrgZhWnFlry6I7JGGZ7vQZTaxNBtzAl3KB1i",
- "fdjwuxjYHzxkI6/wjGmlAG0XXN05GBgj4YE0uYKKDmf/UP75Qe7KvrocCZ24HfhcFLh8meRSaUiVzHQU",
- "WM61SfYtW2zUMRNwBsFKia1UAjziIHjHtbFHdCEzMhmtuqFxqA8NMY7w6I6CkP/qN5Mh7BT1pNS1bnYW",
- "XZelqgxksTlI2OwY6z1smrHUMoDdbF9GsVrDPshjVArgO2LZmVgCceN8RI0Pazg5csfjPrCNkrKDREuI",
- "XYic+VYBdUP38QgieL5oepLgCN2TnMZnPZ1oo8oS159Jatn0GyPTmW19Yv7Sth0KFzetXs8U4OjG4+Qw",
- "v7aUtYGDNUfbjiCzgl/i3kSWmvUlDHHGxZhoIVNIdkk+LsszbBUugT2LdMRIdqHJYLTe4ujJb1ToRoVg",
- "DxfGJjxisX+wHvDz1jv0AEbLGzBc5LoxTBo3ezsKeeT72RJoRVaQgjT5FmV1KarCBrVoO9P+N2v2ZG4U",
- "G75pl5/MWAXXvMp8i+FpKZhMImQGm7h25R3fSAYbJuJIL5uRhWGpDznJEMAsutBtEC/NlRZyldjo4L5N",
- "rQnqPdKslsJtYNdQObyWULlt1/joWGKUj6DtwmMXKZxz5i5EwK7xYS1ylls6FkSlD7gQC5FWitvYKBK1",
- "N0FWQcERO4rSuW1/fMxdxH5tv/tQrXeRh7Ibh+vldVTDNCJ6vSZmoartEzGUejzagoaxiaxyteB5ggY/",
- "JBnkZq/rDQ8S8IZa4n6t0mH3LsoXF5/y7OLiM3uHbelsAewStnOKWLN0zeUK2jBCuF7sqQE2kNbh1tIj",
- "40EHQecr7WLfPQribFY6PoGVncDqH47nO7U6NVDEsCuVypPmQN4Pygw2w75UXIr0EjKG2pQUgNujH3Xl",
- "Bwdhj3EB6iZsdb3eegO3LEFC9mTG2IlkUJRm67w/PXusN7h8ZHaNv6FRs5oi6FwymuTsQsYdLzb+fs8V",
- "78HsXuc2Ie2eQ1kguwcyGzmy2Pk1hY8QXFR77PTdnlHPYGMe2BuBUFksDvFw/EBZWrzDZZHRYande3W9",
- "KASlagXNpqjXffR86H8QZsbYOWk2PP5puIKK55SHor1bW2hWiNUa7bs0BciOL2TSwSRVhRv4cftfqzQv",
- "6qOjF8COnvT7aIPGtDvp2jXQ7/sdO5raT0Qu9h27mFxMBpAqKNQVZPa0GMq17bUX7H9r4F7InwfbBiv4",
- "1p4z/Vpkul4uRSos0XOFu85K9WxiqegLVIgeoBGgmTBT2miJonSWsHxpF+Akats9hEcqAhVPEbjRo7bz",
- "MdOu7GgGG57iLDkpma21Vxo5G5poRpVJCCDqIN8xogtR6I72vuO6G+pz6x7Zjd95z0HSIUcgrrP9J4sB",
- "MaIYHLL8T1ipkOvCZUf5FJpcaDNA0jlLKD7VCGRk05mx/6NqlnJav2VtoDl5qoqOc3TMxxFoZ/VjOjuy",
- "pRDkUID1X9GXp0/7E3/61PFcaLaEa59SiA375Hj61C4Cpc29V0BPNDenEfOOwga4m0bSwNdcr2d7QwgE",
- "96DIQQD69I0fkBaT1rTF4MQrpZYPMFuRbaI2C2xiM3WcI2fgI81Kvh01/ktEMJJLBtVlTpEGtexJJHP6",
- "by1KBNnmvWwNdHJm/+/jfzv+dJL8O09+O0pe/ff55y8vb548Hfz4/Oa77/5f96cXN989+bd/jRkv2ohF",
- "PCr1Z67XiKnTHBt5Km1cGe1NcidunZdCLb823j0RQ2Z6ygdTOkToPsQYItCUIGaTzJ3VZZlvH2CTsYBY",
- "Be4EpDvOW22/qmWYMuskT2812uCD+Ift+svI2eyj950MpFTJXEhICiVhG70lIiT8RB+jtiGppZHOtEGM",
- "9e37ljr499DqjnMIM+9LX+J2oIY+NAm8D8D8Ptxe6CtMFqaTDeQl4yzNBTn2ldSmqlNzITm5Dnumd08s",
- "vEN03Jn82jeJe68jzmUH6kJyjTRsHIrRkOgSIqGC7wG8T1nXqxXoninOlgAX0rUSktxANBadZBLLsBIq",
- "il3PbEu0Ppc8J9/3b1AptqhNd7unnEZrTds4HA7D1PJCcsNy4Nqwn4Q83xA4f5b2MiPBXKvqsqHCiM8C",
- "JGihk7gi/cF+JX3qpr92upUumNjPXt987Q3A4x7LuHOYn75xpvDpG7J32gjcAPevFpYphEyiQoZH1EJI",
- "StzuyRZ7jFabF6AnbSzPcf1Cmo1EQbriuci4uZs49FXcYC3a1dGTmg4jel52P9fPsSP2SiUlTy8pO2ay",
- "EmZdL2apKub+CDBfqeY4MM84FErSt2zOSzHXJaTzq2d7zLF76CsWUVc304nTOvrB8/Ac4NiE+mM28S3/",
- "t1Hs0Q9vz9nccUo/sum3FnSQNxk5tbnbnx0HAk7eXh+z+cd4gH4DSyEFfj++kBk3fL7gWqR6Xmuo/sRz",
- "LlOYrRQ7Zg7kG244+Z16vv6xG57kCXTYlPUiFym7DLfidmmOuYovLj6hgFxcfB5Ew4cbpxsq7n6nAZJr",
- "YdaqNomLl4z7rlr/HkG2nupdo06Zg20l0sVjHPyRkEBZ6iTwEcenX5Y5Tj8QQ82oE2VTMm1U5ZUgakbn",
- "R0P+vlcuH6Di1/5OS61Bs18LXn4S0nxmifP5nJQlOaDJA/yr0zUok9sSDvcityi2wGJne5q4NahgYyqe",
- "lHwFcd+yAV4S92mjLsiLlueMunW8zD6XjEC1E9jpVwzwuHWmL03uzPby4Z34FOgTsZDaoHZqveB35ReC",
- "+rPKUcjuzK4ARpRLtVknuLajs9Io4p4zzbWzFepkH53XYiVxEbgbegtg6RrSS8goNEn+8Wmnu08AcTuc",
- "Vx1C20t1NqGXbn6QK2QBrC4z7mwALrf9FHwNxvh7Bx/hErbnqr04cpuc+5vpxIXbEpSZsYVKkhpsRiis",
- "4bL1Ibse8130lUJiZcls1MnmSnuxOG7kwvcZX8h2h3yARRwTioYMO+S95FWEEFb4R0hwh4kivHuJfjSK",
- "xCsjUlHa+R8WNfvQ6YNA9m0u0e1ELfu7xkCpR5WYbZwsuI5vIIBfkB+4hvq5Vn4k61W0YXRGhRmc4C5y",
- "COK92q1sXpHR5adtb5qPoRaXEqhku6t7NLoUCc2HtUtcEFdtugK5fA7ZaPeGi1GKfEaR6IZeBI6bwxUf",
- "jYKN3og6DdKEgou2zX0nr9j6i2Ha3H2zNS/8vSh/GcrfgJpMb3WbaTpxmasxdihJVkYGOay4C/pQTqxP",
- "h7CoPdIBgxCPn5fLXEhgSSzjiGutUmGzFFpd7sYANEKfMmYdPOxgCDExDtAmbzkBZu9VuDbl6jZIShDk",
- "XuceNvnZg79hv7e5LT7izNu9ZuhQd7SLaNpeDrRsHHqhppOoSho7IXRaMdtkAYMjVUxEUTUN/TJD74+G",
- "HGg7TjqaNbmMeevQqgASwzPfLTg2sMdiiZv8kyBoUsFKaAPtuRlXq3cEfV3fxZUykCxFpU1CR/bo9LDR",
- "95qMwe+xaVz9dEjFbPUCkcW1Dw17CdskE3kd57Yb98c3OOz75vyk68UlbGmTAZ6u2YKqbeAu1Bke2+wY",
- "2mbd7ZzwOzvhd/zB5nuYLGFTHLhSyvTG+J1IVU+f7FpMEQGMCceQa6Mk3aFegjyhoW4JzmQ2m4kyn2a7",
- "vAaDxXTrXKtRzWshRecSGLo7Z2FT8mzWXVCsYngDZGQN8LIU2aZ3hrdQR8J2ZMDfwlC3Fn8kFDVpgO2h",
- "QHBejyUZV+B9DpalwZ5py44MEjH3U6af/hkohHAooX3RrCGhULQpT24frc6B5z/C9q/YlqYzuZlO7nfk",
- "j9HaQdxD6w8Ne6N0Jl+2PQJ2PHi3JDkvy0pd8TxxjpEx0azUlRNNau79KF9Z1cWP3+dvT959cOhTXinw",
- "yqVT7poVtSt/N7PCE3Esa/E88IyQterPztYQC5jf3HQOnSk+BbZjy6EWc8Jll1frKAuWonOuLOMhtb2u",
- "EufTs1Pc4duDsnHttSdi69nrevP4FRe5P4p6bPen7N5JK3Ryfu/rFQwTgB9U3QxWd3x1tNK1RyeFY+0o",
- "0VLYKkSaKdlPLEITkk64JKoF36IEWef0UDnJukhw+SU6F2ncbSEXGoVDWp8vNmbUeMQYRYi1GAkhyFoE",
- "sLCZPiBa1kMyGCNKTHIp7aDdQrnykbUUf6+BiQykwU+VSzTsLFRclz6zf7idxm8ROMDuIkED/j42BoIa",
- "sy4Iid0GRuhhjtxh8QdOP9HGNY4/BI7BWwSqwhEHW+KOIJOTDyfNNtq/7nqKw2qPQ/2HgmErA+0vNend",
- "FmuL6MgY0dKRo7vFyfhOQbdDDt8j2i2B0A03A5sTy3OtImBqec2lrQSH/SwNXW8N1meAva5VRVcqNUSj",
- "9EIny0r9BvGT7BIZFcl9dKQkc5F6zyJX1fpKtPHKtDU+PX1DPEZFe8ySCz6ybiBxZIWTlAeuc0rm9g4u",
- "Lq1Y26p1nfB1fHGEKSdzC79dHA7nQZpOzq8XPFbABQ0qxOmkDdJ0XHFGMd/Zc0E3dxic7AXxnqatsPcQ",
- "S6jaBOXhnfc7Gke/L5HPIBUFz+NWUkbU715Qy8RK2NJ/tYagtpwDZGumWily9flsGKwlzemSHU2D6pWO",
- "G5m4EloscqAWz2yLBddg78GFd+NcYpQBadaamj8/oPm6llkFmVlrS1itWGPA2itP3ve9AHMNINkRtXv2",
- "ij0mr78WV/AEqehskcnxs1eUlmL/OIptdq7G5y69kpFi+V9OscTlmMIeFgZuUg7qLHon1hZmHldhO1aT",
- "7XrIWqKWTuvtX0sFl3wF8WhusQcn25e4SU7DHl1kZquKalOpLRMmPj4YjvppJDUN1Z9Fw91RKXABGcW0",
- "KlCe2sJxdlAPzpYodcWcPF7+I4VYSn/XqHdg/roOYruXx2ZNgbD3vIAuWaeM26vjdF3KlRxwCnHGTn0B",
- "Cqpu1RS1srTBsXDqZNIhC6mIj5CGDlG1WSZ/ZOmaVzxF9TcbQzdZfPsyUtGrW8RH3g7xr073CjRUV3HS",
- "VyNi760J15c9lkomBWqU7EmbChqsymgpHmV4Hk9q8Rq9n9O0G/ShBihCSUbFre6IGw809b0ET+4AeE9R",
- "bOZzK3m89cy+umTWVVw8eI0c+svHd87KKFQVK0fULndncVRgKgFXlF8TZxLCvCcvqvwgLtwH+39ulKU9",
- "ATRmmV/LsYPAn2qRZ39tU9t7RRErLtN1NMaxwI6/tFVcmynbdRy9AL/mUkIeBWf3zF/83hrZ/f+mDh2n",
- "EPLAtv1ih3a6vcm1iHfR9Ej5AZG8wuQ4QEjVbq5vkxyWr1TGaJy21EorZcM7wEHht7/XoE3svjJ9sHmV",
- "5MvCc4GtO8ZAZmRVz5i934u4dG5okjUrijq3t/0gW0HlnKx1mSueTRnCOX978o7ZUbWrpEH3Sqnu2cre",
- "Fe/MoufDCOoy3eZq/1ga5uFwdueF4ay1ocIs2vCijGXYY4tz34DS+EO/Lpl5IXVm7I21sLW33+wgbQUH",
- "1gzndDzJBP7HGJ6uyXTtaJNxkT+8YJ+XSh0Urm5qADelley1f6N8zT5bsm/KFJ4vroW2xffhCrpJ/c0N",
- "F3d08kn+3elVtZRWUqI6etcNrLuQ3SNng/fe9RvFrEf4WxouWtVVCretX3hGvaJ3iPvFEAcVq+1twqZi",
- "rH9UJeVSSZHSDd6g3H+Dsivkf0hc5IDLzn23lF/iboVGFle0BGOTHuSoOFqU0StCR7ihYzb4iky10mH/",
- "NFQxfs0NW4HRTrNBNvVlNp2/REgNrlQWvekQ6ElVdWJNpCGj4cu2WM4txYhSfEcM4O/x23t3PKK0vEsh",
- "yRByZHMZgNajQXXGDVpPwrCVAu3m072Sqz9hnxldS81g83nm65ITDBuqwWnbuOQQ1ImPUrqoILZ9jW0Z",
- "hWXanzvpxHbQk7J0g0Zv1DYcjhUKHSVwJNqUeHd/QNwGfghth7jtTC+g/RQFDa4oOAkl7cMDwRgp8fL2",
- "iue1lShbKcKm9USvgQkZQeOdkNBWzY9sEGl0SyDG0Hod6afTihtrAh6k086B5xSRjCk0bZyL9r6gegwm",
- "ktAc/RjjbGzLxY4ojqZBa7hxuW2K9aN0B8bEa3olxBFyWPyVrCpnRGWUuNkrBxtTHKi4fSHl7gYwXAZD",
- "m8h2NxW3K+c2O9HYhZdMaDzrFIs8kqr2pvkYlESmnNjFlv6NFdgYn4ELYN+5XBV1vLV9ubd0lEgTLVZ3",
- "5Erb/0HZ4ita3a/2VG8thbyOraK3qJ7Cu4aDmitWgTVXASndR/lC93Q4aS6xdGWfFGb08NfWLN99+B2v",
- "Pj4lFTuS9PexveXOrRa3vvyx1L90NFOVG5eGbjjbVQvOlgyPQbB5A7ZUuX32K+rHGMsVsKkC+HnQ+zD7",
- "Y2DNEeydBPVJKEOEfvQZbqzkwgWq2qU2pKzLhR1mJx+SJdcyuD8Jl2FKQGIz8WtjZx7lO7U6KDHQpzGE",
- "yZK7kxmu4sRjvXLzuVr5Nx4OKOOxc8J3zIA9SNEMxSKiusLcpT3r8bIjQ/aqXM8EVxU8sCwFtsctZWmY",
- "lXXo9GgetERqDcN5HsyADm1HaH8I4VtFOCTuuP4yi0P0V/zGEXYnBWoJ4u/EDVfMV1N/nacd3Lgxrv91",
- "zO1iXQsjHr4eTWuRZ/uY2/HXtjUnyCP5i/Ns/1OqXvxideFwubkCALexmPpMIMJE5toZPBgq8MQe4IR1",
- "3SIuVyoSmdaVMFtKLvQmuvglemnjB5DugQv3XlCTouEyBOxTdS5gsGpat6+L/aDsix8FnhvIhjZUPe3t",
- "hhdlDm5dfPdo8Qd48ceX2dGLZ39Y/PHom6MUXn7z6uiIv3rJn7168Qye//Gbl0fwbPntq8Xz7PnL54uX",
- "z19++82r9MXLZ4uX3776wyP/tJdFtH02639TaZjk5MNpco7ItjThpfgRtrYYBIqxLzPBU1qJUHCRT479",
- "T//Dr7BZqorgNWL368RFjyZrY0p9PJ9fX1/Pwi7zFVUbToyq0/XcjzMsVvfhtPFs24wk4qh1WqIoEFOd",
- "KJzQt49vz87ZyYfTWSswk+PJ0exo9oyqOZUgeSkmx5MX9BOtnjXxfe6EbXL85WY6ma+B52bt/ijAVCL1",
- "n/Q1X62gmrl6G/jT1fO5d4zNv7gsnJtd37ppUO5eXdAhuJg9/9IpV52FcOna8vyLTxELPtnnGOZfyO82",
- "+nsXjS9mI7KbuS/M5nq4subzL+07Azd2deQQc5n4CqNtc6ocSs8vafsrLgif+CB091mKhrunGXIVe71u",
- "3lwIX5n/9J/0TebPvSfqnh8d/Sd7bOvlLWe8057tHHgjxXD+xDPmg3I09rOvN/appGtwqNCYVdg308k3",
- "X3P2pxJFnueMWgbpakPW/0VeSnUtfUvcXeui4NXWL2PdUQr+JRXS4XylqaJxJa64gclnKpkdi4KOKBd6",
- "1ezWyoWeavsv5fK1lMvv4w2757dc4L//Gf+XOv29qdMzq+4OV6fOlLN5H3Nb37O18PyV8uE96641O6aT",
- "3VGHPSbHsITrJy53xIKN3Nlv4vQqsz4RX//N5zgGr5V0dfZHB7RTHuJH2Op9Cvx8DexXBz4R2a+Un05R",
- "mylTFfuV53nwG9Xx8mb7LK7v23vcex+pbhdoDK0lgM+Wp2Q4VxYdN7JL8Df+LQ06kd1hMkRbLXQJMPbC",
- "sy2qGGowJ4LPjo6OYllUfZyd/8ZiTLcTrlWSwxXkQ1aPIdG7+L/rWe/Rh8+G9RrCc3dE6qhU/gLaEg6j",
- "r5x3ixDcBrs3Sj4y7JoL93ZMUPTLvoRXCMMWsFT0Rp6pK+lyeZs9Iv5ofIIgY7i0F4juu3n//sqc3+xQ",
- "dnpdm0xdy3HFRdcfee7uD1BGf+NuMIp5AI2mmjH/onO+ZWWlrkQGjFOel6pN6w/Czr6WT+81h6ba3EpI",
- "GoBWOY1iL8rwIOHavTw2VIJnDrP39qG2nt6LPphucYyv+9iiv68sDQ2NnbzytZ86f89R5NFctQ9RJkSh",
- "oUvDAM/nLsOn96uNwwc/dl9siPw6b+6eRj/2HTWxr86P4hu1HtLQ40icanyNnz4jwSmd3zGxdaAdz+cU",
- "+14rbeYTVDhd51r48XND4y+e857WN59v/n8AAAD//wcUiJu0jwAA",
+ "H4sIAAAAAAAC/+x9/XPbtrLov4LROTP5eKJk56On8UznPDdOW7+maSZ2++49cW4LkSsJNQmwAGhJzfX/",
+ "fgcLgARJUJI/Tnoz5/yUWAQWi93FYnexWHwcpaIoBQeu1ejo46ikkhagQeJfNE1FxXXCMvNXBiqVrNRM",
+ "8NGR/0aUlowvRuMRM7+WVC9H4xGnBTRtTP/xSMLvFZOQjY60rGA8UukSCmoA601pWteQ1slCJA7EsQVx",
+ "ejK63vKBZpkEpfpY/sjzDWE8zasMiJaUK5qaT4qsmF4SvWSKuM6EcSI4EDEnetlqTOYM8kxN/CR/r0Bu",
+ "glm6wYendN2gmEiRQx/Pl6KYMQ4eK6iRqhlCtCAZzLHRkmpiRjC4+oZaEAVUpksyF3IHqhaJEF/gVTE6",
+ "ej9SwDOQyK0U2BX+dy4B/oBEU7kAPfowjk1urkEmmhWRqZ066ktQVa4VwbY4xwW7Ak5Mrwn5oVKazIBQ",
+ "Tt5985I8ffr0hZlIQbWGzAnZ4Kya0cM52e6jo1FGNfjPfVmj+UJIyrOkbv/um5c4/pmb4L6tqFIQXyzH",
+ "5gs5PRmagO8YESHGNSyQDy3pNz0ii6L5eQZzIWFPntjG98qUcPw/lSsp1emyFIzrCF8IfiX2c1SHBd23",
+ "6bAagVb70lBKGqDvD5IXHz4ejg8Prv/y/jj5h/vz+dPrPaf/soa7gwLRhmklJfB0kywkUFwtS8r79Hjn",
+ "5EEtRZVnZEmvkPm0QFXv+hLT16rOK5pXRk5YKsVxvhCKUCdGGcxplWviByYVz42aMtCctBOmSCnFFcsg",
+ "Gxvtu1qydElSqiwIbEdWLM+NDFYKsiFZi89uy2K6Dkli8LoVPXBC/3uJ0cxrByVgjdogSXOhINFix/bk",
+ "dxzKMxJuKM1epW62WZHzJRAc3Hywmy3SjhuZzvMN0cjXjFBFKPFb05iwOdmIiqyQOTm7xP5uNoZqBTFE",
+ "Q+a09lGzeIfI1yNGhHgzIXKgHInn112fZHzOFpUERVZL0Eu350lQpeAKiJj9Bqk2bP9/Zz++IUKSH0Ap",
+ "uoC3NL0kwFORDfPYDRrbwX9TwjC8UIuSppfx7TpnBYug/ANds6IqCK+KGUjDL78/aEEk6EryIYQsxB1y",
+ "VtB1f9BzWfEUmdsM2zLUjCgxVeZ0MyGnc1LQ9VcHY4eOIjTPSQk8Y3xB9JoPGmlm7N3oJVJUPNvDhtGG",
+ "YcGuqUpI2ZxBRmooWzBxw+zCh/Gb4dNYVgE6HsggOvUoO9DhsI7IjFm65gsp6QICkZmQn5zmwq9aXAKv",
+ "FRyZbfBTKeGKiUrVnQZwxKG3m9dcaEhKCXMWkbEzRw6jPWwbp14LZ+CkgmvKOGRG8yLSQoPVRIM4BQNu",
+ "d2b6W/SMKvji2dAG3nzdk/tz0eX6Vo7vxW1slNglGdkXzVe3YONmU6v/Hs5fOLZii8T+3GMkW5ybrWTO",
+ "ctxmfjP882SoFCqBFiH8xqPYglNdSTi64I/NXyQhZ5ryjMrM/FLYn36ocs3O2ML8lNufXosFS8/YYoCY",
+ "Na5Rbwq7FfYfAy+ujvU66jS8FuKyKsMJpS2vdLYhpydDTLYwbyqYx7UrG3oV52vvady0h17XjBxAcpB2",
+ "JTUNL2EjwWBL0zn+s56jPNG5/MP8U5Z5jKZGgN1Gi0EBFyx4534zP5klD9YnMFBYSg1Rp7h9Hn0MEPqr",
+ "hPnoaPSXaRMpmdqvaurgmhGvx6PjBs79j9T0tPPrODLNZ8K45Q42HVuf8P7xMVCjmKCh2sHh61ykl7fC",
+ "oZSiBKmZ5ePMwOmvFARPlkAzkCSjmk4ap8raWQPyjh2/w37oJYGMbHE/4n9oTsxnswqp9uabMV2ZMkac",
+ "CAJNmbH47D5iRzIN0BIVpLBGHjHG2Y2wfNkMbhV0rVHfO7J86EKLcOeVtSsJ9vCTMFNvvMbjmZC3k5eO",
+ "IHDS+MKEGqi19Wtm3uYsNq3KxNEnYk/bBh1ATfixr1ZDCnXBx2jVosKZpv8EKigD9T6o0AZ031QQRcly",
+ "uIf1uqRq2Z+EMXCePiFn3x0/P3zyy5PnX5gdupRiIWlBZhsNijx0+wpRepPDo/7MUMFXuY5D/+KZ96Da",
+ "cHdSCBGuYe+zos7BaAZLMWLjBQa7E7mRFb8HEoKUQkZsXhQdLVKRJ1cgFROR8MVb14K4FkYPWbu787vF",
+ "lqyoImZsdMcqnoGcxChv/Czc0jUUatdGYUGfr3lDGweQSkk3PQ7Y+UZm58bdhydt4nvrXpESZKLXnGQw",
+ "qxbhHkXmUhSEkgw7okJ8IzI401RX6h60QAOsQcYwIkSBzkSlCSVcZGZBm8Zx/TAQy8QgCsZ+dKhy9NLu",
+ "PzMw1nFKq8VSE2NWihhrm44JTS1TEtwr1IDrV/vstpUdzsbJcgk025AZACdi5vwr5/nhJCmGZbQ/cXHa",
+ "qUGr9glaeJVSpKAUZIk7XtqJmm9nuay30AkRR4TrUYgSZE7lLZHVQtN8B6LYJoZubU44p7SP9X7Db2Ng",
+ "d/CQjVQaH9NKgbFdzOrOQcMQCfekyRVIdM7+qfzzg9yWfVU5cHTiduBzVpjlSzjlQkEqeKaiwHKqdLJr",
+ "2ZpGLTPBzCBYKbGVioAHAgSvqdLWRWc8Q5PRqhscB/vgEMMID+4oBvLPfjPpw06NnuSqUvXOoqqyFFJD",
+ "FpsDh/WWsd7Auh5LzAPY9falBakU7II8RKUAviOWnYklENUuRlTHsPqTw3C82Qc2UVK2kGgIsQ2RM98q",
+ "oG4YPh5AxPgXdU8UHKY6klPHrMcjpUVZmvWnk4rX/YbIdGZbH+ufmrZ94aK60euZADO69jg5zFeWsvbg",
+ "YEmNbYeQSUEvzd6ElpqNJfRxNosxUYynkGyTfLMsz0yrcAnsWKQDRrI7mgxG6yyOjvxGhW5QCHZwYWjC",
+ "Axb7WxsBPw/i5vdgtUSgGkmjnKDp5uNqZnMIm8CapjrfGJWrl7AhK5BAVDUrmNb2SKNt1GhRJiGAqBO1",
+ "ZUTnxtrosTdJ9/GrzxBUML2+cToe2S10O37nnU20RQ63eZdC5JPd0tcjRhSDfYzgY1IKw3XmTtD8MUvO",
+ "lO4h6TZUjGHUC/mBapEZZ0D+U1QkpRyNgUpDrZ2ExCWPW4EZwSjTekxmd92GQpBDAdbGwS+PH3cn/vix",
+ "4zlTZA4rf+xsGnbJ8fgxWuxvhdJ3XgEd0VyfRpQMupZGY0VShYwDOdnpZiLcvbzLAPTpiR8QF5MyGsVO",
+ "XAoxv4fZsmwdO2zIYB2bqeMcGowPjHW1UaAn0Y2wNAhGzhtBXubojYp5RyJJAUZU1JKVBmRzNrLR0Mqr",
+ "+K+Hfz96f5z8gyZ/HCQv/s/0w8dn148e9358cv3VV//d/unp9VeP/v7XmPGgNJvFIxffUbU0mDrNsean",
+ "3MYe50Jak3PjdjIx/9R4d0TMMNNTPpjSPkL3NsYQxgm1zEaZM4ZKvrmHTcYCIhJKCQpVQmjgK/tVzMO0",
+ "Cid5aqM0FH0f2Xb9ZcBCeOf3156UCp4zDkkhOGyimYSMww/4MdbbqqWBzrhBDPXt2h8t/DtotcfZh5l3",
+ "pS9yO1BDb+skj3tgfhduJzwSJpSgewd5SShJc4bOn+BKyyrVF5yieRmIayS06o3mYYfjpW8S93AiDogD",
+ "dcGpMjSsjc5o2GwOEXfyGwDvd6hqsQClO8bNHOCCu1aMk4ozjWMVhl+JZVgJEuObE9uyoBsypzn6R3+A",
+ "FGRW6fZ2j+feShv3xcZqzDBEzC841SQH48r9wPj5GsH542UvMxz0SsjLmgpxnb8ADoqpJK5Iv7VfUZ+6",
+ "6S+dbsUkRPvZ65tPvQF43GOnsg7z0xNnCp+eoL3TRGl6uH8y171gPIkK2fkSSME4Jvd0ZIs8NFabF6BH",
+ "TbzHcf2C6zU3gnRFc5ZRfTtx6Kq43lq0q6MjNS1GdDwxP9cPsSO0hUhKml7iCcpowfSymk1SUUy9CzBd",
+ "iNodmGYUCsHxWzalJZuqEtLp1eEOc+wO+opE1NX1eOS0jrr3s1oHODah7ph1DMT/rQV58O2rczJ1nFIP",
+ "bIqGBR2crUe8NndDoBXkNpO3KcY2R+WCX/ATmDPOzPejC55RTaczqliqppUC+TXNKU9hshDkiDiQJ1TT",
+ "C95T8YO3ADCB0mFTVrOcpeQy3IqbpWkzO/sQLi7eGwG5uPjQi5j2N043VHSN2gGSFdNLUenEpa4lElZU",
+ "ZhHUVZ26hJBt4um2UcfEwbYS6VLjHPy4qqZlqZJcpDRPlKYa4tMvy9xMPxBDRbATnrgTpYX0StBoRosN",
+ "8veNcDFjSVc+77FSoMivBS3fM64/kOSiOjh4CuS4LF8bmGcGj1+drjEyuSmh5d/vmSvRAIv59jhxa1DB",
+ "WkualHQBKjp9DbRE7uNGXWBYOs8JdgtpUp83IqhmAp4ewwyweNw4GwQnd2Z7+TsI8SngJ2QhtjHaqQkW",
+ "3pZfBtR3IjdCdmt2BTCiXKr0MjFrOzorZUTcc6ZOTV4YnewjuIotuFkELot7BiRdQnoJGSaUQlHqzbjV",
+ "3R8SuB3Oqw6mbOK1TfrA7EAMhcyAVGVGnQ1A+aabpqVAa5+b9g4uYXMumuTCm+RlXY9HqU2FTozMDC1U",
+ "lNRgMzLCGi5bB6PLfHfgZDClZUkWuZi51V2LxVEtF77P8EK2O+Q9LOKYUNRk2CLvJZURQljhHyDBLSZq",
+ "4N1J9GPTK6nULGWlnf9+WWhvW30MkF2bS3Q7EfPurtFT6lElZhsnM6riGwiYL4YfZg11z+P8SDaqiDOY",
+ "ELy85wR3lqMtUh8F2pVNJRpdftr2NtIQanEpAcmbXd2j0aZIaD4sqfIXEPCehl8we220Q4cW9aGTkSJ/",
+ "6oT+XmM5MTNuDld0iP7DWbOnwVFScBmjzon1iq27GMZ1frS9F+lzZ33CrM+SHY1vlPE6Hrnshhg7BEcr",
+ "I4McFnbitrEXFIfaAxUwyODx43yeMw4kiZ1KUaVEyuwNkkaXuzHAGKGPCbEBHrI3hJgYB2hjtBwBkzci",
+ "XJt8cRMkOTAMr1MPG+Pswd+wO9rcXFB15u1OM7SvO5pFNG4SyC0b+1Go8SiqkoY8hFYrYpvMoOdSxUTU",
+ "qKZ+XKYf/VGQA27HSUuzJpexaJ2xKgDF8Mx3C9wG8pDNzSb/KDg0kbBgSkPjN5vV6gNBnzZ2cSU0JHMm",
+ "lU7QZY9OzzT6RqEx+I1pGlc/LVIRe8ONZXHtg8NewibJWF7Fue3G/f7EDPum9p9UNbuEDW4yQNMlmeGN",
+ "TLMLtYY3bbYMbU9mt074tZ3wa3pv891PlkxTM7AUQnfG+EykqqNPti2miADGhKPPtUGSblEv6PucQK5j",
+ "ibeBT4ZerVGYNjN8MGrQW0yZh73N/AqwGNa8FlJ0LoGhu3UWDE/iKM8I08GFxn6W4MAaoGXJsnXHh7dQ",
+ "B47t0IC/gaFuLf7IUdSoBraDAoG/HktEkeBjDpalwZ5pr6bycG6TvShjrK+QIIFCCIdiyhdW6BPKiDbe",
+ "/t1Fq3Og+few+dm0xemMrseju7n8MVo7iDto/bZmb5TOGMu2LmArgndDktOylOKK5okLjAyJphRXTjSx",
+ "uY+jfGJVF3e/z18dv37r0De+Zw5U2lDZ1llhu/KzmZXxiIUcWCD+4raxVr3vbA2xgPn1bZgwmLJagrsk",
+ "G9hyRos54bLLqwmUBUvRBVfm8SO1naESF9OzU9wS24OyDu01HrGN7LWjefSKsty7oh7bgeMvnFwTT72x",
+ "VggB3DkqGAR3k3tVN73VHV8djXTt0EnhWFuu8Rb2proigncTi4wJiR4uimpBN0aCbHC6r5x4VSRm+SUq",
+ "Z2k8bMFnyggHtzFf05hg4wFj1ECs2MARAq9YAMs0U3uclnWQDMaIEhNDSltoNxOuxFDF2e8VEJYB1+aT",
+ "xFXZWahmXfoyFf3t1NgO/bEcYFuyogF/FxvDgBqyLhCJ7QZGGGHuoXtSO5x+onVo3PwQBAZvcFAVjtjb",
+ "ErccMjn5cNJsT/uX7UhxWBGor/+MYNjb47vLEfmwxdIiOjBGtLzQ4G5xPLxTmN432COaLQHRDTeDsS0+",
+ "kisRAVPxFeW2WojpZ2noeiuwMQPTayUkpt0riJ7SM5XMpfgD4p7s3DAqkvvoSInmIvaeRNKZu0q0jso0",
+ "daA8fUM8BkV7yJILPpL2QeLACkcpD0LneI/VB7got2JtK5u0jq/jiyNMOZla+M3icDj30nRyuprR2CVf",
+ "Y1AZnI6bQ5pWKE4L4jt7LrioYSN7wXlP3ZbZXPUSZJOg3L8XdUvj6PMS+QxSVtA8biVlSP32zZyMLZgt",
+ "D1MpCOqPOEC2rpaVIlfDxR6DNaQ5nZODcVDhyHEjY1dMsVkO2OLQtphRhbtWHW6tu5jpAddLhc2f7NF8",
+ "WfFMQqaXyhJWCVIbsOjK1bHvGegVACcH2O7wBXmIUX/FruCRoaKzRUZHhy8wLcX+cRDb7FwdqG16JUPF",
+ "8v+dYonLMR57WBhmk3JQJ9F7E7Z437AK27KabNd91hK2dFpv91oqKKcLiJ/mFjtwsn2Rmxg07NCFZ7by",
+ "lNJSbAjT8fFBU6OfBlLTjPqzaJBUFAXThVlAWhAlCiNPTXERO6gHZ8tYuQv/Hi//EY9YSus2QNdh/rQB",
+ "YruXx2aNB2FvaAFtso4JtdeLctZc4HQKcUJO/SVFrIBQFz6wtDFjmamjSWdYiBe9GdfoRFV6nnxJ0iWV",
+ "NDXqbzKEbjL74lmk6kP7oje/GeKfnO4SFMirOOnlgNh7a8L1JQ+54ElhNEr2qEkFDVZl9Lq20DSPJ7V4",
+ "jd7NadoOel8D1EBJBsWtaokbDTT1nQSPbwF4R1Gs53MjebzxzD65ZFYyLh60Mhz66d1rZ2UUQsaurDfL",
+ "3VkcErRkcIX5NXEmGZh35IXM9+LCXbD/c09ZGg+gNsv8Wo45Al9XLM9+blLbO4VzJOXpMnrGMTMdf2kq",
+ "fdVTtus4ekN6STmHPArO7pm/+L01svv/JvYdp2B8z7bdgjh2up3JNYi30fRI+QENeZnOzQAhVdu5vnVy",
+ "WL4QGcFxmuu4jZT1a/wExUF+r0DpWNVR/GDzKjGWZfwCW5uCAM/Qqp6Qb22l3iWQ1g1NtGZZUeX2th9k",
+ "C5AuyFqVuaDZmBg456+OXxM7qu1jKyra2hgLNObas+jEMIK7+/ulOvlSWfE0zP3hbM8LM7NWGi/vKk2L",
+ "MpZhb1qc+waYxh/GddHMC6kzISfWwlbefrODGHmYM1kYy7SGZnU8yoT5j9Y0XaLp2tImwyK/f1EXL5Uq",
+ "KG5Y14mrr9/jujN4u7outqzLmAjjX6yYsgVa4QraSf31DRfnOvkk//b0ZMW5lZSojt52A+s2ZPfI2cN7",
+ "H/qNYtYh/A0NFyUqmcJNa9ycYa/oHeJuwZxeVUN7m7CuKuYLb6eUC85SvMEblIStUXbFXvc5F9njsnM3",
+ "LOWXuFuhkcUVLdNTpwc5Kg4W7vGK0BGuH5gNvhqmWumwf2qsKrqkmixAK6fZIBv7UkwuXsK4AldOAev+",
+ "BnpSyNZZE2rI6PFlUoe5byhGmOI7YAB/Y769ce4RpuVdMo6GkCObywC0EQ2sRamN9cQ0WQhQbj7tK7nq",
+ "vekzwWupGaw/THztSoRhj2rMtO25ZB/UsT+ldKeCpu1L05bgsUzzcyud2A56XJZu0OiN2prDsWJSgwSO",
+ "nDYlPtwfELeGH0LbIm5b0wtwPzWCBld4OAkl7sM9wajrcnUK7F3RvLIShS2ITeuJXgNjPILGa8ahqawa",
+ "2SDS6JaAjMH1OtBPpZJqawLupdPOgeZ4IhlTaEq7EO1dQXUYjCTBOfoxhtnYlBQbUBx1g8Zwo3xTF3Q1",
+ "0h0YEy+xkrQjZL9AGFpVzojKMHGzUzIspjiM4vbF9tobQH8Z9G0i211LalfOTXaioQsvqYjZm6/WkFb2",
+ "wF3Y2hC0LEmKN0iD/SIa0WTKOE/FLI/kvp3UH4M6fJhkO9vgv7GKHcMkcSfiN87J8sff2PHGBmsbUs/c",
+ "NMKUKLa4JZub/vfK51ws2oh82oDC1jUeikxsdb8yajO8A9mrBWMVa31FEdOQhC/Sik5TfbmmvSZRkUed",
+ "0qbe5nanfLhy5hhV/0Ay4rvm9j21u4s9YxhKSUwHM2ipdunxmpLmqnt/YdpylzEINp/Bltm0T1ZE4ytD",
+ "OQw2hcF87vXezy7qWZkIeytBfXJMH6HvfeYdKSlzB2jNiu1T1uXo9rOm98neaxjcnYTLfEUgsZn0KykN",
+ "C/gJaMpyVdeDrF83CM5bjT3XrceycjdTMHW4dk39HRVQ/jefZW9Hsa9mNFXPMBCwojLzLaI7m980k4EM",
+ "kG5OpU1dZXGk5/XIrDk+7acVRq5N4nF5mgvF+CIZyqpon1jW4b4HysZl0YfAElWI1xykq3ao/aMkiRb+",
+ "uHUbHttI4Wpi34YIarCqjkVu8G7Tu+byFtaKoPZJGhdzDidIJBTUYCeDK1bDY24j9kv73efR+VoBncoc",
+ "EbheXpOdd6T8wTlTPSKGUj8nTuXuzs+7jUnBOLfFZFXsvhU3pAydzVKKrEptrD9cGOBNr72vDG5RJVFD",
+ "IO3PsqfTc7xA+zrIdr6EzdTq1XRJeXOTub2sbU1ZO4fgbk6H2/dqbcX3tHxhJ7C4Fzz/TGNpPCqFyJMB",
+ "7/K0f22suwYuWXoJGTF7hz9yGqjlRh6iU1OHD1fLja+iWpbAIXs0IcSYW0WpNz6S2K5K0hmcP9Dbxl/j",
+ "qFllb3I6O25yweOnpfaRpzvqNw9mu1azrx7ecSgLZPtAes0HVBtdRSob7vtAQCS21zFQAqGyWMSslFte",
+ "p9lrffdtuYjoh4nQO4zoy5bhZ+/dd+J5QsI9G4BBIOOGBmA/xXvf6eE8UKtVCvrz3JsBLdoO0H4fwjfe",
+ "S5+4w06Hnu3jdMSvL5vu6PVYgvgL9v3V9cl8ltZbAm7cGNd/HjrDsecUA8eFHZpWLM92Mbd1+NsUsMLj",
+ "zV/cMfmfUkLrF5t+3F9urprQTaIlXSYgYSJzbQ0eDBUc6+5xouu6Rc5vccNIK8n0Bm8qeK+I/RK9Afot",
+ "cPeignugps73dOmG9m00l32wqFs3z1l9K+wTE4XZrzF+prEU66s1Lcoc3Lr46sHsb/D0y2fZwdPDv82+",
+ "PHh+kMKz5y8ODuiLZ/TwxdNDePLl82cHcDj/4sXsSfbk2ZPZsyfPvnj+In367HD27IsXf3vg35KyiDbv",
+ "NP0H1plLjt+eJucG2YYmtGTfw8ZWljJi7GtW0RRXovEr8tGR/+n/+hU2SUURPH/rfh25VJTRUutSHU2n",
+ "q9VqEnaZLtDPSrSo0uXUj9OvfPv2tD4mt+nNyFF7AmpEAZnqROEYv717dXZOjt+eThqBGR2NDiYHk0Ms",
+ "DVkCpyUbHY2e4k+4epbI96kTttHRx+vxaLoEmuul+6MALVnqP6kVXSxATlzxLvPT1ZOpP2WbfnQ+5vW2",
+ "b+2cahcaCDoEVV6mH1uOehbCxRoo048+3zz4ZOv/Tz+irzX4exuNj3rNsuupr/Lqerg62tOPTWH7a7s6",
+ "coidv9h0BhrUwR8bXxjf+1H2V7MgfBYlU+13EGrunmaGq6bXy7rIf/is+ft/0UeAP3TeRHtycPAv9rrT",
+ "sxvOeKs924pSRyrrfU0z4jN8cOzDTzf2Kcc79UahEauwr8ej559y9qfciDzNCbYMct/7rP+JX3Kx4r6l",
+ "2V2roqBy45exaikF/3QH6nC6UOjdSHZFNYw+oPscO+IaUC74jNaNlQu+DfZv5fKplMvn8Wjakxsu8M9/",
+ "xv9Wp5+bOj2z6m5/depMOZtEOrXFwhsLz9en6RdtaVuzQzrZuTrkIZ7mclg9cudPFmykAFCd9CcyGxPx",
+ "xWT9hYngnKats985oK1aU9/DRu1S4OdLIL868AnLfsXLbpgCMiZCkl9pnge/YVFQb7ZP4vq+KQqz81Xk",
+ "ZoHG0JoD+Kt3mFnv3lgxG9kl+PJBlgat04h+ZmVTenwOgy/j2wrNoQZzInh4cHAQS8nu4uziNxZjjNOv",
+ "RJLDFeR9Vg8h0akitO0d6cGXtvrFn0K/OyJ1+M7TDJp6UIPParcrGt0EuxPBH2iyosydmgWRdfv0WsG0",
+ "f3Hepmq7i0H1HhF/pTwxIGO4NLeR77p5f35vplxvUXZqWelMrPiw4sJaCjR3lxHxemAdbtCCeAC1ppoQ",
+ "/4RwvvFv4BOKSeOi0k08yHT25yudJ7Xq0rULxnEAXOU4ir11S4MzbvfUVV8JnjnM3tiXwTp6L/pCt8Ux",
+ "vu5ji/6ustQ3NLbyyheSbP09NSJvzFX78mGCFOqHNDTQfOrShTu/2qS+4Mf280+RX6d1IYvox26gJvbV",
+ "xVF8oyZCGkYckVN1rPH9B0NwvBvomNgE0I6mUzz9XQqlpyOjcNrBtfDjh5rGHz3nPa2vP1z/TwAAAP//",
+ "+Zih2CWOAAA=",
}
// GetSwagger returns the Swagger specification corresponding to the generated code
diff --git a/daemon/algod/api/server/v2/generated/private/types.go b/daemon/algod/api/server/v2/generated/private/types.go
index b436e9c90..e4c80509b 100644
--- a/daemon/algod/api/server/v2/generated/private/types.go
+++ b/daemon/algod/api/server/v2/generated/private/types.go
@@ -299,6 +299,9 @@ type DryrunTxnResult struct {
AppCallMessages *[]string `json:"app-call-messages,omitempty"`
AppCallTrace *[]DryrunState `json:"app-call-trace,omitempty"`
+ // Execution cost of app call transaction
+ Cost *uint64 `json:"cost,omitempty"`
+
// Disassembled program line by line.
Disassembly []string `json:"disassembly"`
@@ -307,7 +310,7 @@ type DryrunTxnResult struct {
LocalDeltas *[]AccountStateDelta `json:"local-deltas,omitempty"`
LogicSigMessages *[]string `json:"logic-sig-messages,omitempty"`
LogicSigTrace *[]DryrunState `json:"logic-sig-trace,omitempty"`
- Logs *[]LogItem `json:"logs,omitempty"`
+ Logs *[][]byte `json:"logs,omitempty"`
}
// ErrorResponse defines model for ErrorResponse.
@@ -337,14 +340,50 @@ type EvalDeltaKeyValue struct {
Value EvalDelta `json:"value"`
}
-// LogItem defines model for LogItem.
-type LogItem struct {
+// PendingTransactionResponse defines model for PendingTransactionResponse.
+type PendingTransactionResponse struct {
- // unique application identifier
- Id uint64 `json:"id"`
+ // The application index if the transaction was found and it created an application.
+ ApplicationIndex *uint64 `json:"application-index,omitempty"`
+
+ // The number of the asset's unit that were transferred to the close-to address.
+ AssetClosingAmount *uint64 `json:"asset-closing-amount,omitempty"`
+
+ // The asset index if the transaction was found and it created an asset.
+ AssetIndex *uint64 `json:"asset-index,omitempty"`
+
+ // Rewards in microalgos applied to the close remainder to account.
+ CloseRewards *uint64 `json:"close-rewards,omitempty"`
+
+ // Closing amount for the transaction.
+ ClosingAmount *uint64 `json:"closing-amount,omitempty"`
+
+ // The round where this transaction was confirmed, if present.
+ ConfirmedRound *uint64 `json:"confirmed-round,omitempty"`
- // base64 encoded log message
- Value string `json:"value"`
+ // Application state delta.
+ GlobalStateDelta *StateDelta `json:"global-state-delta,omitempty"`
+
+ // Inner transactions produced by application execution.
+ InnerTxns *[]PendingTransactionResponse `json:"inner-txns,omitempty"`
+
+ // \[ld\] Local state key/value changes for the application being executed by this transaction.
+ LocalStateDelta *[]AccountStateDelta `json:"local-state-delta,omitempty"`
+
+ // \[lg\] Logs for the application being executed by this transaction.
+ Logs *[][]byte `json:"logs,omitempty"`
+
+ // Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.
+ PoolError string `json:"pool-error"`
+
+ // Rewards in microalgos applied to the receiver account.
+ ReceiverRewards *uint64 `json:"receiver-rewards,omitempty"`
+
+ // Rewards in microalgos applied to the sender account.
+ SenderRewards *uint64 `json:"sender-rewards,omitempty"`
+
+ // The raw signed transaction.
+ Txn map[string]interface{} `json:"txn"`
}
// StateDelta defines model for StateDelta.
@@ -549,49 +588,6 @@ type NodeStatusResponse struct {
TimeSinceLastRound uint64 `json:"time-since-last-round"`
}
-// PendingTransactionResponse defines model for PendingTransactionResponse.
-type PendingTransactionResponse struct {
-
- // The application index if the transaction was found and it created an application.
- ApplicationIndex *uint64 `json:"application-index,omitempty"`
-
- // The number of the asset's unit that were transferred to the close-to address.
- AssetClosingAmount *uint64 `json:"asset-closing-amount,omitempty"`
-
- // The asset index if the transaction was found and it created an asset.
- AssetIndex *uint64 `json:"asset-index,omitempty"`
-
- // Rewards in microalgos applied to the close remainder to account.
- CloseRewards *uint64 `json:"close-rewards,omitempty"`
-
- // Closing amount for the transaction.
- ClosingAmount *uint64 `json:"closing-amount,omitempty"`
-
- // The round where this transaction was confirmed, if present.
- ConfirmedRound *uint64 `json:"confirmed-round,omitempty"`
-
- // Application state delta.
- GlobalStateDelta *StateDelta `json:"global-state-delta,omitempty"`
-
- // \[ld\] Local state key/value changes for the application being executed by this transaction.
- LocalStateDelta *[]AccountStateDelta `json:"local-state-delta,omitempty"`
-
- // \[lg\] Logs for the application being executed by this transaction.
- Logs *[]LogItem `json:"logs,omitempty"`
-
- // Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.
- PoolError string `json:"pool-error"`
-
- // Rewards in microalgos applied to the receiver account.
- ReceiverRewards *uint64 `json:"receiver-rewards,omitempty"`
-
- // Rewards in microalgos applied to the sender account.
- SenderRewards *uint64 `json:"sender-rewards,omitempty"`
-
- // The raw signed transaction.
- Txn map[string]interface{} `json:"txn"`
-}
-
// PendingTransactionsResponse defines model for PendingTransactionsResponse.
type PendingTransactionsResponse struct {
diff --git a/daemon/algod/api/server/v2/generated/routes.go b/daemon/algod/api/server/v2/generated/routes.go
index 3b870f435..dbecc6dc9 100644
--- a/daemon/algod/api/server/v2/generated/routes.go
+++ b/daemon/algod/api/server/v2/generated/routes.go
@@ -616,182 +616,172 @@ func RegisterHandlers(router interface {
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "H4sIAAAAAAAC/+x9/XfbtpLov4LV7jlJuqLkfPU2Pqdnnxunrd9N05zavXvfxnldiBxJuCYBXgC0peb5",
- "f38HA4AESVCSP5I0Xf2UWMTHYDCYGcwMZj6MUlGUggPXanT4YVRSSQvQIPEvmqai4jphmfkrA5VKVmom",
- "+OjQfyNKS8YXo/GImV9Lqpej8YjTApo2pv94JOGfFZOQjQ61rGA8UukSCmoG1uvStK5HWiULkbghjuwQ",
- "J8ej6w0faJZJUKoP5c88XxPG07zKgGhJuaKp+aTIFdNLopdMEdeZME4EByLmRC9bjcmcQZ6piV/kPyuQ",
- "62CVbvLhJV03ICZS5NCH86UoZoyDhwpqoOoNIVqQDObYaEk1MTMYWH1DLYgCKtMlmQu5BVQLRAgv8KoY",
- "Hb4bKeAZSNytFNgl/ncuAX6HRFO5AD16P44tbq5BJpoVkaWdOOxLUFWuFcG2uMYFuwROTK8J+alSmsyA",
- "UE5++f4lefr06QuzkIJqDZkjssFVNbOHa7LdR4ejjGrwn/u0RvOFkJRnSd3+l+9f4vynboG7tqJKQfyw",
- "HJkv5OR4aAG+Y4SEGNewwH1oUb/pETkUzc8zmAsJO+6JbXyvmxLO/1l3JaU6XZaCcR3ZF4Jfif0c5WFB",
- "9008rAag1b40mJJm0HcHyYv3Hx6PHx9c/+u7o+S/3J/Pn17vuPyX9bhbMBBtmFZSAk/XyUICxdOypLyP",
- "j18cPailqPKMLOklbj4tkNW7vsT0tazzkuaVoROWSnGUL4Qi1JFRBnNa5Zr4iUnFc8OmzGiO2glTpJTi",
- "kmWQjQ33vVqydElSquwQ2I5csTw3NFgpyIZoLb66DYfpOkSJgetW+MAF/XGR0axrCyZghdwgSXOhINFi",
- "i3jyEofyjIQCpZFV6mbCipwtgeDk5oMVtog7bmg6z9dE475mhCpCiRdNY8LmZC0qcoWbk7ML7O9WY7BW",
- "EIM03JyWHDWHdwh9PWREkDcTIgfKEXn+3PVRxudsUUlQ5GoJeulkngRVCq6AiNk/INVm2//36c9viJDk",
- "J1CKLuAtTS8I8FRkw3vsJo1J8H8oYTa8UIuSphdxcZ2zgkVA/omuWFEVhFfFDKTZLy8ftCASdCX5EEB2",
- "xC10VtBVf9IzWfEUN7eZtqWoGVJiqszpekJO5qSgq28Pxg4cRWiekxJ4xviC6BUfVNLM3NvBS6SoeLaD",
- "DqPNhgVSU5WQsjmDjNSjbIDETbMNHsZvBk+jWQXg+EEGwaln2QIOh1WEZszRNV9ISRcQkMyE/Oo4F37V",
- "4gJ4zeDIbI2fSgmXTFSq7jQAI069Wb3mQkNSSpizCI2dOnQY7mHbOPZaOAUnFVxTxiEznBeBFhosJxqE",
- "KZhw82WmL6JnVMHXz4YEePN1x92fi+6ub9zxnXYbGyX2SEbkovnqDmxcbWr13+HyF86t2CKxP/c2ki3O",
- "jCiZsxzFzD/M/nk0VAqZQAsRXvAotuBUVxIOz/lX5i+SkFNNeUZlZn4p7E8/Vblmp2xhfsrtT6/FgqWn",
- "bDGAzBrW6G0KuxX2HzNenB3rVfTS8FqIi6oMF5S2bqWzNTk5HtpkO+ZNCfOovsqGt4qzlb9p3LSHXtUb",
- "OQDkIO5KahpewFqCgZamc/xnNUd6onP5u/mnLPMYTg0BO0GLRgFnLPjF/WZ+Mkce7J3AjMJSapA6RfF5",
- "+CEA6N8kzEeHo3+dNpaSqf2qpm5cM+P1eHTUjHP/MzU97fo6F5nmM2Hc7g42Hds74f3DY0aNQoKKageG",
- "73KRXtwKhlKKEqRmdh9nZpz+ScHhyRJoBpJkVNNJc6myetYAvWPHH7Ef3pJARkTcz/gfmhPz2ZxCqr36",
- "ZlRXpowSJwJDU2Y0PitH7EymAWqighRWySNGObsRlC+byS2DrjnqO4eW993RIrvzyuqVBHv4RZilN7fG",
- "o5mQt6OXDiFw0tyFCTWj1tqvWXl7Z7FpVSYOPxF92jboDNSYH/tsNcRQd/gYrlpYONX0I2BBmVHvAwvt",
- "ge4bC6IoWQ73cF6XVC37izAKztMn5PTHo+ePn/z25PnXRkKXUiwkLchsrUGRh06uEKXXOTzqrwwZfJXr",
- "+OhfP/M3qPa4WzGEANdj73KizsBwBosxYu0FBrpjuZYVvwcUgpRCRnReJB0tUpEnlyAVExHzxVvXgrgW",
- "hg9Zvbvzu4WWXFFFzNx4Hat4BnISw7y5Z6FI11CobYLCDn224g1u3IBUSrru7YBdb2R1bt5d9qSNfK/d",
- "K1KCTPSKkwxm1SKUUWQuRUEoybAjMsQ3IoNTTXWl7oELNIM1wJiNCEGgM1FpQgkXmTnQpnGcPwzYMtGI",
- "grYfHbIcvbTyZwZGO05ptVhqYtRKEdvapmNCU7spCcoKNXD1q+/stpWdztrJcgk0W5MZACdi5u5X7uaH",
- "i6RoltHe4+K4UwNWfSdowVVKkYJSkCXOvbQVNN/O7rLegCcEHAGuZyFKkDmVtwRWC03zLYBimxi4tTrh",
- "LqV9qHebftMGdicPt5FKc8e0VGB0F3O6c9AwhMIdcXIJEi9nH3X//CS33b6qHHCdOAl8xgpzfAmnXChI",
- "Bc9UdLCcKp1sO7amUUtNMCsITkrspOLAAwaC11Rpe0VnPEOV0bIbnAf74BTDAA9KFDPy37ww6Y+dGj7J",
- "VaVqyaKqshRSQxZbA4fVhrnewKqeS8yDsWvxpQWpFGwbeQhLwfgOWXYlFkFUOxtRbcPqLw7N8UYOrKOo",
- "bAHRIGITIKe+VYDd0Hw8AIi5X9Q9kXCY6lBObbMej5QWZWnOn04qXvcbQtOpbX2kf23a9omL6oavZwLM",
- "7NrD5CC/spi1joMlNbodjkwKemFkE2pq1pbQh9kcxkQxnkKyifLNsTw1rcIjsOWQDijJzjUZzNY5HB36",
- "jRLdIBFs2YWhBQ9o7G+tBfyssQ7dg9JyDJqyXNWKSW1mb2ZBi3w3WsJokRJS4DpfG1qdM1lYpxaKM+V/",
- "s2pP5max7pvm+PGMSLiiMvMt+relYDEJ4xms4tyVtmwjGawIiwM9r2dmmqTe5cTDASbRg26deGkuFOOL",
- "xHoHtwm12qn3QJGKMyfArkA6uOYgndjV3juWaOE9aJvg2IQKZ5y5DRJM1/i0Fji7WyrmRMUP5iAWLJWC",
- "Wt+oQWpngURCQQ106KVzYn94zk3Ifmm/e1etN5GHtBsf19PrIIepSfRqiZtlWG0XiSHVm6stKBhayCIX",
- "M5onRuGHJINcbzW9mYsEHGNLI69F2u/eBvn8/F2enZ+/J69NW7xbALmA9RQ91iRdUr6Axo0Qnhd7a4AV",
- "pFUoWjpo3Oki6GylbejbV0GzmoWKL2BhF7D46HC+FosTDUUMulKIPKkv5F2nTE8YdqnigqUXkBHDTZEB",
- "OBn9oE0/ZhLy0BxAVbutrpZrr+CWJXDIHk0IOeIEilKvnfWno491JucP9Kb5VzhrVqEHnXKCi5yc87jh",
- "xfrf73ji/TCbz7kNSLvjVHaQzRPpFR847PQK3UdmuCj32Gi7PcWegWDu6RsBUVkodrFw/IBRWrS1yyzD",
- "y1Ije1U1KxiGagXNxoave+953/7A9ISQM+Rs5vqn4BIkzTEORXmzNlOkYIul0e/SFCA7POdJC5JUFG7i",
- "h81/LdM8rw4OngI5eNTto7RRpt1N156Bbt9vycHYfkJ0kW/J+eh81BtJQiEuIbO3xZCuba+tw/5LPe45",
- "/7knNkhB1/ae6c8iUdV8zlJmkZ4LI3UWoqMTc4FfQBrwwCgBijA9RkGLGMW7hN2X5gCOorrdfVikIqOa",
- "W4QR9IbbeZ9pm3YUgRVNzSopMpm11VdqOuuraFqUSThA1EC+YUbnolAt7n3Lc9fn59Y8shm+s46BpIWO",
- "gFwn228WPWREIdjl+B+RUphdZy46yofQ5EzpHpDOWIL+qZogI0JnQv6PqEhK8fyWlYb65ikkXufwmm9m",
- "QMnq53R6ZIMhyKEAa7/CL1991V34V1+5PWeKzOHKhxSahl10fPWVPQRC6TufgA5prk4i6h26DYw0jYSB",
- "L6laTra6EHDcnTwHwdAnx35CPExKoYgxC5dCzO9htSxbRXUWWMVW6nYOjYEPFCnpelD5Lw2AkVgykBc5",
- "ehrEvEORxPG/JSvNkE3cy1pDK2b2/z78j8N3R8l/0eT3g+TFv0/ff3h2/eir3o9Prr/99v+1f3p6/e2j",
- "//i3mPKiNJvFvVI/UrU0kDrOseIn3PqVjb6J5sS1s1KI+aeGu0NiZjM95oMl7UJ0b2MbwowqgZuNNHda",
- "lWW+vgchYwciEtwNSLWMt8p+FfMwZNZRnloro4P3/B+2628Dd7NfvO2kR6WC54xDUggO6+grEcbhJ/wY",
- "1Q2RLQ10RgEx1LdrW2rB3wGrPc8um3lX/OJuB2zobR3Aew+b3x234/oKg4XxZgN5SShJc4aGfcGVllWq",
- "zzlF02FH9e6QhTeIDhuTX/omcet1xLjshjrnVBkc1gbFqEt0DhFXwfcA3qasqsUCVEcVJ3OAc+5aMY5m",
- "IJwLbzKJ3bASJPquJ7al0T7nNEfb9+8gBZlVui3uMabRatPWD2emIWJ+zqkmOVClyU+Mn61wOH+X9jTD",
- "QV8JeVFjYcBmARwUU0mckf5gvyI/dctfOt6KD0zsZ89vPrUA8LDHIu4c5CfHThU+OUZ9p/HA9WD/ZG6Z",
- "gvEkSmTmilowjoHbHdoiD43W5gnoUePLc7t+zvWKG0K6pDnLqL4dOXRZXO8s2tPRoZrWRnSs7H6t72NX",
- "7IVISppeYHTMaMH0sppNUlFM/RVguhD1dWCaUSgEx2/ZlJZsqkpIp5ePt6hjd+BXJMKurscjx3XUvcfh",
- "uYFjC+rOWfu3/N9akAc/vDojU7dT6oENv7VDB3GTkVube/3ZMiCYxdvnYzb+2Fygj2HOODPfD895RjWd",
- "zqhiqZpWCuR3NKc8hclCkEPihjymmqLdqWPrH3rhiZZAB01ZzXKWkotQFDdHc8hUfH7+zhDI+fn7nje8",
- "LzjdVHHzO06QXDG9FJVOnL9k2HbV2PdwZGup3jTrmLixLUU6f4wbf8AlUJYqCWzE8eWXZW6WH5ChItgJ",
- "oymJ0kJ6Jmg4o7Ojmf19I1w8gKRX/k1LpUCR/y5o+Y5x/Z4kzuZzVJZogEYL8H87XmNocl3C7lbkBsRm",
- "sNjdHhduFSpYaUmTki4gblvWQEvcfRTUBVrR8pxgt5aV2ceS4VDNAjbaFQM4bhzpi4s7tb28eye+BPyE",
- "W4htDHdqrOC33S8z1I8iN0R26+0KxojuUqWXiTnb0VUpQ+J+Z+pnZwvDk713XrEFN4fAvdCbAUmXkF5A",
- "hq5JtI+PW919AIiTcJ51MGUf1dmAXnz5gaaQGZCqzKjTAShfd0PwFWjt3x38AhewPhPNw5GbxNxfj0fO",
- "3ZYYmhk6qEipgTAyxBoeW++y62y+876iS6wsifU62VhpTxaHNV34PsMH2UrIezjEMaKo0bCB3ksqI4iw",
- "xD+Aglss1Ix3J9KPepGo1CxlpV3/bl6zt60+ZpBtwiUqTsS8KzV6TD3KxGzjZEZVXICA+WL2w5yhbqyV",
- "n8laFa0bnWBiBke4sxwCf69yJ5tKVLr8su1L8yHQ4lQCkjdS3YPRxkioPixd4AK7bMIV0OSzi6Dd6i42",
- "VOQjiljb9cLMvDlc0kEv2OCLqJMgTCh4aFu/d/KMrXsYxvXbN5vzwr+L8o+h/Auo0fhGr5nGIxe5GtsO",
- "wVHLyCCHBXVOH4yJ9eEQFrQHKtggA8fP83nOOJAkFnFElRIps1EKDS93c4BRQr8ixBp4yM4jxMg4ABut",
- "5TgweSPCs8kXNwGSA0PzOvVjo509+Bu2W5ub5CNOvd2qhvZ5R3OIxs3jQLuNfSvUeBRlSUM3hFYrYpvM",
- "oHelipGoYU19u0zf+qMgBxTHSYuzJhcxa53RKgDJ8NR3C64N5CGbGyH/KHCaSFgwpaG5N5vT6g1Bn9Z2",
- "cSk0JHMmlU7wyh5dnmn0vUJl8HvTNM5+WqgiNnsBy+LcB6e9gHWSsbyK77ab96/HZto39f1JVbMLWKOQ",
- "AZouyQyzbRgp1JretNkwtY2627jg13bBr+m9rXc3WjJNzcRSCN2Z4wuhqg4/2XSYIgQYI47+rg2idAN7",
- "CeKE+rwluJPZaCaMfJpsshr0DtONY60GOa8dKbqWQNHduAobkmej7oJkFf0XIANngJYly1adO7wddcBt",
- "hwr8DRR1q/FHXFGjerAtGAju67EgYwne5mC3NJCZNu1ILxBzO2a64Z8BQwinYsonzeojypA2xsltw9UZ",
- "0PyvsP6baYvLGV2PR3e78sdw7Ubcguu39fZG8Yy2bHsFbFnwbohyWpZSXNI8cYaRIdKU4tKRJjb3dpRP",
- "zOri1++zV0ev3zrwMa4UqHThlJtWhe3KL2ZV5kYci1o8CywjqK36u7NVxILNr186h8YUHwLb0uUMF3PE",
- "ZY9XYygLjqIzrszjLrWtphJn07NL3GDbg7I27TU3YmvZa1vz6CVlub+Kemi3h+zeiiu0Yn7vahUMA4Dv",
- "ld30Tnf8dDTUtYUnhXNtSNFS2CxEigjeDSwyKiTecJFUC7o2FGSN033mxKsiMccvUTlL42YLPlOGOLi1",
- "+ZrGBBsPKKNmxIoNuBB4xYKxTDO1g7esA2QwRxSZaFLagLuZcOkjK87+WQFhGXBtPkkXaNg6qOZc+sj+",
- "vjiNvyJwA7uHBPXwd9ExzFBD2gUCsVnBCC3MkTcs/sLpF1qbxs0PgWHwBo6qcMaeSNzgZHL04ajZevuX",
- "bUtxmO2xz/8MYdjMQNtTTXqzxdICOjBHNHXkoLQ4GpYU+DpkdxnRiAQENxQGNiaW5kpEhqn4FeU2E5zp",
- "Z3HoeiuwNgPT60pIfFKpIOqlZyqZS/E7xG+yc7NRkdhHh0pUF7H3JPJUrctEa6tMk+PT4zeEY5C0hzS5",
- "4CNpOxIHTjhSeWA6x2Bub+Ci3JK1zVrXcl/HD0cYcjK14zeHw8HcC9PJ6dWMxhK4GIXKwHTUOGlapjgt",
- "iO/sd0HVbxgc7QX+nrots+8QS5BNgHL/zfstlaMvi+QzSFlB87iWlCH22w/UMrZgNvVfpSDILecGsjlT",
- "LRW5/HzWDdag5mRODsZB9kq3Gxm7ZIrNcsAWj22LGVVg38GFb+NcYJQGrpcKmz/Zofmy4pmETC+VRawS",
- "pFZg7ZMnb/uegb4C4OQA2z1+QR6i1V+xS3hksOh0kdHh4xcYlmL/OIgJO5fjcxNfyZCx/KdjLHE6RreH",
- "HcMIKTfqJPom1iZmHmZhG06T7brLWcKWjuttP0sF5XQBcW9usQUm2xd3E42GHbzwzGYVVVqKNWE6Pj9o",
- "avjTQGiaYX8WDPdGpTAHSAuiRGHoqUkcZyf1w9kUpS6Zk4fLf0QXS+nfGnUuzJ/WQGxleWzV6Ah7Qwto",
- "o3VMqH06js+lXMoBxxAn5MQnoMDsVnVSK4sbM5dZOqp0ZgsxiQ/jGi9RlZ4n35B0SSVNDfubDIGbzL5+",
- "Fsno1U7iw28G+CfHuwQF8jKOejlA9l6bcH3JQy54UhiOkj1qQkGDUxlNxSM0zeNBLZ6jd2OaNg+9qwJq",
- "RkkGya1qkRsNOPWdCI9vGPCOpFiv50b0eOOVfXLKrGScPGhldujXX147LaMQMpaOqDnuTuOQoCWDS4yv",
- "iW+SGfOOeyHznXbhLtB/Xi9LcwOo1TJ/lmMXge8qlmd/a0LbO0kRJeXpMurjmJmOvzVZXOsl23McfQC/",
- "pJxDHh3OyszfvGyNSP9/iF3nKRjfsW032aFdbmdxDeBtMD1QfkKDXqZzM0GI1Xasbx0cli9ERnCeJtVK",
- "Q2X9N8BB4rd/VqB07L0yfrBxlWjLMvcCm3eMAM9Qq54Q+77XwNJ6oYnaLCuq3L72g2wB0hlZqzIXNBsT",
- "M87Zq6PXxM6qXCYNfFeKec8W9q14axUdG0aQl+kmT/uHwjB3H2dzXJhZtdKYmEVpWpSxCHvT4sw3wDD+",
- "0K6Lal6InQk5thq28vqbnaTJ4EDq6RyPR5ow/9GapktUXVvcZJjkd0/Y56lSBYmr6xzAdWol++xfC5+z",
- "z6bsGxNh7hdXTNnk+3AJ7aD++oWLuzr5IP/28mTFuaWUKI/e9ALrNmj3wFnnvTf9RiHrIP6GiosSlUzh",
- "pvkLT7FX9A1xNxliL2O1fU1YZ4z1RVVSygVnKb7gDdL91yC7RP67+EV2eOzcNUv5I+5OaORwRVMw1uFB",
- "DouDSRk9I3SI6xtmg69mUy112D81ZoxfUk0WoJXjbJCNfZpNZy9hXIFLlYU1HQI+KWTL14QcMuq+bJLl",
- "3JCMMMR3QAH+3nx7465HGJZ3wTgqQg5tLgLQWjQwz7g22hPTZCFAufW0n+Sqd6bPBJ+lZrB6P/F5yXEM",
- "66oxy7Z+yf5QR95L6byCpu1L05agW6b5uRVObCc9Kks3afRFbb3DsUShgwiOeJsSb+4PkFuPH462gdw2",
- "hhegPDWEBpfonIQS5XCPMAZSvLy6pHllKcpmirBhPdFnYIxHwHjNODRZ8yMCIo2KBNwYPK8D/VQqqbYq",
- "4E487Qxojh7JGENT2plo7zpUZ4MRJbhGP8fwNjbpYgcYR92gUdwoX9fJ+g11B8rES6wS4hDZT/6KWpVT",
- "ojIM3Oykg40xDsO4fSLltgDoH4O+TmS7a0ntybmJJBp68JIxZe46xSyPhKod1x+DlMgYEztb47+xBBvD",
- "K3AO7Funq8KON9Yvt6aOYmmi2OKWu9L0v9dt8Rmt7pZ7qnOWwr2OnaJXhj2Fbw17OVcsA6ufAmK4j/CJ",
- "7vFyUj9iadM+Mszo5a/JWb758jucfXyMLHYg6O+X5pU7tVzc2vKHQv/SwUhVql0YuqZkUy44mzI8NoKN",
- "G7Cpym3Zr6gdYyhWwIYKmM+93rvpHz1tDsfeiFAfhNIH6K8+wo2UlDlHVXPU+ph1sbD96ORdouSaDe4u",
- "wkWY4iCxlfizsTGO8rVY7BQY6MMYwmDJzcEMl3HkkU66+VwsfI2HHdJ4bFzwLSNgd2I0fbKIsK4wdmnL",
- "ebxo0ZB9KtdRwYWEe6alQPe4IS31o7J2XR6uA49IpaC/zp03oIXbAdzvgviGEfaRO8y/9GwX/hV/cWS6",
- "IwO1CPFv4von5pOxv1ZpBzdvbNf/NmR2saaFAQtfB6cVy7Ntm9uy1zY5J9Ai+ZuzbH+WrBe/WV7YP24u",
- "AcBNNKbuJiBiImttTR5MFVhidzDCum4RkysmiUwryfQagwu9is5+iz7a+AG4K3Dh6gXVIRouQsCWqnMO",
- "g0Xduqku9oOwFT8Kc29AHVpj9rRXK1qUObhz8e2D2V/g6TfPsoOnj/8y++bg+UEKz56/ODigL57Rxy+e",
- "PoYn3zx/dgCP51+/mD3Jnjx7Mnv25NnXz1+kT589nj37+sVfHvjSXhbQpmzW3zE1THL09iQ5M8A2OKEl",
- "+yusbTIIQ8Y+zQRN8SRCQVk+OvQ//S9/wiapKIJqxO7XkfMejZZal+pwOr26upqEXaYLzDacaFGly6mf",
- "p5+s7u1Jbdm2EUm4o9ZoaUgBN9WRwhF+++XV6Rk5ensyaQhmdDg6mBxMHmM2pxI4LdnocPQUf8LTs8R9",
- "nzpiGx1+uB6PpkuguV66PwrQkqX+k7qiiwXIicu3YX66fDL1hrHpBxeFc21GXcTCLn0Oztow209DMbaW",
- "HnPZq3NuBi8dlXsAOSYzG2BIXNpXnqHp1AaPGdZWI+skC2qfB0W2xq3S7e++oGqksYSQsXwesfry9ROc",
- "4fqCQQlmX3b5+TfXEd3sfadm3JODg49QJ27cGsXj5ZYF557dI4jtK+OdAe0O1+MKP9Hc0A3UNYRHuKDH",
- "X+yCTjg+djNsi1i2fD0ePf+Cd+iEm4NDc4Itgxi3Piv8lV9wccV9SyOSq6Kgco0CN8iyEapW14Mstx1d",
- "6p4rD/NhCFKTBhkOWh6B2drT2Ziouk5GKZkwigNW3M4glUBRzAuJjrQmyal7xw22MMhPR39Hs/tPR3+3",
- "2YOj1YiD6W0m7TYT/wF0JAnvd+umouZGjv652OT4D1vA+cuReXcVNftUzl9sKucdmPZ+d/eJur/YRN1f",
- "tkq6ql8GUMIFTzhmfLkEEpi19jrqH1pHfX7w9ItdzSnIS5YCOYOiFJJKlq/Jr7wOpbqbCl7znIoHwW0b",
- "+U+vLE2jRQfqe5B9bvqhVZMr2248aXtgWsVJaLymeZCYy4XRjps3+JRnNgTGO7nV2L9FR2udTfpg92Pc",
- "e6k+iSnpgavlu/XJ8S56+ZBXKaabt/C1UUXvCa2ParG4db35jykBenB8RzPiY20/Mm/ejZk+O3j26SAI",
- "d+GN0OR7jM77yCz9o9oJ4mQVMBvM8Dj94F/T7sBg3Ev1NmtxdfA2MhVzQsfu+YzLpV9X5TL8xDJCmyyg",
- "zzXMDLvyi/5j+hinaB4Q/1F4hM1wGaHLLnr3fGHPF+7EF7oE1XAEW7B6+gEjk0N20DuSWM3lT+QoCVKL",
- "SlH43FaCzEGnS1uioOvLjrAVH9E9zFM2vXu+M3/peNdxi/rvvnAtzl+L73F3rL6HHX+07tPr8SgFGSG+",
- "n33Ym/nM5pi7s47W98/78Y1bXZC9fuzmngQzRQyBauFjf4jZxRtB+bKZvO9bR7Tczpq0R/BdENxjaq9c",
- "nJc9Xm4RX7rhI5CWJCFvUB3CA+6D1f+MZo+PKZE/9oLeCA4EVkxhymFLi3t3Y60u1LXr6oI2YVmSAdWh",
- "7XT8oFcsu57W1e2GlIq3rgjbRqWikdSsyUHZNq/QsgQq1a2F9HZ32FlnxpPjMEeuqEOdCG1q3EVAMXi5",
- "oSfx33dxI/55vXX7Qoz7Qoy3K8T4Sa/MTUCOZVXeTyQ7XOOz3qf1Z7lPvxE8QWkLXHvNr4WWz3e3xnc8",
- "rWIV/nU3F7YEpJCoJIR8QE12Eq8w6EpoMRUM6RwmYydsU6rTZVVOP+B/MBj0ugm7tKkMptbMtkne2pKX",
- "o3sNoNiXKf0CypR+fhPendTRzmollHUQGnrrkf6b0+LLA/Rz5rcjk11ztax0Jq6COOamDMvgSbIt7vUk",
- "vREZ2HHbsfz91DzUlsVXHojOAap5RDwro8dm087mC2CKzACN+LRaLLVNyxbN+Vh3TGhqCT+x14H4hE3Q",
- "hG3lakBifdVcAs3WZAbAiZiZRTf7iovsFJJxnDCefaeBq5QiBaUgS8J8LJtAq6PK0R6oN+AJAUeA61mI",
- "EmRO5S2BtSxhM6DdRGQ1uLXVx536PtS7Tb9pA7uTh9tIJTS1UbXAqJocXJ28CAp3xAmqquwj75+f5Lbb",
- "V5WY8iNSMNl+PWMFPnPjlAsFqeCZig6G1T62HVssdBusRYHNculPyqcsqGvLkwy9CDMjxytF2zXUZYnq",
- "ZDxW04IsmucQVhvmegOrei4xj5WitjlYt408hKVg/Do9j64tElQHFgkzXGRxVyzP0Tcb1ztaQDSI2ATI",
- "qW8VYDe89g8AwlSD6LpcVJtygvyoSouyNOdPJxWv+w2h6dS2PtK/Nm37xOUCwZGvZwJUqGY7yK8sZm3m",
- "rSVVxMFBCnrhNPSFi8fuw2wOY6IYT10BnaGycqyAU9MqPAJbDmlXyQuPf6cCc+twdOg3SnSDRLBlF4YW",
- "HFMr/xBK4E1veV37wUc0e7bV6kC9atRK+/f0ijKdzIW0EjPB3M4RD2p79v+kTLuM4u4OrIUzW7rs0Jah",
- "uHGCvHMqDGZ1Jf/cOTK734+fMFN9L+RODtvGtqoFMQsjFdfMP7fD0rBex/zjeT/32vNee95rz3vtea89",
- "77Xnvfa8154/tvb8eSIwSZJ4Pu2f18Qe15DRF6nhf0HvVz7lg5NG6a9VfrwkGBXdnOONkRkaaD512V7R",
- "hS7UYIh3mDk2NdMxTsqcYtmYlfYPjbt5unwORJsDyfAa0+DpE3L649Hzx09+e/L8a8N9bLHiVtuHvpaD",
- "0uscHrkItjrBiQ9lA04x2SJGslF/+0l9lIPV5ucsB6IMsl5h82O4hNyo8tbXScxlpH89OgOav3TIsVwJ",
- "lP5OZOsO4Zj1TxEVbZJpHOaMUxnJX9onlB6StcAcxi4hb+8GdX2vMRPxOIH+hm3bq4HSHVHy3kQvW+MC",
- "XOp5N/YuPjKzpx6dxOU+/awsmyBEjswa9vSHiaTv1vlzBwfbGq3Cnb8vNerdIz568PDYjg1NZlUKWDLa",
- "UdwqMY0WwBPHFpKZyNa+xp9LpdzisjbH7TCTfbWCtDJnCSFxx+CheuSq82Ou7tDUE60xENTjAByvqSj7",
- "qRmnTde6kW/enjraxR/uHDPZHa7PNYKgi4dCkoUUVfnIVpPja7wSFyXla28GM7oiVo8wHWyc9/1y6jpz",
- "do/P7l78ILyv4KP97u8WLeSKKl/5ILOlD+JZDLsJ+rdjvEk/vS3rnV1vNFX+QGL8/ib6XXaBjrXprwSZ",
- "6BWPJKzupKfeP676HyES3kpxyczFOcph+1FYDUOYbJUMMmBZKBo6qTa8bGjz01/oVZi4Y1eeukqc4nln",
- "rXQJtmqz19IieUmMvJSCZilV+H7E1RT5yBqrXp1E7A4IJuaX6kf6GgE+2apY4rg76ZPtSG83ISaAUTaR",
- "5ufVLpto0yP3XKeFjb0p4M9iCvjOHz5FKJH0qns4gzo/O7ApeqVXPMqlpk218WjEW3Ag6vLE9+i76w3f",
- "duEFdYCtCwLyklCS5gwdFIIrLatUn3OKJtCw/nLfvecNu8Oq1EvfJG6FjxjJ3VDnnGJtyNowGlWp5hCr",
- "egPgNTZVLRagdIcTzwHOuWvFeFOHsmCpFImN+zTi2nD0iW1Z0DWZ0xxt+L+DFGRmbhFhzhI0KCrN8tz5",
- "E800RMzPOdUkB8P0f2JGoTPDeZtT7SN39aU8FuIPK1xG2YGSsj/Yr/howS3f243QvGU/+2jo8efJ+xyt",
- "FO8gPzl2+cROjjFFTONJ7MH+ydxLBeNJlMiMxHce+S5tkYeuPDES0KPGJ+l2/ZwbZVoLgoye6tuRQ9cN",
- "0DuL9nR0qKa1ER1vgV/r+9hb1oVIzJUR62qMFkwvqxlmXvZvXKcLUb93nWYUCsHxWzalJZuqEtLp5eMt",
- "+sEd+BWJsKu95P7zGPG79evrjTdKbG/vB+TyPaRv/WPnbN0aorTPkLrPkLrPobnPkLrf3X2G1H3+0H3+",
- "0P+p+UMnGzVEl3Nja0a/1ktjLKtLiYTUzlwz8LBZK/df3y3J9ISQs6Xh/9TIALgESXOSUmUVI24j5Qq2",
- "WGqiqjQFyA7PedKCxBadNxM/bP5rr7nn1cHBUyAHj7p9rN0i4Lz9vqiq4idbsfFbcj46H/VGklCIS3CZ",
- "wLB5VqGv2PbaOuy/1OP+LHtbV9C1Na4saVmCEWuqms9ZyizKc2EuAwvRie/jAr+ANMDZRBOEaZt0FfGJ",
- "cZEuOoe61+Yxpbsv329Q+OaoQy77pCYfQ8E+Bk1ZrurXCZH7FN5supR1RVVzdGuu4tMZgPK/OYe1myVn",
- "FxDG4GL0wRWVmW8RrdjbpNn1Fan7pqV2/tEMVl4l6AI9r2dm2mYMNRfOXinAvmXLZvFMc2HurIkt8LQt",
- "sh0rRpl+DxRaTe1BQ30V4ZqDdLH3aM3KhYJEiyZT8zAcm1DhUi7eBglqMEmNBc7uloqVNsQPhiWiVZii",
- "URiR2lmgYSrUQCfxGZKN/R+ecxOyX9rvrtpWbRXs2OAj43p6HQwzrkn0CoULcr0uEkOqnxOXIWHAEG2r",
- "LttAjlvXXu5071VnzLPz8/fktc2UjaVFL2A9tUXt0iXlC1A1jsLzYp8O2fCeIL68g8Z7rfccL26ZL+wC",
- "Fh8dzsFyzeORka3JQB35k35EfJcqLlh6ARkx3BQZgAvUj1x1yMM6KfGcoZxZ+1cuVlg/mhByxAkUpV4T",
- "y/87FvnO5PyB3jT/KlQv2nI7ElyZArsEeccT74fZfM4VGHZwx6nsIJsn0is+cNjpVeTiv2uWysg9v3Pr",
- "DojKQnEf5pO97N7L7r3s3svuvezey+697P6ssrtn0NubvD6FyeuzG73+RPnD96nC/2ALCgOBW7VA7uAJ",
- "qCuex+4Kzsbvy/wffggr9KOFtq7N/+799XvzTV56421TcP5wOkWdZymUno6uxx86xejDj4aV0oUdwRlH",
- "S8kuMdP/++v/HwAA//96ww9J5PoAAA==",
+ "H4sIAAAAAAAC/+x9a3PbuJLoX8HVblUeK0rOa86Jq6b2euLMjO9JMqnYM3vuxrmzENmScEwCPABoS5Pr",
+ "/76FBkCCJCjJj7xm/SmxiEej0Wj0C90fR6koSsGBazXa/zgqqaQFaJD4F01TUXGdsMz8lYFKJSs1E3y0",
+ "778RpSXji9F4xMyvJdXL0XjEaQFNG9N/PJLwz4pJyEb7WlYwHql0CQU1A+t1aVrXI62ShUjcEAd2iKPD",
+ "0eWGDzTLJCjVh/IXnq8J42leZUC0pFzR1HxS5ILpJdFLpojrTBgnggMRc6KXrcZkziDP1MQv8p8VyHWw",
+ "Sjf58JIuGxATKXLow/lCFDPGwUMFNVD1hhAtSAZzbLSkmpgZDKy+oRZEAZXpksyF3AKqBSKEF3hVjPbf",
+ "jxTwDCTuVgrsHP87lwB/QKKpXIAefRjHFjfXIBPNisjSjhz2Jagq14pgW1zjgp0DJ6bXhLyulCYzIJST",
+ "dz++IE+ePHluFlJQrSFzRDa4qmb2cE22+2h/lFEN/nOf1mi+EJLyLKnbv/vxBc5/7Ba4ayuqFMQPy4H5",
+ "Qo4OhxbgO0ZIiHENC9yHFvWbHpFD0fw8g7mQsOOe2Ma3uinh/F90V1Kq02UpGNeRfSH4ldjPUR4WdN/E",
+ "w2oAWu1LgylpBn2/lzz/8PHR+NHe5b+8P0j+0/357Mnljst/UY+7BQPRhmklJfB0nSwkUDwtS8r7+Hjn",
+ "6EEtRZVnZEnPcfNpgaze9SWmr2Wd5zSvDJ2wVIqDfCEUoY6MMpjTKtfET0wqnhs2ZUZz1E6YIqUU5yyD",
+ "bGy478WSpUuSUmWHwHbkguW5ocFKQTZEa/HVbThMlyFKDFzXwgcu6OtFRrOuLZiAFXKDJM2FgkSLLdeT",
+ "v3Eoz0h4oTR3lbraZUVOlkBwcvPBXraIO25oOs/XROO+ZoQqQom/msaEzclaVOQCNydnZ9jfrcZgrSAG",
+ "abg5rXvUHN4h9PWQEUHeTIgcKEfk+XPXRxmfs0UlQZGLJeilu/MkqFJwBUTM/gGpNtv+f45/eUOEJK9B",
+ "KbqAtzQ9I8BTkQ3vsZs0doP/Qwmz4YValDQ9i1/XOStYBOTXdMWKqiC8KmYgzX75+0ELIkFXkg8BZEfc",
+ "QmcFXfUnPZEVT3Fzm2lbgpohJabKnK4n5GhOCrr6fm/swFGE5jkpgWeML4he8UEhzcy9HbxEiopnO8gw",
+ "2mxYcGuqElI2Z5CRepQNkLhptsHD+NXgaSSrABw/yCA49SxbwOGwitCMObrmCynpAgKSmZBfHefCr1qc",
+ "Aa8ZHJmt8VMp4ZyJStWdBmDEqTeL11xoSEoJcxahsWOHDsM9bBvHXgsn4KSCa8o4ZIbzItBCg+VEgzAF",
+ "E25WZvpX9Iwq+O7p0AXefN1x9+eiu+sbd3yn3cZGiT2SkXvRfHUHNi42tfrvoPyFcyu2SOzPvY1kixNz",
+ "lcxZjtfMP8z+eTRUCplACxH+4lFswamuJOyf8ofmL5KQY015RmVmfinsT6+rXLNjtjA/5fanV2LB0mO2",
+ "GEBmDWtUm8Juhf3HjBdnx3oVVRpeCXFWleGC0pZWOluTo8OhTbZjXpUwD2pVNtQqTlZe07hqD72qN3IA",
+ "yEHcldQ0PIO1BAMtTef4z2qO9ETn8g/zT1nmMZwaAnYXLRoFnLHgnfvN/GSOPFidwIzCUmqQOsXrc/9j",
+ "ANC/SpiP9kf/Mm0sJVP7VU3duGbGy/HooBnn9mdqetr1dRSZ5jNh3O4ONh1bnfD24TGjRiFBQbUDww+5",
+ "SM+uBUMpRQlSM7uPMzNO/6Tg8GQJNANJMqrppFGqrJw1QO/Y8Wfsh1oSyMgV9wv+h+bEfDankGovvhnR",
+ "lSkjxInA0JQZic/eI3Ym0wAlUUEKK+QRI5xdCcoXzeSWQdcc9b1Dy4fuaJHdeWnlSoI9/CLM0hut8WAm",
+ "5PXopUMInDS6MKFm1Fr6NStv7yw2rcrE4SciT9sGnYEa82OfrYYY6g4fw1ULC8eafgIsKDPqbWChPdBt",
+ "Y0EUJcvhFs7rkqplfxFGwHnymBz/fPDs0ePfHz/7ztzQpRQLSQsyW2tQ5L67V4jS6xwe9FeGDL7KdXz0",
+ "7556Dao97lYMIcD12LucqBMwnMFijFh7gYHuUK5lxW8BhSClkBGZF0lHi1TkyTlIxUTEfPHWtSCuheFD",
+ "Vu7u/G6hJRdUETM3qmMVz0BOYpg3ehZe6RoKte2isEOfrHiDGzcglZKueztg1xtZnZt3lz1pI99L94qU",
+ "IBO94iSDWbUI7ygyl6IglGTYERniG5HBsaa6UrfABZrBGmDMRoQg0JmoNKGEi8wcaNM4zh8GbJloREHb",
+ "jw5Zjl7a+2cGRjpOabVYamLEShHb2qZjQlO7KQneFWpA9at1dtvKTmftZLkEmq3JDIATMXP6ldP8cJEU",
+ "zTLae1wcd2rAqnWCFlylFCkoBVni3EtbQfPt7C7rDXhCwBHgehaiBJlTeU1gtdA03wIotomBW4sTTint",
+ "Q73b9Js2sDt5uI1UGh3TUoGRXczpzkHDEAp3xMk5SFTOPun++Umuu31VOeA6cTfwCSvM8SWccqEgFTxT",
+ "0cFyqnSy7diaRi0xwawgOCmxk4oDDxgIXlGlrYrOeIYio2U3OA/2wSmGAR68UczIv/nLpD92avgkV5Wq",
+ "bxZVlaWQGrLYGjisNsz1Blb1XGIejF1fX1qQSsG2kYewFIzvkGVXYhFEtbMR1Tas/uLQHG/ugXUUlS0g",
+ "GkRsAuTYtwqwG5qPBwAx+kXdEwmHqQ7l1Dbr8UhpUZbm/Omk4nW/ITQd29YH+tembZ+4qG74eibAzK49",
+ "TA7yC4tZ6zhYUiPb4cikoGfmbkJJzdoS+jCbw5goxlNINlG+OZbHplV4BLYc0gEh2bkmg9k6h6NDv1Gi",
+ "GySCLbswtOABif2ttYCfBHbzW5BaIqMaSqOcoOjm7WrmcgibwIqmOl8blquXsCYXIIGoalYwra1Loy3U",
+ "aFEm4QBRJWrDjE6NtdZjL5Luolcf41DB8vrC6Xhkr9DN8J10LtEWOtzlXQqRT7ZTXw8ZUQh2EYIPSCnM",
+ "rjPnQfNulpwp3QPSXahow6gP8j3VQjOugPxfUZGUchQGKg01dxISjzxeBWYGw0zrOZm9dRsMQQ4FWBkH",
+ "vzx82F34w4duz5kic7jwbmfTsIuOhw9RYn8rlL7xCeiQ5uoowmRQtTQcKxIqZBTIyVY1E8fdSbsMhj46",
+ "9BPiYVKGo9iFSyHmt7Balq1izoYMVrGVup1DgfGeka7WCvQkehGWBsCIvxHkWY7aqJh3KJIUYEhFLVlp",
+ "hmx8I2sNrbiK/3f/3/ffHyT/SZM/9pLn/zb98PHp5YOHvR8fX37//f9v//Tk8vsH//6vMeFBaTaLWy5+",
+ "pmppIHWcY8WPuLU9zoW0Iufa3WRi/rnh7pCY2UyP+WBJuxDd29iGME6o3WykOSOo5OtbuGTsQERCKUEh",
+ "SwgFfGW/inkYVuEoT62VhqKvI9uuvw9ICO/8/dqjUsFzxiEpBId1NJKQcXiNH2O9LVsa6IwXxFDfrvzR",
+ "gr8DVnueXTbzpvjF3Q7Y0Ns6yOMWNr87bsc8EgaUoHoHeUkoSXOGyp/gSssq1aecongZkGvEtOqF5mGF",
+ "44VvEtdwIgqIG+qUU2VwWAudUbPZHCLq5I8AXu9Q1WIBSneEmznAKXetGCcVZxrnKsx+JXbDSpBo35zY",
+ "lgVdkznNUT/6A6Qgs0q3r3v0eytt1BdrqzHTEDE/5VSTHIwq95rxkxUO593LnmY46Ashz2osxHn+Ajgo",
+ "ppI4I/3JfkV+6pa/dLwVgxDtZ89vPvcF4GGPeWUd5EeHThQ+OkR5p7HS9GD/bKp7wXgSJbKTJZCCcQzu",
+ "6dAWuW+kNk9ADxp7j9v1U65X3BDSOc1ZRvX1yKHL4npn0Z6ODtW0NqKjifm1foi50BYiKWl6hh6U0YLp",
+ "ZTWbpKKYehVguhC1OjDNKBSC47dsSks2VSWk0/NHW8SxG/ArEmFXl+OR4zrq1n21buDYgrpz1jYQ/7cW",
+ "5N5PL0/I1O2UumdDNOzQgW89orW5FwItI7dZvA0xtjEqp/yUH8KccWa+75/yjGo6nVHFUjWtFMgfaE55",
+ "CpOFIPvEDXlINT3lPRY/+AoAAygdNGU1y1lKzsKruDmaNrKzP8Lp6XtDIKenH3oW0/7F6aaKnlE7QXLB",
+ "9FJUOnGha4mECyqzCOiqDl3CkW3g6aZZx8SNbSnShca58eOsmpalSnKR0jxRmmqIL78sc7P8gAwVwU7o",
+ "cSdKC+mZoOGMFhrc3zfC2YwlvfBxj5UCRf6roOV7xvUHkpxWe3tPgByU5Ssz5rGB478crzE0uS6hpd/v",
+ "GCvRDBbT7XHhVqCClZY0KekCVHT5GmiJu48XdYFm6Twn2C3ESe1vxKGaBXh8DG+AhePK0SC4uGPby79B",
+ "iC8BP+EWYhvDnRpj4XX3ywz1s8gNkV17u4IxortU6WViznZ0VcqQuN+ZOjR5YXiyt+AqtuDmELgo7hmQ",
+ "dAnpGWQYUApFqdfjVnfvJHA3nGcdTNnAaxv0gdGBaAqZAanKjDoZgPJ1N0xLgdY+Nu0dnMH6RDTBhVeJ",
+ "y7ocj1IbCp0Ymhk6qEipwWVkiDU8tm6M7uY7h5OBlJYlWeRi5k53TRb7NV34PsMH2d6Qt3CIY0RRo2ED",
+ "vZdURhBhiX8ABddYqBnvRqQfW15JpWYpK+36d4tCe9vqYwbZdrlErxMx794aPaYeZWK2cTKjKn6BgPli",
+ "9sOcoa4/zs9krYq4ggnBx3uOcGc5yiK1K9CebCpR6PLLtq+RhkCLUwlI3tzqHow2RkLxYUmVf4CA7zT8",
+ "gdnpoh1yWtROJ0NF3uuE+l4jOTEzbw7ndAj/w1GzR4ErKXiMUcfEesbWPQzjOj7avov0sbM+YNZHyY7G",
+ "V4p4HY9cdENsOwRHKSODHBZ24baxJxQH2j0VbJCB45f5PGccSBLzSlGlRMrsC5KGl7s5wAihDwmxBh6y",
+ "8wgxMg7ARms5DkzeiPBs8sVVgOTA0LxO/dhoZw/+hu3W5uaBqhNvt4qhfd7RHKJxE0But7FvhRqPoixp",
+ "SENotSK2yQx6KlWMRA1r6ttl+tYfBTngdZy0OGtyFrPWGakCkAyPfbdAbSD32dxc8g8Cp4mEBVMaGr3Z",
+ "nFZvCPq8totzoSGZM6l0gip7dHmm0Y8KhcEfTdM4+2mhitgXbiyLcx+c9gzWScbyKr7bbt6/HZpp39T6",
+ "k6pmZ7DGSwZouiQzfJFpbqHW9KbNhqmtZ3bjgl/ZBb+it7be3WjJNDUTSyF0Z45vhKo6/GTTYYoQYIw4",
+ "+rs2iNIN7AV1n0PIdSzwNtDJUKs1DNNGhg9aDXqHKfNjbxK/AiiGOa8dKbqWQNDduAqGnjjKM8J08KCx",
+ "HyU4cAZoWbJs1dHh7agDbjsU4K8gqFuJP+KKGtWDbcFAoK/HAlEkeJuD3dLgzrRPU3m4tslOmDHSV4iQ",
+ "gCGEUzHlEyv0EWVIG1//bsPVCdD8b7D+zbTF5Ywux6ObqfwxXLsRt+D6bb29UTyjLduqgC0L3hVRTstS",
+ "inOaJ84wMkSaUpw70sTm3o7ymVldXP0+eXnw6q0D3+ieOVBpTWUbV4Xtym9mVUYjFnLggPiH20Za9bqz",
+ "FcSCza9fw4TGlIsluEeygSxnuJgjLnu8GkNZcBSdcWUed6ltNZU4m55d4gbbHpS1aa/RiK1lr23No+eU",
+ "5V4V9dAOuL9wcY099cpcIRzgxlbBwLib3Cq76Z3u+OloqGsLTwrn2vCMt7Av1RURvBtYZERI1HCRVAu6",
+ "NhRkjdN95sSrIjHHL1E5S+NmCz5Thji4tfmaxgQbDwijZsSKDbgQeMWCsUwztYO3rANkMEcUmWhS2oC7",
+ "mXAphirO/lkBYRlwbT5JPJWdg2rOpU9T0b9OjezQn8sNbFNWNMPfRMYwQw1JFwjEZgEjtDD3wD2sFU6/",
+ "0No0bn4IDINXcFSFM/auxA1OJkcfjpqtt3/ZthSHGYH6/M8Qhn09vj0dkTdbLC2gA3NE0wsN3hYHwzeF",
+ "6X2FO6K5EhDc8DIY2+QjuRKRYSp+QbnNFmL6WRy63gqszcD0uhASw+4VRL30TCVzKf6AuCY7NxsViX10",
+ "qERxEXtPIuHMXSZaW2WaPFAevyEcg6Q9JMkFH0nbkThwwpHKA9M5vmP1Bi7KLVnbzCYt93X8cIQhJ1M7",
+ "fnM4HMy9MJ2cXsxo7JGvEagMTAeNk6ZlitOC+M5+F5zVsKG9wN9Tt2U2Vr0E2QQo999FXVM4+rZIPoOU",
+ "FTSPS0kZYr/9MidjC2bTw1QKgvwjbiCbV8tSkcvhYt1gDWqO5mRvHGQ4cruRsXOm2CwHbPHItphRhbdW",
+ "bW6tu5jlAddLhc0f79B8WfFMQqaXyiJWCVILsKjK1bbvGegLAE72sN2j5+Q+Wv0VO4cHBotOFhntP3qO",
+ "YSn2j73YZefyQG3iKxkylv9wjCVOx+j2sGOYS8qNOom+m7DJ+4ZZ2IbTZLvucpawpeN6289SQTldQNyb",
+ "W2yByfbF3USjYQcvPLOZp5SWYk2Yjs8Pmhr+NBCaZtifBYOkoiiYLswB0oIoURh6apKL2En9cDaNlXvw",
+ "7+HyH9HFUlq1AboK8+c1ENu7PLZqdIS9oQW00Tom1D4vylnzgNMxxAk58o8UMQNCnfjA4sbMZZaOIp3Z",
+ "QnzozbhGJarS8+SvJF1SSVPD/iZD4Caz755Gsj60H3rzqwH+2fEuQYE8j6NeDpC9lyZcX3KfC54UhqNk",
+ "D5pQ0OBURp9rC03zeFCL5+jdmKbNQ+8qgJpRkkFyq1rkRgNOfSPC4xsGvCEp1uu5Ej1eeWWfnTIrGScP",
+ "Wpkd+vXdKydlFELGnqw3x91JHBK0ZHCO8TXxTTJj3nAvZL7TLtwE+i/rZWk0gFos82c5pgj8ULE8+60J",
+ "be8kzpGUp8uoj2NmOv7eZPqql2zPcfSF9JJyDnl0OHtn/u7v1sjt/w+x6zwF4zu27SbEscvtLK4BvA2m",
+ "B8pPaNDLdG4mCLHajvWtg8PyhcgIztM8x22orJ/jJ0gO8s8KlI5lHcUPNq4SbVlGL7C5KQjwDKXqCfnJ",
+ "ZupdAmm90ERplhVVbl/7QbYA6YysVZkLmo2JGefk5cErYme1fWxGRZsbY4HCXHsVHRtG8HZ/t1Annyor",
+ "Hoa5+zib48LMqpXGx7tK06KMRdibFie+AYbxh3ZdFPNC7EzIoZWwlZff7CSGHuZMFkYyrUezPB5pwvxH",
+ "a5ouUXRtcZNhkt89qYunShUkN6zzxNXP7/HcGbhdXheb1mVMhNEvLpiyCVrhHNpB/fULF6c6+SD/9vJk",
+ "xbmllCiP3vQC6zpo98BZ5703/UYh6yD+ioKLEpVM4ao5bo6xV/QNcTdhTi+roX1NWGcV84m3U8oFZym+",
+ "4A1SwtYgu2Svu/hFdnjs3DVL+SPuTmjkcEXT9NThQQ6Lg4l7PCN0iOsbZoOvZlMtddg/NWYVXVJNFqCV",
+ "42yQjX0qJmcvYVyBS6eAeX8DPilky9eEHDLqvkxqM/cVyQhDfAcE4B/NtzdOPcKwvDPGURByaHMRgNai",
+ "gbkotZGemCYLAcqtp/0kV703fSb4LDWD1YeJz12JY1hXjVm29Uv2hzrwXkrnFTRtX5i2BN0yzc+tcGI7",
+ "6UFZukmjL2rrHY4lkxpEcMTblHhzf4DcevxwtA3ktjG8AO9TQ2hwjs5JKPEe7hFGnZerk2DvnOaVpShs",
+ "QWxYT/QZGOMRMF4xDk1m1cgFkUavBNwYPK8D/VQqqbYi4E487QRojh7JGENT2plobzpUZ4MRJbhGP8fw",
+ "NjYpxQYYR92gEdwoX9cJXQ11B8LEC8wk7RDZTxCGUpUTojIM3OykDIsxDsO4fbK99gXQPwZ9mch215La",
+ "k3OVm2jowUsqYvLmyxWklXW4C5sbgpYlSfEFaXBfRC2aTBnlqZjlkdi3w/pjkIcPg2xna/w3lrFjGCXO",
+ "I37lmCzv/saOVxZY2yP1xE1DTIlii2tuc9P/Vvc5F4s2IJ/XoLDxjIckEzvdLw3bDN9A9nLBWMZaP1HE",
+ "MCThk7Si0lQ/rmmfSWTkUaW0ybe5WSkfzpw5RtY/EIz4rnl9T+3tYn0MQyGJ6WAELdUuPF5T0jx17x9M",
+ "m+4yNoKNZ7BpNm3Jiqh9ZSiGwYYwmM+93rvJRT0pE8feiFAfHNMH6G8+8o6UlDkHWnNi+5h1Mbr9qOld",
+ "oveaDe4uwkW+4iCxlfQzKQ0T+CFoynJV54OsqxsE/lYjz3XzsVy4lykYOlyrpv6NCij/m4+yt7PYqhlN",
+ "1jM0BFxQmfkW0ZvNX5rJQARIN6bShq6yONDzembWuE/7YYWRZ5PoLk9zoRhfJENRFW2PZW3uu6esXRZ1",
+ "CExRhXDNQbpsh9oXJUm08O7WTXBsQoXLiX0dJKjBrDoWuMG3Te+ax1uYK4LakjTO5hwukEgoqIFOBk+s",
+ "hufchOwX9ruPo/O5AjqZOSLjenpNtr6R8o5zpnpIDKl+ThzL3R6fdx2RgnFuk8mq2HsrblAZKpulFFmV",
+ "Wlt/eDDAi147PxncwEqigkDaX2WPp+f4gPZVEO18Buup5avpkvLmJXP7WNucsnYNwduczm7fqrQVv9Py",
+ "hV3A4lbg/JLC0nhUCpEnA9rlUf/ZWPcMnLH0DDJi7g7vchrI5Ubuo1JTmw8vlmufRbUsgUP2YEKIEbeK",
+ "Uq+9JbGdlaQzOb+nN82/wlmzyr7kdHLc5JTHvaW2yNMN+ZsfZjNXs1UPbziVHWTzRHrFB1gbvYhkNty1",
+ "QEDEttcRUAKislDEpJRrPqfZ6Xz3ZbkI6YeB0FuE6LOW4Gff3XfseULCLQuAgSHjigJgP8R71+XhOpCr",
+ "VQr669x5A1q4HcD9LohvtJc+coeVDj3bRemIP1823VHrsQjxD+z7p+uz6SytWgJu3tiu/zbkw7F+igF3",
+ "YQenFcuzbZvbcv42CazQvfm7c5N/kRRav9vw4/5xc9mErmIt6W4CIiay1tbkwVSBW3cHj67rFvHf4oWR",
+ "VpLpNb5U8FoR+z36AvQn4K6igitQU8d7unBDWxvNRR8s6tZNOaufhC0xUZj7Gu1nGlOxvlzRoszBnYvv",
+ "783+Ak/++jTbe/LoL7O/7j3bS+Hps+d7e/T5U/ro+ZNH8Pivz57uwaP5d89nj7PHTx/Pnj5++t2z5+mT",
+ "p49mT797/pd7vpaUBbSp0/R3zDOXHLw9Sk4MsA1OaMn+BmubWcqQsc9ZRVM8iUavyEf7/qf/7U/YJBVF",
+ "UP7W/TpyoSijpdal2p9OLy4uJmGX6QL1rESLKl1O/Tz9zLdvj2o3uQ1vxh21HlBDCripjhQO8Nu7l8cn",
+ "5ODt0aQhmNH+aG+yN3mEqSFL4LRko/3RE/wJT88S933qiG20//FyPJougeZ66f4oQEuW+k/qgi4WICcu",
+ "eZf56fzx1HvZph+djnlpRl3E3nBYh3/g5e3ntBpbiQttt75EYpA2QblsCmMys68ViBMBeYZ+WKu2GdZW",
+ "I+soC4ptB1Wdxq1a4e+/ofKXsezSseRgsYLm9Xve4YJ2Qc1fX+f32V8vI+E+HzpFyh7v7X2CwmTj1ige",
+ "L9escPb0FkFs23lvDGh3uB5XeE1zQzdQF60d4YIefbMLOuL4ct6wLWLZ8uV49Owb3qEjbg4OzQm2DALm",
+ "+6zwV37GxQX3Lc2VXBUFlWu8cIOUXaFodTnIcttPVZzFdZgPQ5DnPEiX1LL4zNaezsZE1YUZSsmEERyw",
+ "xHMGqQSK17yQGJXTZEx32j3YShSvD/6ONt/XB38n35Oh8rfB9FarbjPxn0BHMvr/sG5KOG7k6F+KTY6/",
+ "2orB386dd9Or5q4uxDdbF2IHpn23u3dVP77Zqh/ftki6qp8ZUsIFTzimjzsHEpi17mTUr1pGfbb35Jtd",
+ "zTHIc5YCOYGiFJJKlq/Jr7yOy76ZCF7znIoHkfIb+U/PRdVI0YH4HqSynX5sRSNk240nrbCEbEyYbiTD",
+ "eBHtIMune5MzbhL6UJ7ZeFof4KbGPrENWuusT9Xux7iX9mYSE9IDV8sP66PDXeTy1pqCfBsx2byFr6uV",
+ "5v+kFotrFzj/lDdAD44faEb8w51PzJt3Y6ZP955+PgjCXXgjNPkRgzU+MUv/pHaCOFkFzAbTRU8/+tQc",
+ "OzAYl/amzVq6VfFjTMWc0LF7i+sK89QeesNPLCO0mYf6XMPMsCu/6GfmiXGKJhvJ18IjbLrsCF120XvH",
+ "F+74wo34QpegGo5gKyRPP2I0WsgOekcSS8P9iRwlQZ5yKQqfKFOQOeh0aesddX3ZEbbin4cN85RNSVRu",
+ "zF863nXcov4jclyL89dico8dI3Gw48/WfXo5HqUgI8T3i49VN5/ZHOOp6qd/PlcQPpivK4DXL+ddfhGm",
+ "iCFQLYiLSCdmF68E5Ytm8r5vHdFyPWvSHYJvguAeU3vpEhnY4+UW8a0bPoLbkiTkDYpDeMD9y7c/o9nj",
+ "U97In3pBbwQHAiumsH6BpcU7d2MtLtSFcOvw47DG2YDo0HY6ftQrll1O61K5Q0LFW1fRdaNQ0dzUjAdl",
+ "7EPzCi1LoFJd+5Le7g476cx4dBgm3Bd1qBOhTcHcCCgGL1f0JP7bLm7EP6+37q6q811V5+tVdf6sKnMT",
+ "kGNZlfcTyQ7X+KL6tP4i+vQbwRO8bYFrL/m10PLldGt8RNCqfOVTxXBh60kLiUJCyAfUZKfrFQZdCS2m",
+ "giGdw2TsLtuU6nRZldOP+B8MBr1swi5tXqSpNbNtum9t/ezRrQZQ3NU8/wZqnn95E96NxNHOaiWUdRAa",
+ "euuR/pvT4msN9QvwtCOTXXO1rHQmLoI45qam2+BJsi1u9SS9ERnYcdux/P08fxSDG1z8c/8A1Twi/j7L",
+ "Y7NpZ5/KMeUeF6a0Wiy1zfEaTSBdd0xoagk/serAthfLtpV/mXcOhOYSaLYmMwBOxMwsutlXXGSnKp3j",
+ "hPGHtw1cpRQpKAVZEiZ32wRaHVWO9kC9AU8IOAJcz0KUIHMqrwmsZQmbAe1mNa3Bra0+7tT3od5t+k0b",
+ "2J083EYqoSm0rgVG1eTgiu5GULgjTlBUZZ94//wk192+qsT8YZGn4/brCSvwmRunXChIBc9UdDAsHbbt",
+ "2GLV/GAtCmzKbH9SPmd1flvrbOhFmBn5t/o9WG/spsZhndnPSlqQRZMmw2rDXG9gVc8l5pH6iS6h+7aR",
+ "h7AUjF/n+gtSTOjAImGGiyzuguU5+mbjckcLiAYRmwA59q0C7IZq/wAgTDWIrt+NtyknSLautChLc/50",
+ "UvG63xCajm3rA/1r07ZPXC4QHPl6JkCFYraD/MJi1qbxXFJFHBykoGdOQl+4eOw+zOYwJorx1FXjG8q/",
+ "wAo4Nq3CI7DlkHaFvPD4t85Z53B06DdKdINEsGUXhhYcEyu/CiHwqlpe137wCc2ebbE6EK8asdL+Pb2g",
+ "TCdzIe2NmWChiIgHtT37f1CmXXkSpwNr4cyWrtSEZShunCCJrQqDWV39YJ8ugRWRqCsz1Y9C7uSwbWyr",
+ "WhCzMFJxzfxzO6wz72XMr8/7eSc930nPd9LznfR8Jz3fSc930vOd9PyppecvE4FJksTzaf+8Jva4hoy+",
+ "SQn/G3q/8jkfnDRCfy3yo5JgRHRzjjdGZmig+dSljkcXejRRsg3xDtPQp2Y6xkmZU6xBt9L+oTGWnwsK",
+ "0fj8xzYHkuE1psGTx+T454Nnjx7//vjZd4b7LG0tnLDtfV8YSul1Dg9cBFud4MSHsgGnmGgZI9mo135S",
+ "H+Vgpfk5y4Eog6yX2PwQziE3orz1dRKjjPTVoxOg+QuHHMuVQOkfRLbuEI5Z/xRR0SaZxmHOOJWRZOh9",
+ "QukhWQssiOCy+/c0qMtbjZmIxwn0N2zbXg3UAYuS9yZ62RoX4OrYuLF38ZGZPfXoJC6R+hdl2QQhcmTW",
+ "sKevJpK+m6XXHRxsa6QKd/6+1ah3j/jowcNjO/ZZTAkWJbYUt0pMowXwxLGFZCaytS8Y7OoytLisTZg/",
+ "zGRtNnpw5T7cMbivHhg2ixhd6ZapJ1qwKCju1aRY/TKM06Zq38g3r08d7UpSN46Z7A7X5xpB0MV9IclC",
+ "iqp8YEvT8jWqxEVJ+dqbwYysiKWoMOc0xnnfLqeuE6X2+OzulZRCfQUf7Xd/t2jB9KqujFJm6yjFsxh2",
+ "q/1sx3hTy2Jb1jufwzNSd2egyk5/E/0uu0DH2vRX2ozGkeoXnVoXd4+r/kdcCW+lOGdGcY5y2H4UVsMQ",
+ "JltvBhmwLLwaOqk2/N3Q5qfv6MVJqyLJbjx1lTjB88ZS6RJQIKultEheEnNfSkGzlCp8P+IKlH1iiVWv",
+ "jiJ2BwQT80v1I33NBT7ZKljiuDvJk+1IbzchJoBRNpHml5Uum2jTA/dcp4WNO1PAn8UU8IM/fIpQzKvd",
+ "OZxB0cAd2BS90Cse5VJT9BIOR7wFB+KtbXmrvrve8G0XXuPCdC4IyEtCSZozdFAIrrSsUn3KKZpAO0nH",
+ "O+49b9gdFqVe+CZxK3zESO6GOuUUC03XhtGoSDWHWAk9AC+xqWqxAKU7nHgOcMpdK8abotaYwz2xcZ/m",
+ "ujYcfWJbFnRN5lj4SpA/QAoyM1pEmLMEDYpKszx3/kQzDRHzU041ycEw/dfMCHRmOG9zqn3krlilx8JA",
+ "bQqbUXagPv1P9is+WnDL93YjNG/Zzz4aevxl8j4nLBuE/OjQ5RM7OsQUMY0nsQf7Z3MvFYwnUSIzN77z",
+ "yHdpi9w3Mp4noAeNT9Lt+ik3wrQWBBk91dcjh64boHcW7enoUE1rIzreAr/WD7G3rAuRGJURi2GNFkwv",
+ "qxlmXvZvXKcLUb93nWYUCsHxWzalJZuqEtLp+aMt8sEN+BWJsKu7m/vPY8QP6cCclnrjsahQd+8H7uVb",
+ "SN/6deds3RqidJch9S5D6l0OzbsMqXe7e5ch9S5/6F3+0P+p+UMnGyVEl3Nja0a/1ktjrNFPm0qrNQMP",
+ "m7Vy//XdkkxPCDnBOpbU3AFwDpLmJKXKCkbcRsoVbLHURFVpCpDtn/KkBUkqCjfx/ea/Vs09rfb2ngDZ",
+ "e9DtY+0WAeft90VRFT/ZMsvfk9PR6ag3koRCnIPLBBbW9bO9tg77v+pxf+mVCEUrDBpXfCVCoqr5nKXM",
+ "ojwXRhlYiE58Hxf4BaQBziaaIEzbpKuIT4yLdNE57fKDbaG7f79fofDNQYdc7pKafPpqN5tqot6UB24c",
+ "u8cQ71jG52AZX5xp/Inyr92lWvvKFhQ6Ulu5VG8gSdUV42LF5J2M1FRkDCsc4g1X1zZ8/8HwcQXy3F9+",
+ "TcG+/ekUs50vhdLTkbma2sX8wo/mfqALO4K7XErJzjFT4ofL/w4AAP//80cbi5XqAAA=",
}
// GetSwagger returns the Swagger specification corresponding to the generated code
diff --git a/daemon/algod/api/server/v2/generated/types.go b/daemon/algod/api/server/v2/generated/types.go
index 08c8d0f2b..2ee2e91cd 100644
--- a/daemon/algod/api/server/v2/generated/types.go
+++ b/daemon/algod/api/server/v2/generated/types.go
@@ -299,6 +299,9 @@ type DryrunTxnResult struct {
AppCallMessages *[]string `json:"app-call-messages,omitempty"`
AppCallTrace *[]DryrunState `json:"app-call-trace,omitempty"`
+ // Execution cost of app call transaction
+ Cost *uint64 `json:"cost,omitempty"`
+
// Disassembled program line by line.
Disassembly []string `json:"disassembly"`
@@ -307,7 +310,7 @@ type DryrunTxnResult struct {
LocalDeltas *[]AccountStateDelta `json:"local-deltas,omitempty"`
LogicSigMessages *[]string `json:"logic-sig-messages,omitempty"`
LogicSigTrace *[]DryrunState `json:"logic-sig-trace,omitempty"`
- Logs *[]LogItem `json:"logs,omitempty"`
+ Logs *[][]byte `json:"logs,omitempty"`
}
// ErrorResponse defines model for ErrorResponse.
@@ -337,14 +340,50 @@ type EvalDeltaKeyValue struct {
Value EvalDelta `json:"value"`
}
-// LogItem defines model for LogItem.
-type LogItem struct {
+// PendingTransactionResponse defines model for PendingTransactionResponse.
+type PendingTransactionResponse struct {
- // unique application identifier
- Id uint64 `json:"id"`
+ // The application index if the transaction was found and it created an application.
+ ApplicationIndex *uint64 `json:"application-index,omitempty"`
+
+ // The number of the asset's unit that were transferred to the close-to address.
+ AssetClosingAmount *uint64 `json:"asset-closing-amount,omitempty"`
+
+ // The asset index if the transaction was found and it created an asset.
+ AssetIndex *uint64 `json:"asset-index,omitempty"`
+
+ // Rewards in microalgos applied to the close remainder to account.
+ CloseRewards *uint64 `json:"close-rewards,omitempty"`
+
+ // Closing amount for the transaction.
+ ClosingAmount *uint64 `json:"closing-amount,omitempty"`
+
+ // The round where this transaction was confirmed, if present.
+ ConfirmedRound *uint64 `json:"confirmed-round,omitempty"`
- // base64 encoded log message
- Value string `json:"value"`
+ // Application state delta.
+ GlobalStateDelta *StateDelta `json:"global-state-delta,omitempty"`
+
+ // Inner transactions produced by application execution.
+ InnerTxns *[]PendingTransactionResponse `json:"inner-txns,omitempty"`
+
+ // \[ld\] Local state key/value changes for the application being executed by this transaction.
+ LocalStateDelta *[]AccountStateDelta `json:"local-state-delta,omitempty"`
+
+ // \[lg\] Logs for the application being executed by this transaction.
+ Logs *[][]byte `json:"logs,omitempty"`
+
+ // Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.
+ PoolError string `json:"pool-error"`
+
+ // Rewards in microalgos applied to the receiver account.
+ ReceiverRewards *uint64 `json:"receiver-rewards,omitempty"`
+
+ // Rewards in microalgos applied to the sender account.
+ SenderRewards *uint64 `json:"sender-rewards,omitempty"`
+
+ // The raw signed transaction.
+ Txn map[string]interface{} `json:"txn"`
}
// StateDelta defines model for StateDelta.
@@ -549,49 +588,6 @@ type NodeStatusResponse struct {
TimeSinceLastRound uint64 `json:"time-since-last-round"`
}
-// PendingTransactionResponse defines model for PendingTransactionResponse.
-type PendingTransactionResponse struct {
-
- // The application index if the transaction was found and it created an application.
- ApplicationIndex *uint64 `json:"application-index,omitempty"`
-
- // The number of the asset's unit that were transferred to the close-to address.
- AssetClosingAmount *uint64 `json:"asset-closing-amount,omitempty"`
-
- // The asset index if the transaction was found and it created an asset.
- AssetIndex *uint64 `json:"asset-index,omitempty"`
-
- // Rewards in microalgos applied to the close remainder to account.
- CloseRewards *uint64 `json:"close-rewards,omitempty"`
-
- // Closing amount for the transaction.
- ClosingAmount *uint64 `json:"closing-amount,omitempty"`
-
- // The round where this transaction was confirmed, if present.
- ConfirmedRound *uint64 `json:"confirmed-round,omitempty"`
-
- // Application state delta.
- GlobalStateDelta *StateDelta `json:"global-state-delta,omitempty"`
-
- // \[ld\] Local state key/value changes for the application being executed by this transaction.
- LocalStateDelta *[]AccountStateDelta `json:"local-state-delta,omitempty"`
-
- // \[lg\] Logs for the application being executed by this transaction.
- Logs *[]LogItem `json:"logs,omitempty"`
-
- // Indicates that the transaction was kicked out of this node's transaction pool (and specifies why that happened). An empty string indicates the transaction wasn't kicked out of this node's txpool due to an error.
- PoolError string `json:"pool-error"`
-
- // Rewards in microalgos applied to the receiver account.
- ReceiverRewards *uint64 `json:"receiver-rewards,omitempty"`
-
- // Rewards in microalgos applied to the sender account.
- SenderRewards *uint64 `json:"sender-rewards,omitempty"`
-
- // The raw signed transaction.
- Txn map[string]interface{} `json:"txn"`
-}
-
// PendingTransactionsResponse defines model for PendingTransactionsResponse.
type PendingTransactionsResponse struct {
diff --git a/daemon/algod/api/server/v2/handlers.go b/daemon/algod/api/server/v2/handlers.go
index 7a6042544..f71def6df 100644
--- a/daemon/algod/api/server/v2/handlers.go
+++ b/daemon/algod/api/server/v2/handlers.go
@@ -471,6 +471,23 @@ func (v2 *Handlers) TransactionParams(ctx echo.Context) error {
return ctx.JSON(http.StatusOK, response)
}
+type preEncodedTxInfo struct {
+ AssetIndex *uint64 `codec:"asset-index,omitempty"`
+ AssetClosingAmount *uint64 `codec:"asset-closing-amount,omitempty"`
+ ApplicationIndex *uint64 `codec:"application-index,omitempty"`
+ CloseRewards *uint64 `codec:"close-rewards,omitempty"`
+ ClosingAmount *uint64 `codec:"closing-amount,omitempty"`
+ ConfirmedRound *uint64 `codec:"confirmed-round,omitempty"`
+ GlobalStateDelta *generated.StateDelta `codec:"global-state-delta,omitempty"`
+ LocalStateDelta *[]generated.AccountStateDelta `codec:"local-state-delta,omitempty"`
+ PoolError string `codec:"pool-error"`
+ ReceiverRewards *uint64 `codec:"receiver-rewards,omitempty"`
+ SenderRewards *uint64 `codec:"sender-rewards,omitempty"`
+ Txn transactions.SignedTxn `codec:"txn"`
+ Logs *[][]byte `codec:"logs,omitempty"`
+ Inners *[]preEncodedTxInfo `codec:"inner-txns,omitempty"`
+}
+
// PendingTransactionInformation returns a transaction with the specified txID
// from the transaction pool. If not found looks for the transaction in the
// last proto.MaxTxnLife rounds
@@ -500,29 +517,10 @@ func (v2 *Handlers) PendingTransactionInformation(ctx echo.Context, txid string,
}
// Encoding wasn't working well without embedding "real" objects.
- response := struct {
- AssetIndex *uint64 `codec:"asset-index,omitempty"`
- AssetClosingAmount *uint64 `codec:"asset-closing-amount,omitempty"`
- ApplicationIndex *uint64 `codec:"application-index,omitempty"`
- CloseRewards *uint64 `codec:"close-rewards,omitempty"`
- ClosingAmount *uint64 `codec:"closing-amount,omitempty"`
- ConfirmedRound *uint64 `codec:"confirmed-round,omitempty"`
- GlobalStateDelta *generated.StateDelta `codec:"global-state-delta,omitempty"`
- LocalStateDelta *[]generated.AccountStateDelta `codec:"local-state-delta,omitempty"`
- PoolError string `codec:"pool-error"`
- ReceiverRewards *uint64 `codec:"receiver-rewards,omitempty"`
- SenderRewards *uint64 `codec:"sender-rewards,omitempty"`
- Txn transactions.SignedTxn `codec:"txn"`
- Logs *[]generated.LogItem `codec:"logs,omitempty"`
- }{
+ response := preEncodedTxInfo{
Txn: txn.Txn,
}
- handle, contentType, err := getCodecHandle(params.Format)
- if err != nil {
- return badRequest(ctx, err, errFailedParsingFormatOption, v2.Log)
- }
-
if txn.ConfirmedRound != 0 {
r := uint64(txn.ConfirmedRound)
response.ConfirmedRound = &r
@@ -535,11 +533,13 @@ func (v2 *Handlers) PendingTransactionInformation(ctx echo.Context, txid string,
response.AssetIndex = computeAssetIndexFromTxn(txn, v2.Node.Ledger())
response.ApplicationIndex = computeAppIndexFromTxn(txn, v2.Node.Ledger())
response.LocalStateDelta, response.GlobalStateDelta = convertToDeltas(txn)
- response.Logs, err = convertToLogItems(txn, response.ApplicationIndex)
- if err != nil {
- return internalError(ctx, err, err.Error(), v2.Log)
- }
+ response.Logs = convertLogs(txn)
+ response.Inners = convertInners(&txn)
+ }
+ handle, contentType, err := getCodecHandle(params.Format)
+ if err != nil {
+ return badRequest(ctx, err, errFailedParsingFormatOption, v2.Log)
}
data, err := encode(handle, response)
if err != nil {
diff --git a/daemon/algod/api/server/v2/test/handlers_test.go b/daemon/algod/api/server/v2/test/handlers_test.go
index b5930e28a..dd89a23ef 100644
--- a/daemon/algod/api/server/v2/test/handlers_test.go
+++ b/daemon/algod/api/server/v2/test/handlers_test.go
@@ -41,7 +41,9 @@ import (
"github.com/algorand/go-algorand/logging"
"github.com/algorand/go-algorand/node"
"github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/algorand/go-algorand/util/execpool"
+ "github.com/algorand/go-codec/codec"
)
func setupTestForMethodGet(t *testing.T) (v2.Handlers, echo.Context, *httptest.ResponseRecorder, []account.Root, []transactions.SignedTxn, func()) {
@@ -64,6 +66,7 @@ func setupTestForMethodGet(t *testing.T) (v2.Handlers, echo.Context, *httptest.R
}
func TestSimpleMockBuilding(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
handler, _, _, _, _, releasefunc := setupTestForMethodGet(t)
@@ -87,6 +90,7 @@ func accountInformationTest(t *testing.T, address string, expectedCode int) {
}
func TestAccountInformation(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
accountInformationTest(t, poolAddr.String(), 200)
@@ -102,6 +106,7 @@ func getBlockTest(t *testing.T, blockNum uint64, format string, expectedCode int
}
func TestGetBlock(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
getBlockTest(t, 0, "json", 200)
@@ -111,6 +116,7 @@ func TestGetBlock(t *testing.T) {
}
func TestGetBlockJsonEncoding(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
handler, c, rec, _, _, releasefunc := setupTestForMethodGet(t)
@@ -146,7 +152,7 @@ func TestGetBlockJsonEncoding(t *testing.T) {
Lsig: lsig,
}
ad := transactions.ApplyData{
- EvalDelta: basics.EvalDelta{
+ EvalDelta: transactions.EvalDelta{
LocalDeltas: map[uint64]basics.StateDelta{
1: {"key": basics.ValueDelta{Action: 1}},
},
@@ -206,6 +212,7 @@ func TestGetBlockJsonEncoding(t *testing.T) {
}
func TestGetSupply(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
handler, c, _, _, _, releasefunc := setupTestForMethodGet(t)
@@ -215,6 +222,7 @@ func TestGetSupply(t *testing.T) {
}
func TestGetStatus(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
handler, c, rec, _, _, releasefunc := setupTestForMethodGet(t)
@@ -246,6 +254,7 @@ func TestGetStatus(t *testing.T) {
}
func TestGetStatusAfterBlock(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
handler, c, rec, _, _, releasefunc := setupTestForMethodGet(t)
@@ -258,6 +267,7 @@ func TestGetStatusAfterBlock(t *testing.T) {
}
func TestGetTransactionParams(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
handler, c, rec, _, _, releasefunc := setupTestForMethodGet(t)
@@ -281,6 +291,7 @@ func pendingTransactionInformationTest(t *testing.T, txidToUse int, format strin
}
func TestPendingTransactionInformation(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
pendingTransactionInformationTest(t, 0, "json", 200)
@@ -316,7 +327,45 @@ func getPendingTransactionsTest(t *testing.T, format string, max uint64, expecte
}
}
+func TestPendingTransactionLogsEncoding(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ response := generated.PendingTransactionResponse{
+ Logs: &[][]byte{
+ {},
+ []byte(string("a")),
+ []byte(string("test")),
+ {0},
+ {0, 1, 2},
+ },
+ }
+
+ // log messages should be base64 encoded
+ expected := `{
+ "logs": [
+ "",
+ "YQ==",
+ "dGVzdA==",
+ "AA==",
+ "AAEC"
+ ],
+ "pool-error": "",
+ "txn": null
+}`
+
+ for _, handle := range []codec.Handle{protocol.JSONHandle, protocol.JSONStrictHandle} {
+ var output []byte
+ enc := codec.NewEncoderBytes(&output, handle)
+
+ err := enc.Encode(response)
+ require.NoError(t, err)
+
+ require.Equal(t, expected, string(output))
+ }
+}
+
func TestPendingTransactions(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
getPendingTransactionsTest(t, "json", 0, 200)
@@ -344,6 +393,7 @@ func pendingTransactionsByAddressTest(t *testing.T, rootkeyToUse int, format str
}
func TestPendingTransactionsByAddress(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
pendingTransactionsByAddressTest(t, 0, "json", 200)
@@ -381,6 +431,7 @@ func postTransactionTest(t *testing.T, txnToUse, expectedCode int) {
}
func TestPostTransaction(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
postTransactionTest(t, -1, 400)
@@ -410,6 +461,7 @@ func startCatchupTest(t *testing.T, catchpoint string, nodeError error, expected
}
func TestStartCatchup(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
goodCatchPoint := "5894690#DVFRZUYHEFKRLK5N6DNJRR4IABEVN2D6H76F3ZSEPIE6MKXMQWQA"
@@ -450,6 +502,7 @@ func abortCatchupTest(t *testing.T, catchpoint string, expectedCode int) {
}
func TestAbortCatchup(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
goodCatchPoint := "5894690#DVFRZUYHEFKRLK5N6DNJRR4IABEVN2D6H76F3ZSEPIE6MKXMQWQA"
@@ -482,6 +535,7 @@ func tealCompileTest(t *testing.T, bytesToUse []byte, expectedCode int, enableDe
}
func TestTealCompile(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
tealCompileTest(t, nil, 200, true) // nil program should work
@@ -543,6 +597,7 @@ func tealDryrunTest(
}
func TestTealDryrun(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
var gdr generated.DryrunRequest
diff --git a/daemon/algod/api/server/v2/utils.go b/daemon/algod/api/server/v2/utils.go
index a3bfa1251..6498c575c 100644
--- a/daemon/algod/api/server/v2/utils.go
+++ b/daemon/algod/api/server/v2/utils.go
@@ -110,7 +110,7 @@ func computeCreatableIndexInPayset(tx node.TxnWithStatus, txnCounter uint64, pay
// computeAssetIndexFromTxn returns the created asset index given a confirmed
// transaction whose confirmation block is available in the ledger. Note that
// 0 is an invalid asset index (they start at 1).
-func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx *uint64) {
+func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) *uint64 {
// Must have ledger
if l == nil {
return nil
@@ -128,6 +128,15 @@ func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx *uint
return nil
}
+ aid := uint64(tx.ApplyData.ConfigAsset)
+ if aid > 0 {
+ return &aid
+ }
+ // If there is no ConfigAsset in the ApplyData, it must be a
+ // transaction before inner transactions were activated. Therefore
+ // the computeCreatableIndexInPayset function will work properly
+ // to deduce the aid. Proceed.
+
// Look up block where transaction was confirmed
blk, err := l.Block(tx.ConfirmedRound)
if err != nil {
@@ -145,7 +154,7 @@ func computeAssetIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx *uint
// computeAppIndexFromTxn returns the created app index given a confirmed
// transaction whose confirmation block is available in the ledger. Note that
// 0 is an invalid asset index (they start at 1).
-func computeAppIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx *uint64) {
+func computeAppIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) *uint64 {
// Must have ledger
if l == nil {
return nil
@@ -163,6 +172,15 @@ func computeAppIndexFromTxn(tx node.TxnWithStatus, l *data.Ledger) (aidx *uint64
return nil
}
+ aid := uint64(tx.ApplyData.ApplicationID)
+ if aid > 0 {
+ return &aid
+ }
+ // If there is no ApplicationID in the ApplyData, it must be a
+ // transaction before inner transactions were activated. Therefore
+ // the computeCreatableIndexInPayset function will work properly
+ // to deduce the aid. Proceed.
+
// Look up block where transaction was confirmed
blk, err := l.Block(tx.ConfirmedRound)
if err != nil {
@@ -266,33 +284,51 @@ func convertToDeltas(txn node.TxnWithStatus) (*[]generated.AccountStateDelta, *g
return localStateDelta, stateDeltaToStateDelta(txn.ApplyData.EvalDelta.GlobalDelta)
}
-func convertToLogItems(txn node.TxnWithStatus, aidx *uint64) (*[]generated.LogItem, error) {
- var logItems *[]generated.LogItem
+func convertLogs(txn node.TxnWithStatus) *[][]byte {
+ var logItems *[][]byte
if len(txn.ApplyData.EvalDelta.Logs) > 0 {
- l := make([]generated.LogItem, 0, len(txn.ApplyData.EvalDelta.Logs))
-
- for _, v := range txn.ApplyData.EvalDelta.Logs {
- // Resolve appid from index
- var appid uint64
- if v.ID != 0 {
- return nil, fmt.Errorf("logging for a foreign app is not supported")
- } else if txn.Txn.Txn.ApplicationID == 0 {
- if aidx == nil {
- return nil, fmt.Errorf("app index cannot be nil")
- }
- appid = *aidx
- } else {
- appid = uint64(txn.Txn.Txn.ApplicationID)
- }
- l = append(l, generated.LogItem{
- Id: appid,
- Value: base64.StdEncoding.EncodeToString([]byte(v.Message)),
- })
+ l := make([][]byte, len(txn.ApplyData.EvalDelta.Logs))
+
+ for i, log := range txn.ApplyData.EvalDelta.Logs {
+ l[i] = []byte(log)
}
logItems = &l
}
- return logItems, nil
+ return logItems
+}
+
+func convertInners(txn *node.TxnWithStatus) *[]preEncodedTxInfo {
+ inner := make([]preEncodedTxInfo, len(txn.ApplyData.EvalDelta.InnerTxns))
+ for i, itxn := range txn.ApplyData.EvalDelta.InnerTxns {
+ inner[i] = convertInnerTxn(&itxn)
+ }
+ return &inner
+}
+
+func convertInnerTxn(txn *transactions.SignedTxnWithAD) preEncodedTxInfo {
+ // This copies from handlers.PendingTransactionInformation, with
+ // simplifications because we have a SignedTxnWithAD rather than
+ // TxnWithStatus, and we know this txn has committed.
+
+ response := preEncodedTxInfo{Txn: txn.SignedTxn}
+
+ response.ClosingAmount = &txn.ApplyData.ClosingAmount.Raw
+ response.AssetClosingAmount = &txn.ApplyData.AssetClosingAmount
+ response.SenderRewards = &txn.ApplyData.SenderRewards.Raw
+ response.ReceiverRewards = &txn.ApplyData.ReceiverRewards.Raw
+ response.CloseRewards = &txn.ApplyData.CloseRewards.Raw
+
+ // Since this is an inner txn, we know these indexes will be populated. No
+ // need to search payset for IDs
+ response.AssetIndex = numOrNil(uint64(txn.ApplyData.ConfigAsset))
+ response.ApplicationIndex = numOrNil(uint64(txn.ApplyData.ApplicationID))
+
+ // Deltas, Logs, and Inners can not be set until we allow appl
+ // response.LocalStateDelta, response.GlobalStateDelta = convertToDeltas(txn)
+ // response.Logs = convertLogs(txn)
+ // response.Inners = convertInners(&txn)
+ return response
}
// printableUTF8OrEmpty checks to see if the entire string is a UTF8 printable string.
diff --git a/daemon/algod/server.go b/daemon/algod/server.go
index 707836530..1eedac466 100644
--- a/daemon/algod/server.go
+++ b/daemon/algod/server.go
@@ -227,7 +227,7 @@ func (s *Server) Start() {
}()
// Handle signals cleanly
- c := make(chan os.Signal)
+ c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
signal.Ignore(syscall.SIGHUP)
diff --git a/daemon/kmd/wallet/driver/ledger_hid.go b/daemon/kmd/wallet/driver/ledger_hid.go
index 22a8e05ac..8094df50b 100644
--- a/daemon/kmd/wallet/driver/ledger_hid.go
+++ b/daemon/kmd/wallet/driver/ledger_hid.go
@@ -25,6 +25,7 @@ import (
)
const ledgerVendorID = 0x2c97
+const ledgerUsagePage = 0xffa0
// LedgerUSB is a wrapper around a Ledger USB HID device, used to implement
// the protocol used for sending messages to the application running on the
@@ -82,7 +83,11 @@ func (l *LedgerUSB) WritePackets(msg []byte) error {
if err != nil {
return err
}
- if cc != len(packet) {
+ // on Windows:
+ // The usb library adds one extra byte to the input passed to the USB device
+ // so the written bytes are larger than what we've send
+ // https://github.com/karalabe/hid/blob/9c14560f9ee858c43f40b5cd01392b167aacf4e8/hid_enabled.go#L167
+ if cc < len(packet) {
return fmt.Errorf("WritePackets: short write: %d != %d", cc, len(packet))
}
@@ -202,7 +207,13 @@ func LedgerEnumerate() ([]hid.DeviceInfo, error) {
}
var infos []hid.DeviceInfo
+ // The enumeration process is based on:
+ // https://github.com/LedgerHQ/blue-loader-python/blob/master/ledgerblue/comm.py#L212
+ // we search for the Ledger Vendor id and igonre devices that don't have specific usagepage or interface
for _, info := range hid.Enumerate(ledgerVendorID, 0) {
+ if info.UsagePage != ledgerUsagePage && info.Interface != 0 {
+ continue
+ }
infos = append(infos, info)
}
diff --git a/data/basics/msgp_gen.go b/data/basics/msgp_gen.go
index 6127920e8..8e61362d6 100644
--- a/data/basics/msgp_gen.go
+++ b/data/basics/msgp_gen.go
@@ -107,22 +107,6 @@ import (
// |-----> Msgsize
// |-----> MsgIsZero
//
-// EvalDelta
-// |-----> (*) MarshalMsg
-// |-----> (*) CanMarshalMsg
-// |-----> (*) UnmarshalMsg
-// |-----> (*) CanUnmarshalMsg
-// |-----> (*) Msgsize
-// |-----> (*) MsgIsZero
-//
-// LogItem
-// |-----> (*) MarshalMsg
-// |-----> (*) CanMarshalMsg
-// |-----> (*) UnmarshalMsg
-// |-----> (*) CanUnmarshalMsg
-// |-----> (*) Msgsize
-// |-----> (*) MsgIsZero
-//
// Round
// |-----> MarshalMsg
// |-----> CanMarshalMsg
@@ -4134,725 +4118,6 @@ func (z DeltaAction) MsgIsZero() bool {
}
// MarshalMsg implements msgp.Marshaler
-func (z *EvalDelta) MarshalMsg(b []byte) (o []byte) {
- o = msgp.Require(b, z.Msgsize())
- // omitempty: check for empty values
- zb0008Len := uint32(3)
- var zb0008Mask uint8 /* 4 bits */
- if len((*z).GlobalDelta) == 0 {
- zb0008Len--
- zb0008Mask |= 0x2
- }
- if len((*z).LocalDeltas) == 0 {
- zb0008Len--
- zb0008Mask |= 0x4
- }
- if len((*z).Logs) == 0 {
- zb0008Len--
- zb0008Mask |= 0x8
- }
- // variable map header, size zb0008Len
- o = append(o, 0x80|uint8(zb0008Len))
- if zb0008Len != 0 {
- if (zb0008Mask & 0x2) == 0 { // if not empty
- // string "gd"
- o = append(o, 0xa2, 0x67, 0x64)
- if (*z).GlobalDelta == nil {
- o = msgp.AppendNil(o)
- } else {
- o = msgp.AppendMapHeader(o, uint32(len((*z).GlobalDelta)))
- }
- zb0001_keys := make([]string, 0, len((*z).GlobalDelta))
- for zb0001 := range (*z).GlobalDelta {
- zb0001_keys = append(zb0001_keys, zb0001)
- }
- sort.Sort(SortString(zb0001_keys))
- for _, zb0001 := range zb0001_keys {
- zb0002 := (*z).GlobalDelta[zb0001]
- _ = zb0002
- o = msgp.AppendString(o, zb0001)
- o = zb0002.MarshalMsg(o)
- }
- }
- if (zb0008Mask & 0x4) == 0 { // if not empty
- // string "ld"
- o = append(o, 0xa2, 0x6c, 0x64)
- if (*z).LocalDeltas == nil {
- o = msgp.AppendNil(o)
- } else {
- o = msgp.AppendMapHeader(o, uint32(len((*z).LocalDeltas)))
- }
- zb0003_keys := make([]uint64, 0, len((*z).LocalDeltas))
- for zb0003 := range (*z).LocalDeltas {
- zb0003_keys = append(zb0003_keys, zb0003)
- }
- sort.Sort(SortUint64(zb0003_keys))
- for _, zb0003 := range zb0003_keys {
- zb0004 := (*z).LocalDeltas[zb0003]
- _ = zb0004
- o = msgp.AppendUint64(o, zb0003)
- if zb0004 == nil {
- o = msgp.AppendNil(o)
- } else {
- o = msgp.AppendMapHeader(o, uint32(len(zb0004)))
- }
- zb0005_keys := make([]string, 0, len(zb0004))
- for zb0005 := range zb0004 {
- zb0005_keys = append(zb0005_keys, zb0005)
- }
- sort.Sort(SortString(zb0005_keys))
- for _, zb0005 := range zb0005_keys {
- zb0006 := zb0004[zb0005]
- _ = zb0006
- o = msgp.AppendString(o, zb0005)
- o = zb0006.MarshalMsg(o)
- }
- }
- }
- if (zb0008Mask & 0x8) == 0 { // if not empty
- // string "lg"
- o = append(o, 0xa2, 0x6c, 0x67)
- if (*z).Logs == nil {
- o = msgp.AppendNil(o)
- } else {
- o = msgp.AppendArrayHeader(o, uint32(len((*z).Logs)))
- }
- for zb0007 := range (*z).Logs {
- // omitempty: check for empty values
- zb0009Len := uint32(2)
- var zb0009Mask uint8 /* 3 bits */
- if (*z).Logs[zb0007].ID == 0 {
- zb0009Len--
- zb0009Mask |= 0x2
- }
- if (*z).Logs[zb0007].Message == "" {
- zb0009Len--
- zb0009Mask |= 0x4
- }
- // variable map header, size zb0009Len
- o = append(o, 0x80|uint8(zb0009Len))
- if (zb0009Mask & 0x2) == 0 { // if not empty
- // string "i"
- o = append(o, 0xa1, 0x69)
- o = msgp.AppendUint64(o, (*z).Logs[zb0007].ID)
- }
- if (zb0009Mask & 0x4) == 0 { // if not empty
- // string "m"
- o = append(o, 0xa1, 0x6d)
- o = msgp.AppendString(o, (*z).Logs[zb0007].Message)
- }
- }
- }
- }
- return
-}
-
-func (_ *EvalDelta) CanMarshalMsg(z interface{}) bool {
- _, ok := (z).(*EvalDelta)
- return ok
-}
-
-// UnmarshalMsg implements msgp.Unmarshaler
-func (z *EvalDelta) UnmarshalMsg(bts []byte) (o []byte, err error) {
- var field []byte
- _ = field
- var zb0008 int
- var zb0009 bool
- zb0008, zb0009, bts, err = msgp.ReadMapHeaderBytes(bts)
- if _, ok := err.(msgp.TypeError); ok {
- zb0008, zb0009, bts, err = msgp.ReadArrayHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- if zb0008 > 0 {
- zb0008--
- var zb0010 int
- var zb0011 bool
- zb0010, zb0011, bts, err = msgp.ReadMapHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "GlobalDelta")
- return
- }
- if zb0010 > config.MaxStateDeltaKeys {
- err = msgp.ErrOverflow(uint64(zb0010), uint64(config.MaxStateDeltaKeys))
- err = msgp.WrapError(err, "struct-from-array", "GlobalDelta")
- return
- }
- if zb0011 {
- (*z).GlobalDelta = nil
- } else if (*z).GlobalDelta == nil {
- (*z).GlobalDelta = make(StateDelta, zb0010)
- }
- for zb0010 > 0 {
- var zb0001 string
- var zb0002 ValueDelta
- zb0010--
- zb0001, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "GlobalDelta")
- return
- }
- bts, err = zb0002.UnmarshalMsg(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "GlobalDelta", zb0001)
- return
- }
- (*z).GlobalDelta[zb0001] = zb0002
- }
- }
- if zb0008 > 0 {
- zb0008--
- var zb0012 int
- var zb0013 bool
- zb0012, zb0013, bts, err = msgp.ReadMapHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "LocalDeltas")
- return
- }
- if zb0012 > config.MaxEvalDeltaAccounts {
- err = msgp.ErrOverflow(uint64(zb0012), uint64(config.MaxEvalDeltaAccounts))
- err = msgp.WrapError(err, "struct-from-array", "LocalDeltas")
- return
- }
- if zb0013 {
- (*z).LocalDeltas = nil
- } else if (*z).LocalDeltas == nil {
- (*z).LocalDeltas = make(map[uint64]StateDelta, zb0012)
- }
- for zb0012 > 0 {
- var zb0003 uint64
- var zb0004 StateDelta
- zb0012--
- zb0003, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "LocalDeltas")
- return
- }
- var zb0014 int
- var zb0015 bool
- zb0014, zb0015, bts, err = msgp.ReadMapHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "LocalDeltas", zb0003)
- return
- }
- if zb0014 > config.MaxStateDeltaKeys {
- err = msgp.ErrOverflow(uint64(zb0014), uint64(config.MaxStateDeltaKeys))
- err = msgp.WrapError(err, "struct-from-array", "LocalDeltas", zb0003)
- return
- }
- if zb0015 {
- zb0004 = nil
- } else if zb0004 == nil {
- zb0004 = make(StateDelta, zb0014)
- }
- for zb0014 > 0 {
- var zb0005 string
- var zb0006 ValueDelta
- zb0014--
- zb0005, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "LocalDeltas", zb0003)
- return
- }
- bts, err = zb0006.UnmarshalMsg(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "LocalDeltas", zb0003, zb0005)
- return
- }
- zb0004[zb0005] = zb0006
- }
- (*z).LocalDeltas[zb0003] = zb0004
- }
- }
- if zb0008 > 0 {
- zb0008--
- var zb0016 int
- var zb0017 bool
- zb0016, zb0017, bts, err = msgp.ReadArrayHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs")
- return
- }
- if zb0016 > config.MaxLogCalls {
- err = msgp.ErrOverflow(uint64(zb0016), uint64(config.MaxLogCalls))
- err = msgp.WrapError(err, "struct-from-array", "Logs")
- return
- }
- if zb0017 {
- (*z).Logs = nil
- } else if (*z).Logs != nil && cap((*z).Logs) >= zb0016 {
- (*z).Logs = ((*z).Logs)[:zb0016]
- } else {
- (*z).Logs = make([]LogItem, zb0016)
- }
- for zb0007 := range (*z).Logs {
- var zb0018 int
- var zb0019 bool
- zb0018, zb0019, bts, err = msgp.ReadMapHeaderBytes(bts)
- if _, ok := err.(msgp.TypeError); ok {
- zb0018, zb0019, bts, err = msgp.ReadArrayHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007)
- return
- }
- if zb0018 > 0 {
- zb0018--
- (*z).Logs[zb0007].ID, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007, "struct-from-array", "ID")
- return
- }
- }
- if zb0018 > 0 {
- zb0018--
- (*z).Logs[zb0007].Message, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007, "struct-from-array", "Message")
- return
- }
- }
- if zb0018 > 0 {
- err = msgp.ErrTooManyArrayFields(zb0018)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007, "struct-from-array")
- return
- }
- }
- } else {
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007)
- return
- }
- if zb0019 {
- (*z).Logs[zb0007] = LogItem{}
- }
- for zb0018 > 0 {
- zb0018--
- field, bts, err = msgp.ReadMapKeyZC(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007)
- return
- }
- switch string(field) {
- case "i":
- (*z).Logs[zb0007].ID, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007, "ID")
- return
- }
- case "m":
- (*z).Logs[zb0007].Message, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007, "Message")
- return
- }
- default:
- err = msgp.ErrNoField(string(field))
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Logs", zb0007)
- return
- }
- }
- }
- }
- }
- }
- if zb0008 > 0 {
- err = msgp.ErrTooManyArrayFields(zb0008)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array")
- return
- }
- }
- } else {
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- if zb0009 {
- (*z) = EvalDelta{}
- }
- for zb0008 > 0 {
- zb0008--
- field, bts, err = msgp.ReadMapKeyZC(bts)
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- switch string(field) {
- case "gd":
- var zb0020 int
- var zb0021 bool
- zb0020, zb0021, bts, err = msgp.ReadMapHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "GlobalDelta")
- return
- }
- if zb0020 > config.MaxStateDeltaKeys {
- err = msgp.ErrOverflow(uint64(zb0020), uint64(config.MaxStateDeltaKeys))
- err = msgp.WrapError(err, "GlobalDelta")
- return
- }
- if zb0021 {
- (*z).GlobalDelta = nil
- } else if (*z).GlobalDelta == nil {
- (*z).GlobalDelta = make(StateDelta, zb0020)
- }
- for zb0020 > 0 {
- var zb0001 string
- var zb0002 ValueDelta
- zb0020--
- zb0001, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "GlobalDelta")
- return
- }
- bts, err = zb0002.UnmarshalMsg(bts)
- if err != nil {
- err = msgp.WrapError(err, "GlobalDelta", zb0001)
- return
- }
- (*z).GlobalDelta[zb0001] = zb0002
- }
- case "ld":
- var zb0022 int
- var zb0023 bool
- zb0022, zb0023, bts, err = msgp.ReadMapHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "LocalDeltas")
- return
- }
- if zb0022 > config.MaxEvalDeltaAccounts {
- err = msgp.ErrOverflow(uint64(zb0022), uint64(config.MaxEvalDeltaAccounts))
- err = msgp.WrapError(err, "LocalDeltas")
- return
- }
- if zb0023 {
- (*z).LocalDeltas = nil
- } else if (*z).LocalDeltas == nil {
- (*z).LocalDeltas = make(map[uint64]StateDelta, zb0022)
- }
- for zb0022 > 0 {
- var zb0003 uint64
- var zb0004 StateDelta
- zb0022--
- zb0003, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "LocalDeltas")
- return
- }
- var zb0024 int
- var zb0025 bool
- zb0024, zb0025, bts, err = msgp.ReadMapHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "LocalDeltas", zb0003)
- return
- }
- if zb0024 > config.MaxStateDeltaKeys {
- err = msgp.ErrOverflow(uint64(zb0024), uint64(config.MaxStateDeltaKeys))
- err = msgp.WrapError(err, "LocalDeltas", zb0003)
- return
- }
- if zb0025 {
- zb0004 = nil
- } else if zb0004 == nil {
- zb0004 = make(StateDelta, zb0024)
- }
- for zb0024 > 0 {
- var zb0005 string
- var zb0006 ValueDelta
- zb0024--
- zb0005, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "LocalDeltas", zb0003)
- return
- }
- bts, err = zb0006.UnmarshalMsg(bts)
- if err != nil {
- err = msgp.WrapError(err, "LocalDeltas", zb0003, zb0005)
- return
- }
- zb0004[zb0005] = zb0006
- }
- (*z).LocalDeltas[zb0003] = zb0004
- }
- case "lg":
- var zb0026 int
- var zb0027 bool
- zb0026, zb0027, bts, err = msgp.ReadArrayHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "Logs")
- return
- }
- if zb0026 > config.MaxLogCalls {
- err = msgp.ErrOverflow(uint64(zb0026), uint64(config.MaxLogCalls))
- err = msgp.WrapError(err, "Logs")
- return
- }
- if zb0027 {
- (*z).Logs = nil
- } else if (*z).Logs != nil && cap((*z).Logs) >= zb0026 {
- (*z).Logs = ((*z).Logs)[:zb0026]
- } else {
- (*z).Logs = make([]LogItem, zb0026)
- }
- for zb0007 := range (*z).Logs {
- var zb0028 int
- var zb0029 bool
- zb0028, zb0029, bts, err = msgp.ReadMapHeaderBytes(bts)
- if _, ok := err.(msgp.TypeError); ok {
- zb0028, zb0029, bts, err = msgp.ReadArrayHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007)
- return
- }
- if zb0028 > 0 {
- zb0028--
- (*z).Logs[zb0007].ID, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007, "struct-from-array", "ID")
- return
- }
- }
- if zb0028 > 0 {
- zb0028--
- (*z).Logs[zb0007].Message, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007, "struct-from-array", "Message")
- return
- }
- }
- if zb0028 > 0 {
- err = msgp.ErrTooManyArrayFields(zb0028)
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007, "struct-from-array")
- return
- }
- }
- } else {
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007)
- return
- }
- if zb0029 {
- (*z).Logs[zb0007] = LogItem{}
- }
- for zb0028 > 0 {
- zb0028--
- field, bts, err = msgp.ReadMapKeyZC(bts)
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007)
- return
- }
- switch string(field) {
- case "i":
- (*z).Logs[zb0007].ID, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007, "ID")
- return
- }
- case "m":
- (*z).Logs[zb0007].Message, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007, "Message")
- return
- }
- default:
- err = msgp.ErrNoField(string(field))
- if err != nil {
- err = msgp.WrapError(err, "Logs", zb0007)
- return
- }
- }
- }
- }
- }
- default:
- err = msgp.ErrNoField(string(field))
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- }
- }
- }
- o = bts
- return
-}
-
-func (_ *EvalDelta) CanUnmarshalMsg(z interface{}) bool {
- _, ok := (z).(*EvalDelta)
- return ok
-}
-
-// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
-func (z *EvalDelta) Msgsize() (s int) {
- s = 1 + 3 + msgp.MapHeaderSize
- if (*z).GlobalDelta != nil {
- for zb0001, zb0002 := range (*z).GlobalDelta {
- _ = zb0001
- _ = zb0002
- s += 0 + msgp.StringPrefixSize + len(zb0001) + zb0002.Msgsize()
- }
- }
- s += 3 + msgp.MapHeaderSize
- if (*z).LocalDeltas != nil {
- for zb0003, zb0004 := range (*z).LocalDeltas {
- _ = zb0003
- _ = zb0004
- s += 0 + msgp.Uint64Size + msgp.MapHeaderSize
- if zb0004 != nil {
- for zb0005, zb0006 := range zb0004 {
- _ = zb0005
- _ = zb0006
- s += 0 + msgp.StringPrefixSize + len(zb0005) + zb0006.Msgsize()
- }
- }
- }
- }
- s += 3 + msgp.ArrayHeaderSize
- for zb0007 := range (*z).Logs {
- s += 1 + 2 + msgp.Uint64Size + 2 + msgp.StringPrefixSize + len((*z).Logs[zb0007].Message)
- }
- return
-}
-
-// MsgIsZero returns whether this is a zero value
-func (z *EvalDelta) MsgIsZero() bool {
- return (len((*z).GlobalDelta) == 0) && (len((*z).LocalDeltas) == 0) && (len((*z).Logs) == 0)
-}
-
-// MarshalMsg implements msgp.Marshaler
-func (z *LogItem) MarshalMsg(b []byte) (o []byte) {
- o = msgp.Require(b, z.Msgsize())
- // omitempty: check for empty values
- zb0001Len := uint32(2)
- var zb0001Mask uint8 /* 3 bits */
- if (*z).ID == 0 {
- zb0001Len--
- zb0001Mask |= 0x2
- }
- if (*z).Message == "" {
- zb0001Len--
- zb0001Mask |= 0x4
- }
- // variable map header, size zb0001Len
- o = append(o, 0x80|uint8(zb0001Len))
- if zb0001Len != 0 {
- if (zb0001Mask & 0x2) == 0 { // if not empty
- // string "i"
- o = append(o, 0xa1, 0x69)
- o = msgp.AppendUint64(o, (*z).ID)
- }
- if (zb0001Mask & 0x4) == 0 { // if not empty
- // string "m"
- o = append(o, 0xa1, 0x6d)
- o = msgp.AppendString(o, (*z).Message)
- }
- }
- return
-}
-
-func (_ *LogItem) CanMarshalMsg(z interface{}) bool {
- _, ok := (z).(*LogItem)
- return ok
-}
-
-// UnmarshalMsg implements msgp.Unmarshaler
-func (z *LogItem) UnmarshalMsg(bts []byte) (o []byte, err error) {
- var field []byte
- _ = field
- var zb0001 int
- var zb0002 bool
- zb0001, zb0002, bts, err = msgp.ReadMapHeaderBytes(bts)
- if _, ok := err.(msgp.TypeError); ok {
- zb0001, zb0002, bts, err = msgp.ReadArrayHeaderBytes(bts)
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- if zb0001 > 0 {
- zb0001--
- (*z).ID, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "ID")
- return
- }
- }
- if zb0001 > 0 {
- zb0001--
- (*z).Message, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array", "Message")
- return
- }
- }
- if zb0001 > 0 {
- err = msgp.ErrTooManyArrayFields(zb0001)
- if err != nil {
- err = msgp.WrapError(err, "struct-from-array")
- return
- }
- }
- } else {
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- if zb0002 {
- (*z) = LogItem{}
- }
- for zb0001 > 0 {
- zb0001--
- field, bts, err = msgp.ReadMapKeyZC(bts)
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- switch string(field) {
- case "i":
- (*z).ID, bts, err = msgp.ReadUint64Bytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "ID")
- return
- }
- case "m":
- (*z).Message, bts, err = msgp.ReadStringBytes(bts)
- if err != nil {
- err = msgp.WrapError(err, "Message")
- return
- }
- default:
- err = msgp.ErrNoField(string(field))
- if err != nil {
- err = msgp.WrapError(err)
- return
- }
- }
- }
- }
- o = bts
- return
-}
-
-func (_ *LogItem) CanUnmarshalMsg(z interface{}) bool {
- _, ok := (z).(*LogItem)
- return ok
-}
-
-// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
-func (z *LogItem) Msgsize() (s int) {
- s = 1 + 2 + msgp.Uint64Size + 2 + msgp.StringPrefixSize + len((*z).Message)
- return
-}
-
-// MsgIsZero returns whether this is a zero value
-func (z *LogItem) MsgIsZero() bool {
- return ((*z).ID == 0) && ((*z).Message == "")
-}
-
-// MarshalMsg implements msgp.Marshaler
func (z Round) MarshalMsg(b []byte) (o []byte) {
o = msgp.Require(b, z.Msgsize())
o = msgp.AppendUint64(o, uint64(z))
diff --git a/data/basics/msgp_gen_test.go b/data/basics/msgp_gen_test.go
index c0e43a4fd..5ac65240f 100644
--- a/data/basics/msgp_gen_test.go
+++ b/data/basics/msgp_gen_test.go
@@ -372,126 +372,6 @@ func BenchmarkUnmarshalBalanceRecord(b *testing.B) {
}
}
-func TestMarshalUnmarshalEvalDelta(t *testing.T) {
- partitiontest.PartitionTest(t)
- v := EvalDelta{}
- bts := v.MarshalMsg(nil)
- left, err := v.UnmarshalMsg(bts)
- if err != nil {
- t.Fatal(err)
- }
- if len(left) > 0 {
- t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
- }
-
- left, err = msgp.Skip(bts)
- if err != nil {
- t.Fatal(err)
- }
- if len(left) > 0 {
- t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
- }
-}
-
-func TestRandomizedEncodingEvalDelta(t *testing.T) {
- protocol.RunEncodingTest(t, &EvalDelta{})
-}
-
-func BenchmarkMarshalMsgEvalDelta(b *testing.B) {
- v := EvalDelta{}
- b.ReportAllocs()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- v.MarshalMsg(nil)
- }
-}
-
-func BenchmarkAppendMsgEvalDelta(b *testing.B) {
- v := EvalDelta{}
- bts := make([]byte, 0, v.Msgsize())
- bts = v.MarshalMsg(bts[0:0])
- b.SetBytes(int64(len(bts)))
- b.ReportAllocs()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- bts = v.MarshalMsg(bts[0:0])
- }
-}
-
-func BenchmarkUnmarshalEvalDelta(b *testing.B) {
- v := EvalDelta{}
- bts := v.MarshalMsg(nil)
- b.ReportAllocs()
- b.SetBytes(int64(len(bts)))
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- _, err := v.UnmarshalMsg(bts)
- if err != nil {
- b.Fatal(err)
- }
- }
-}
-
-func TestMarshalUnmarshalLogItem(t *testing.T) {
- partitiontest.PartitionTest(t)
- v := LogItem{}
- bts := v.MarshalMsg(nil)
- left, err := v.UnmarshalMsg(bts)
- if err != nil {
- t.Fatal(err)
- }
- if len(left) > 0 {
- t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
- }
-
- left, err = msgp.Skip(bts)
- if err != nil {
- t.Fatal(err)
- }
- if len(left) > 0 {
- t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
- }
-}
-
-func TestRandomizedEncodingLogItem(t *testing.T) {
- protocol.RunEncodingTest(t, &LogItem{})
-}
-
-func BenchmarkMarshalMsgLogItem(b *testing.B) {
- v := LogItem{}
- b.ReportAllocs()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- v.MarshalMsg(nil)
- }
-}
-
-func BenchmarkAppendMsgLogItem(b *testing.B) {
- v := LogItem{}
- bts := make([]byte, 0, v.Msgsize())
- bts = v.MarshalMsg(bts[0:0])
- b.SetBytes(int64(len(bts)))
- b.ReportAllocs()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- bts = v.MarshalMsg(bts[0:0])
- }
-}
-
-func BenchmarkUnmarshalLogItem(b *testing.B) {
- v := LogItem{}
- bts := v.MarshalMsg(nil)
- b.ReportAllocs()
- b.SetBytes(int64(len(bts)))
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- _, err := v.UnmarshalMsg(bts)
- if err != nil {
- b.Fatal(err)
- }
- }
-}
-
func TestMarshalUnmarshalStateDelta(t *testing.T) {
partitiontest.PartitionTest(t)
v := StateDelta{}
diff --git a/data/basics/teal.go b/data/basics/teal.go
index 7dab26b83..6fe1ce7c4 100644
--- a/data/basics/teal.go
+++ b/data/basics/teal.go
@@ -123,80 +123,6 @@ func (sd StateDelta) Valid(proto *config.ConsensusParams) error {
return nil
}
-// LogItem is contains logs for an application
-// ID is the offset into Txn.ForeignApps
-type LogItem struct {
- _struct struct{} `codec:",omitempty,omitemptyarray"`
-
- ID uint64 `codec:"i"`
- Message string `codec:"m"`
-}
-
-// Equal checks whether two LogItems are equal.
-func (l LogItem) Equal(o LogItem) bool {
-
- return l.ID == o.ID && l.Message == o.Message
-
-}
-
-// EvalDelta stores StateDeltas for an application's global key/value store, as
-// well as StateDeltas for some number of accounts holding local state for that
-// application
-type EvalDelta struct {
- _struct struct{} `codec:",omitempty,omitemptyarray"`
-
- GlobalDelta StateDelta `codec:"gd"`
-
- // When decoding EvalDeltas, the integer key represents an offset into
- // [txn.Sender, txn.Accounts[0], txn.Accounts[1], ...]
- LocalDeltas map[uint64]StateDelta `codec:"ld,allocbound=config.MaxEvalDeltaAccounts"`
-
- Logs []LogItem `codec:"lg,allocbound=config.MaxLogCalls"`
-}
-
-// Equal compares two EvalDeltas and returns whether or not they are
-// equivalent. It does not care about nilness equality of LocalDeltas,
-// because the msgpack codec will encode/decode an empty map as nil, and we want
-// an empty generated EvalDelta to equal an empty one we decode off the wire.
-func (ed EvalDelta) Equal(o EvalDelta) bool {
- // LocalDeltas length should be the same
- if len(ed.LocalDeltas) != len(o.LocalDeltas) {
- return false
- }
-
- // All keys and local StateDeltas should be the same
- for k, v := range ed.LocalDeltas {
- // Other LocalDelta must have value for key
- ov, ok := o.LocalDeltas[k]
- if !ok {
- return false
- }
-
- // Other LocalDelta must have same value for key
- if !ov.Equal(v) {
- return false
- }
- }
-
- // GlobalDeltas must be equal
- if !ed.GlobalDelta.Equal(o.GlobalDelta) {
- return false
- }
-
- // Logs must be equal
- if len(ed.Logs) != len(o.Logs) {
- return false
- }
- for i, l := range ed.Logs {
- ok := l.Equal(o.Logs[i])
- if !ok {
- return false
- }
- }
-
- return true
-}
-
// StateSchema sets maximums on the number of each type that may be stored
type StateSchema struct {
_struct struct{} `codec:",omitempty,omitemptyarray"`
diff --git a/data/basics/teal_test.go b/data/basics/teal_test.go
index 526573aaf..35aa9a193 100644
--- a/data/basics/teal_test.go
+++ b/data/basics/teal_test.go
@@ -143,114 +143,3 @@ func TestStateDeltaEqual(t *testing.T) {
d2 = StateDelta{"test": {Action: SetBytesAction, Bytes: "val1"}}
a.False(d1.Equal(d2))
}
-
-func TestEvalDeltaEqual(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- a := require.New(t)
-
- d1 := EvalDelta{}
- d2 := EvalDelta{}
- a.True(d1.Equal(d2))
-
- d2 = EvalDelta{
- GlobalDelta: nil,
- LocalDeltas: nil,
- Logs: nil,
- }
- a.True(d1.Equal(d2))
-
- d2 = EvalDelta{
- GlobalDelta: StateDelta{},
- LocalDeltas: map[uint64]StateDelta{},
- Logs: []LogItem{},
- }
- a.True(d1.Equal(d2))
-
- d2 = EvalDelta{
- GlobalDelta: StateDelta{"test": {Action: SetUintAction, Uint: 0}},
- }
- a.False(d1.Equal(d2))
-
- d1 = EvalDelta{
- GlobalDelta: StateDelta{"test": {Action: SetUintAction, Uint: 0}},
- }
- a.True(d1.Equal(d2))
-
- d2 = EvalDelta{
- LocalDeltas: map[uint64]StateDelta{
- 0: {"test": {Action: SetUintAction, Uint: 0}},
- },
- }
- a.False(d1.Equal(d2))
-
- d1 = EvalDelta{
- LocalDeltas: map[uint64]StateDelta{
- 0: {"test": {Action: SetUintAction, Uint: 1}},
- },
- }
- a.False(d1.Equal(d2))
-
- d2 = EvalDelta{
- LocalDeltas: map[uint64]StateDelta{
- 0: {"test": {Action: SetUintAction, Uint: 1}},
- },
- }
- a.True(d1.Equal(d2))
-
- d1 = EvalDelta{
- LocalDeltas: map[uint64]StateDelta{
- 0: {"test": {Action: SetBytesAction, Bytes: "val"}},
- },
- }
- d2 = EvalDelta{
- LocalDeltas: map[uint64]StateDelta{
- 0: {"test": {Action: SetBytesAction, Bytes: "val"}},
- },
- }
- a.True(d1.Equal(d2))
-
- d2 = EvalDelta{
- LocalDeltas: map[uint64]StateDelta{
- 0: {"test": {Action: SetBytesAction, Bytes: "val1"}},
- },
- }
- a.False(d1.Equal(d2))
-
- d2 = EvalDelta{
- LocalDeltas: map[uint64]StateDelta{
- 1: {"test": {Action: SetBytesAction, Bytes: "val"}},
- },
- }
- a.False(d1.Equal(d2))
-
- d2 = EvalDelta{
- Logs: []LogItem{{ID: 0, Message: "val"}},
- }
- a.False(d1.Equal(d2))
-
- d1 = EvalDelta{
- Logs: []LogItem{{ID: 0, Message: "val2"}},
- }
- a.False(d1.Equal(d2))
-
- d1 = EvalDelta{
- Logs: []LogItem{{ID: 1, Message: "val"}},
- }
- a.False(d1.Equal(d2))
-
- d1 = EvalDelta{
- Logs: []LogItem{{ID: 1, Message: "val2"}},
- }
- a.False(d1.Equal(d2))
-
- d1 = EvalDelta{
- Logs: []LogItem{{ID: 0, Message: "val"}, {ID: 0, Message: "val2"}},
- }
- a.False(d1.Equal(d2))
-
- d1 = EvalDelta{
- Logs: []LogItem{{ID: 0, Message: "val"}},
- }
- a.True(d1.Equal(d2))
-}
diff --git a/data/basics/userBalance.go b/data/basics/userBalance.go
index d80aef813..4a5253e42 100644
--- a/data/basics/userBalance.go
+++ b/data/basics/userBalance.go
@@ -17,6 +17,7 @@
package basics
import (
+ "encoding/binary"
"fmt"
"reflect"
@@ -42,7 +43,7 @@ const (
// MaxEncodedAccountDataSize is a rough estimate for the worst-case scenario we're going to have of the account data and address serialized.
// this number is verified by the TestEncodedAccountDataSize function.
- MaxEncodedAccountDataSize = 750000
+ MaxEncodedAccountDataSize = 850000
// encodedMaxAssetsPerAccount is the decoder limit of number of assets stored per account.
// it's being verified by the unit test TestEncodedAccountAllocationBounds to align
@@ -379,6 +380,18 @@ type AssetParams struct {
Clawback Address `codec:"c"`
}
+// ToBeHashed implements crypto.Hashable
+func (app AppIndex) ToBeHashed() (protocol.HashID, []byte) {
+ buf := make([]byte, 8)
+ binary.BigEndian.PutUint64(buf, uint64(app))
+ return protocol.AppIndex, buf
+}
+
+// Address yields the "app address" of the app
+func (app AppIndex) Address() Address {
+ return Address(crypto.HashObj(app))
+}
+
// MakeAccountData returns a UserToken
func MakeAccountData(status Status, algos MicroAlgos) AccountData {
return AccountData{Status: status, MicroAlgos: algos}
diff --git a/data/basics/userBalance_test.go b/data/basics/userBalance_test.go
index 89b490107..1670fe58d 100644
--- a/data/basics/userBalance_test.go
+++ b/data/basics/userBalance_test.go
@@ -234,3 +234,22 @@ func TestEncodedAccountAllocationBounds(t *testing.T) {
}
}
}
+
+func TestAppIndexHashing(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ i := AppIndex(12)
+ prefix, buf := i.ToBeHashed()
+ require.Equal(t, protocol.HashID("appID"), prefix)
+ require.Equal(t, []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c}, buf)
+
+ i = AppIndex(12 << 16)
+ prefix, buf = i.ToBeHashed()
+ require.Equal(t, protocol.HashID("appID"), prefix)
+ require.Equal(t, []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00}, buf)
+
+ // test value created with:
+ // python -c "import algosdk.encoding as e; print(e.encode_address(e.checksum(b'appID'+($APPID).to_bytes(8, 'big'))))"
+ i = AppIndex(77)
+ require.Equal(t, "PCYUFPA2ZTOYWTP43MX2MOX2OWAIAXUDNC2WFCXAGMRUZ3DYD6BWFDL5YM", i.Address().String())
+}
diff --git a/data/bookkeeping/block.go b/data/bookkeeping/block.go
index 3998ad854..a60a9362c 100644
--- a/data/bookkeeping/block.go
+++ b/data/bookkeeping/block.go
@@ -478,6 +478,9 @@ func MakeBlock(prev BlockHeader) Block {
if err != nil {
logging.Base().Warnf("MakeBlock: computing empty TxnRoot: %v", err)
}
+ // We can't know the entire RewardsState yet, but we can carry over the special addresses.
+ blk.BlockHeader.RewardsState.FeeSink = prev.RewardsState.FeeSink
+ blk.BlockHeader.RewardsState.RewardsPool = prev.RewardsState.RewardsPool
return blk
}
diff --git a/data/bookkeeping/genesis.go b/data/bookkeeping/genesis.go
index 026eceb01..6593bcd45 100644
--- a/data/bookkeeping/genesis.go
+++ b/data/bookkeeping/genesis.go
@@ -147,9 +147,6 @@ func MakeGenesisBlock(proto protocol.ConsensusVersion, genesisBal GenesisBalance
return Block{}, fmt.Errorf("unsupported protocol %s", proto)
}
- poolAddr := basics.Address(genesisBal.RewardsPool)
- incentivePoolBalanceAtGenesis := genesisBal.Balances[poolAddr].MicroAlgos
-
genesisRewardsState := RewardsState{
FeeSink: genesisBal.FeeSink,
RewardsPool: genesisBal.RewardsPool,
@@ -158,14 +155,11 @@ func MakeGenesisBlock(proto protocol.ConsensusVersion, genesisBal GenesisBalance
RewardsRecalculationRound: basics.Round(params.RewardsRateRefreshInterval),
}
+ initialRewards := genesisBal.Balances[genesisBal.RewardsPool].MicroAlgos.Raw
if params.InitialRewardsRateCalculation {
- genesisRewardsState.RewardsRate = basics.SubSaturate(incentivePoolBalanceAtGenesis.Raw, params.MinBalance) / uint64(params.RewardsRateRefreshInterval)
+ genesisRewardsState.RewardsRate = basics.SubSaturate(initialRewards, params.MinBalance) / uint64(params.RewardsRateRefreshInterval)
} else {
- genesisRewardsState.RewardsRate = incentivePoolBalanceAtGenesis.Raw / uint64(params.RewardsRateRefreshInterval)
- }
-
- genesisProtoState := UpgradeState{
- CurrentProtocol: proto,
+ genesisRewardsState.RewardsRate = initialRewards / uint64(params.RewardsRateRefreshInterval)
}
blk := Block{
@@ -177,8 +171,10 @@ func MakeGenesisBlock(proto protocol.ConsensusVersion, genesisBal GenesisBalance
TimeStamp: genesisBal.Timestamp,
GenesisID: genesisID,
RewardsState: genesisRewardsState,
- UpgradeState: genesisProtoState,
- UpgradeVote: UpgradeVote{},
+ UpgradeState: UpgradeState{
+ CurrentProtocol: proto,
+ },
+ UpgradeVote: UpgradeVote{},
},
}
diff --git a/data/committee/sortition/sortition_test.go b/data/committee/sortition/sortition_test.go
index 2d19bd746..ac3eae019 100644
--- a/data/committee/sortition/sortition_test.go
+++ b/data/committee/sortition/sortition_test.go
@@ -21,6 +21,7 @@ import (
"testing"
"github.com/algorand/go-algorand/crypto"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func BenchmarkSortition(b *testing.B) {
@@ -36,6 +37,7 @@ func BenchmarkSortition(b *testing.B) {
}
func TestSortitionBasic(t *testing.T) {
+ partitiontest.PartitionTest(t)
hitcount := uint64(0)
const N = 1000
const expectedSize = 20
diff --git a/data/pools/transactionPool.go b/data/pools/transactionPool.go
index 3d7125f5e..35871e91a 100644
--- a/data/pools/transactionPool.go
+++ b/data/pools/transactionPool.go
@@ -539,7 +539,7 @@ func (pool *TransactionPool) isAssemblyTimedOut() bool {
// we have no deadline, so no reason to timeout.
return false
}
- generateBlockDuration := generateBlockBaseDuration + time.Duration(pool.pendingBlockEvaluator.TxnCounter())*generateBlockTransactionDuration
+ generateBlockDuration := generateBlockBaseDuration + time.Duration(pool.pendingBlockEvaluator.PaySetSize())*generateBlockTransactionDuration
return time.Now().After(pool.assemblyDeadline.Add(-generateBlockDuration))
}
diff --git a/data/transactions/logic/README.md b/data/transactions/logic/README.md
index c2344409c..530a01b13 100644
--- a/data/transactions/logic/README.md
+++ b/data/transactions/logic/README.md
@@ -1,17 +1,23 @@
# Transaction Execution Approval Language (TEAL)
TEAL is a bytecode based stack language that executes inside Algorand transactions. TEAL programs can be used to check the parameters of the transaction and approve the transaction as if by a signature. This use of TEAL is called a _LogicSig_. Starting with v2, TEAL programs may
-also execute as _Applications_ which are invoked with explicit application call transactions. Programs have read-only access to the transaction they are attached to, transactions in their atomic transaction group, and a few global values. In addition, _Application_ programs have access to limited state that is global to the application and per-account local state for each account that has opted-in to the application. Programs cannot modify or create transactions, only reject or approve them. For both types of program, approval is signaled by finishing with the stack containing a single non-zero uint64 value.
+also execute as _Applications_ which are invoked with explicit application call transactions. Programs have read-only access to the transaction they are attached to, transactions in their atomic transaction group, and a few global values. In addition, _Application_ programs have access to limited state that is global to the application and per-account local state for each account that has opted-in to the application. For both types of program, approval is signaled by finishing with the stack containing a single non-zero uint64 value.
## The Stack
-The stack starts empty and contains values of either uint64 or bytes (`bytes` are implemented in Go as a []byte slice). Most operations act on the stack, popping arguments from it and pushing results to it.
+The stack starts empty and contains values of either uint64 or bytes
+(`bytes` are implemented in Go as a []byte slice and may not exceed
+4096 bytes in length). Most operations act on the stack, popping
+arguments from it and pushing results to it.
The maximum stack depth is currently 1000.
## Scratch Space
-In addition to the stack there are 256 positions of scratch space, also uint64-bytes union values, accessed by the `load` and `store` ops moving data from or to scratch space, respectively.
+In addition to the stack there are 256 positions of scratch space,
+also uint64-bytes union values, each initialized as uint64
+zero. Scratch space is acccesed by the `load(s)` and `store(s)` ops
+moving data from or to scratch space, respectively.
## Execution Modes
@@ -30,14 +36,14 @@ TEAL LogicSigs run in Algorand nodes as part of testing a proposed transaction t
If an authorized program executes and finishes with a single non-zero uint64 value on the stack then that program has validated the transaction it is attached to.
-The TEAL program has access to data from the transaction it is attached to (`txn` op), any transactions in a transaction group it is part of (`gtxn` op), and a few global values like consensus parameters (`global` op). Some "Args" may be attached to a transaction being validated by a TEAL program. Args are an array of byte strings. A common pattern would be to have the key to unlock some contract as an Arg. Args are recorded on the blockchain and publicly visible when the transaction is submitted to the network.
+The TEAL program has access to data from the transaction it is attached to (`txn` op), any transactions in a transaction group it is part of (`gtxn` op), and a few global values like consensus parameters (`global` op). Some "Args" may be attached to a transaction being validated by a TEAL program. Args are an array of byte strings. A common pattern would be to have the key to unlock some contract as an Arg. Args are recorded on the blockchain and publicly visible when the transaction is submitted to the network. These LogicSig Args are _not_ signed.
A program can either authorize some delegated action on a normal private key signed or multisig account or be wholly in charge of a contract account.
* If the account has signed the program (an ed25519 signature on "Program" concatenated with the program bytes) then if the program returns true the transaction is authorized as if the account had signed it. This allows an account to hand out a signed program so that other users can carry out delegated actions which are approved by the program.
* If the SHA512_256 hash of the program (prefixed by "Program") is equal to the transaction Sender address then this is a contract account wholly controlled by the program. No other signature is necessary or possible. The only way to execute a transaction against the contract account is for the program to approve it.
-The TEAL bytecode plus the length of any Args must add up to less than 1000 bytes (consensus parameter LogicSigMaxSize). Each TEAL op has an associated cost and the program cost must total less than 20000 (consensus parameter LogicSigMaxCost). Most ops have a cost of 1, but a few slow crypto ops are much higher. Prior to v4, the program's cost was estimated as the static sum of all the opcode costs in the program (whether they were actually executed or not). Beginning with v4, the program's cost is tracked dynamically, while being evaluated. If the program exceeds its budget, it fails.
+The TEAL bytecode plus the length of all Args must add up to no more than 1000 bytes (consensus parameter LogicSigMaxSize). Each TEAL op has an associated cost and the program cost must total no more than 20000 (consensus parameter LogicSigMaxCost). Most ops have a cost of 1, but a few slow crypto ops are much higher. Prior to v4, the program's cost was estimated as the static sum of all the opcode costs in the program (whether they were actually executed or not). Beginning with v4, the program's cost is tracked dynamically, while being evaluated. If the program exceeds its budget, it fails.
## Constants
@@ -86,7 +92,7 @@ Many programs need only a few dozen instructions. The instruction set has some o
This summary is supplemented by more detail in the [opcodes document](TEAL_opcodes.md).
-Some operations 'panic' and immediately end execution of the program.
+Some operations 'panic' and immediately fail the program.
A transaction checked by a program that panics is not valid.
A contract account governed by a buggy program might not have a way to get assets back out of it. Code carefully.
@@ -104,10 +110,13 @@ For three-argument ops, `A` is the element two below the top, `B` is the penulti
| `keccak256` | Keccak256 hash of value X, yields [32]byte |
| `sha512_256` | SHA512_256 hash of value X, yields [32]byte |
| `ed25519verify` | for (data A, signature B, pubkey C) verify the signature of ("ProgData" \|\| program_hash \|\| data) against the pubkey => {0 or 1} |
-| `+` | A plus B. Panic on overflow. |
-| `-` | A minus B. Panic if B > A. |
-| `/` | A divided by B (truncated division). Panic if B == 0. |
-| `*` | A times B. Panic on overflow. |
+| `ecdsa_verify v` | for (data A, signature B, C and pubkey D, E) verify the signature of the data against the pubkey => {0 or 1} |
+| `ecdsa_pk_recover v` | for (data A, recovery id B, signature C, D) recover a public key => [*... stack*, X, Y] |
+| `ecdsa_pk_decompress v` | decompress pubkey A into components X, Y => [*... stack*, X, Y] |
+| `+` | A plus B. Fail on overflow. |
+| `-` | A minus B. Fail if B > A. |
+| `/` | A divided by B (truncated division). Fail if B == 0. |
+| `*` | A times B. Fail on overflow. |
| `<` | A less than B => {0 or 1} |
| `>` | A greater than B => {0 or 1} |
| `<=` | A less than or equal to B => {0 or 1} |
@@ -118,14 +127,14 @@ For three-argument ops, `A` is the element two below the top, `B` is the penulti
| `shr` | A divided by 2^B |
| `sqrt` | The largest integer B such that B^2 <= X |
| `bitlen` | The highest set bit in X. If X is a byte-array, it is interpreted as a big-endian unsigned integer. bitlen of 0 is 0, bitlen of 8 is 4 |
-| `exp` | A raised to the Bth power. Panic if A == B == 0 and on overflow |
+| `exp` | A raised to the Bth power. Fail if A == B == 0 and on overflow |
| `==` | A is equal to B => {0 or 1} |
| `!=` | A is not equal to B => {0 or 1} |
| `!` | X == 0 yields 1; else 0 |
| `len` | yields length of byte value X |
| `itob` | converts uint64 X to big endian bytes |
| `btoi` | converts bytes X as big endian to uint64 |
-| `%` | A modulo B. Panic if B == 0. |
+| `%` | A modulo B. Fail if B == 0. |
| `\|` | A bitwise-or B |
| `&` | A bitwise-and B |
| `^` | A bitwise-xor B |
@@ -133,13 +142,28 @@ For three-argument ops, `A` is the element two below the top, `B` is the penulti
| `mulw` | A times B out to 128-bit long result as low (top) and high uint64 values on the stack |
| `addw` | A plus B out to 128-bit long result as sum (top) and carry-bit uint64 values on the stack |
| `divmodw` | Pop four uint64 values. The deepest two are interpreted as a uint128 dividend (deepest value is high word), the top two are interpreted as a uint128 divisor. Four uint64 values are pushed to the stack. The deepest two are the quotient (deeper value is the high uint64). The top two are the remainder, low bits on top. |
-| `expw` | A raised to the Bth power as a 128-bit long result as low (top) and high uint64 values on the stack. Panic if A == B == 0 or if the results exceeds 2^128-1 |
+| `expw` | A raised to the Bth power as a 128-bit long result as low (top) and high uint64 values on the stack. Fail if A == B == 0 or if the results exceeds 2^128-1 |
| `getbit` | pop a target A (integer or byte-array), and index B. Push the Bth bit of A. |
| `setbit` | pop a target A, index B, and bit C. Set the Bth bit of A to C, and push the result |
| `getbyte` | pop a byte-array A and integer B. Extract the Bth byte of A and push it as an integer |
| `setbyte` | pop a byte-array A, integer B, and small integer C (between 0..255). Set the Bth byte of A to C, and push the result |
| `concat` | pop two byte-arrays A and B and join them, push the result |
+These opcodes return portions of byte arrays, accessed by position, in
+various sizes.
+
+### Byte Array Manipulation
+
+| Op | Description |
+| --- | --- |
+| `substring s e` | pop a byte-array A. For immediate values in 0..255 S and E: extract a range of bytes from A starting at S up to but not including E, push the substring result. If E < S, or either is larger than the array length, the program fails |
+| `substring3` | pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including C, push the substring result. If C < B, or either is larger than the array length, the program fails |
+| `extract s l` | pop a byte-array A. For immediate values in 0..255 S and L: extract a range of bytes from A starting at S up to but not including S+L, push the substring result. If L is 0, then extract to the end of the string. If S or S+L is larger than the array length, the program fails |
+| `extract3` | pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including B+C, push the substring result. If B+C is larger than the array length, the program fails |
+| `extract_uint16` | pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+2, convert bytes as big endian and push the uint64 result. If B+2 is larger than the array length, the program fails |
+| `extract_uint32` | pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+4, convert bytes as big endian and push the uint64 result. If B+4 is larger than the array length, the program fails |
+| `extract_uint64` | pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+8, convert bytes as big endian and push the uint64 result. If B+8 is larger than the array length, the program fails |
+
These opcodes take byte-array values that are interpreted as
big-endian unsigned integers. For mathematical operators, the
returned values are the shortest byte-array that can represent the
@@ -155,8 +179,8 @@ bytes on outputs.
| Op | Description |
| --- | --- |
| `b+` | A plus B, where A and B are byte-arrays interpreted as big-endian unsigned integers |
-| `b-` | A minus B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic on underflow. |
-| `b/` | A divided by B (truncated division), where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic if B is zero. |
+| `b-` | A minus B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail on underflow. |
+| `b/` | A divided by B (truncated division), where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail if B is zero. |
| `b*` | A times B, where A and B are byte-arrays interpreted as big-endian unsigned integers. |
| `b<` | A is less than B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1} |
| `b>` | A is greater than B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1} |
@@ -164,10 +188,10 @@ bytes on outputs.
| `b>=` | A is greater than or equal to B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1} |
| `b==` | A is equals to B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1} |
| `b!=` | A is not equal to B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1} |
-| `b%` | A modulo B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic if B is zero. |
+| `b%` | A modulo B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail if B is zero. |
These opcodes operate on the bits of byte-array values. The shorter
-array is interpeted as though left padded with zeros until it is the
+array is interpreted as though left padded with zeros until it is the
same length as the other input. The returned values are the same
length as the longest input. Therefore, unlike array arithmetic,
these results may contain leading zero bytes.
@@ -179,7 +203,6 @@ these results may contain leading zero bytes.
| `b^` | A bitwise-xor B, where A and B are byte-arrays, zero-left extended to the greater of their lengths |
| `b~` | X with all bits inverted |
-
### Loading Values
Opcodes for getting data onto the stack.
@@ -208,15 +231,21 @@ Some of these have immediate data in the byte or bytes after the opcode.
| `arg_1` | push LogicSig argument 1 to stack |
| `arg_2` | push LogicSig argument 2 to stack |
| `arg_3` | push LogicSig argument 3 to stack |
+| `args` | push Xth LogicSig argument to stack |
| `txn f` | push field F of current transaction to stack |
| `gtxn t f` | push field F of the Tth transaction in the current group |
| `txna f i` | push Ith value of the array field F of the current transaction |
+| `txnas f` | push Xth value of the array field F of the current transaction |
| `gtxna t f i` | push Ith value of the array field F from the Tth transaction in the current group |
+| `gtxnas t f` | push Xth value of the array field F from the Tth transaction in the current group |
| `gtxns f` | push field F of the Xth transaction in the current group |
| `gtxnsa f i` | push Ith value of the array field F from the Xth transaction in the current group |
+| `gtxnsas f` | pop an index A and an index B. push Bth value of the array field F from the Ath transaction in the current group |
| `global f` | push value from globals to stack |
-| `load i` | copy a value from scratch space to the stack |
-| `store i` | pop a value from the stack and store to scratch space |
+| `load i` | copy a value from scratch space to the stack. All scratch spaces are 0 at program start. |
+| `loads` | copy a value from the Xth scratch space to the stack. All scratch spaces are 0 at program start. |
+| `store i` | pop value X. store X to the Ith scratch space |
+| `stores` | pop indexes A and B. store B to the Ath scratch space |
| `gload t i` | push Ith scratch space index of the Tth transaction in the current group |
| `gloads i` | push Ith scratch space index of the Xth transaction in the current group |
| `gaid t` | push the ID of the asset or application created in the Tth transaction of the current group |
@@ -283,6 +312,11 @@ Some of these have immediate data in the byte or bytes after the opcode.
| 54 | LocalNumUint | uint64 | Number of local state integers in ApplicationCall. LogicSigVersion >= 3. |
| 55 | LocalNumByteSlice | uint64 | Number of local state byteslices in ApplicationCall. LogicSigVersion >= 3. |
| 56 | ExtraProgramPages | uint64 | Number of additional pages for each of the application's approval and clear state programs. An ExtraProgramPages of 1 means 2048 more total bytes, or 1024 for each program. LogicSigVersion >= 4. |
+| 57 | Nonparticipation | uint64 | Marks an account nonparticipating for rewards. LogicSigVersion >= 5. |
+| 58 | Logs | []byte | Log messages emitted by an application call (itxn only). LogicSigVersion >= 5. |
+| 59 | NumLogs | uint64 | Number of Logs (itxn only). LogicSigVersion >= 5. |
+| 60 | CreatedAssetID | uint64 | Asset ID allocated by the creation of an ASA (itxn only). LogicSigVersion >= 5. |
+| 61 | CreatedApplicationID | uint64 | ApplicationID allocated by the creation of an application (itxn only). LogicSigVersion >= 5. |
Additional details in the [opcodes document](TEAL_opcodes.md#txn) on the `txn` op.
@@ -301,8 +335,10 @@ Global fields are fields that are common to all the transactions in the group. I
| 5 | LogicSigVersion | uint64 | Maximum supported TEAL version. LogicSigVersion >= 2. |
| 6 | Round | uint64 | Current round number. LogicSigVersion >= 2. |
| 7 | LatestTimestamp | uint64 | Last confirmed block UNIX timestamp. Fails if negative. LogicSigVersion >= 2. |
-| 8 | CurrentApplicationID | uint64 | ID of current application executing. Fails if no such application is executing. LogicSigVersion >= 2. |
+| 8 | CurrentApplicationID | uint64 | ID of current application executing. Fails in LogicSigs. LogicSigVersion >= 2. |
| 9 | CreatorAddress | []byte | Address of the creator of the current application. Fails if no such application is executing. LogicSigVersion >= 3. |
+| 10 | CurrentApplicationAddress | []byte | Address that the current application controls. Fails in LogicSigs. LogicSigVersion >= 5. |
+| 11 | GroupID | []byte | ID of the transaction group. 32 zero bytes if the transaction is not part of a group. LogicSigVersion >= 5. |
**Asset Fields**
@@ -328,7 +364,7 @@ Asset fields include `AssetHolding` and `AssetParam` fields that are used in the
| 8 | AssetReserve | []byte | Reserve address |
| 9 | AssetFreeze | []byte | Freeze address |
| 10 | AssetClawback | []byte | Clawback address |
-| 11 | AssetCreator | []byte | Creator address |
+| 11 | AssetCreator | []byte | Creator address. LogicSigVersion >= 5. |
**App Fields**
@@ -345,13 +381,14 @@ App fields used in the `app_params_get` opcode.
| 5 | AppLocalNumByteSlice | uint64 | Number of byte array values allowed in Local State |
| 6 | AppExtraProgramPages | uint64 | Number of Extra Program Pages of code space |
| 7 | AppCreator | []byte | Creator address |
+| 8 | AppAddress | []byte | Address for which this application has authority |
### Flow Control
| Op | Description |
| --- | --- |
-| `err` | Error. Panic immediately. This is primarily a fencepost against accidental zero bytes getting compiled into programs. |
+| `err` | Error. Fail immediately. This is primarily a fencepost against accidental zero bytes getting compiled into programs. |
| `bnz target` | branch to TARGET if value X is not zero |
| `bz target` | branch to TARGET if value X is zero |
| `b target` | branch unconditionally to TARGET |
@@ -360,8 +397,8 @@ App fields used in the `app_params_get` opcode.
| `dup` | duplicate last value on stack |
| `dup2` | duplicate two last values on stack: A, B -> A, B, A, B |
| `dig n` | push the Nth value from the top of the stack. dig 0 is equivalent to dup |
-| `cover n` | remove top of stack, and place it down the stack such that N elements are above it |
-| `uncover n` | remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack |
+| `cover n` | remove top of stack, and place it deeper in the stack such that N elements are above it. Fails if stack depth <= N. |
+| `uncover n` | remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack. Fails if stack depth <= N. |
| `swap` | swaps two last values on stack: A, B -> B, A |
| `select` | selects one of two values based on top-of-stack: A, B, C -> (if C != 0 then B else A) |
| `assert` | immediately fail unless value X is a non-zero number |
@@ -388,6 +425,52 @@ App fields used in the `app_params_get` opcode.
| `app_params_get i` | read from app A params field X (imm arg) => {0 or 1 (top), value} |
| `log` | write bytes to log state of the current application |
+### Inner Transactions
+
+The following opcodes allow for "inner transactions". Inner
+transactions allow stateful applications to have many of the effects
+of a true top-level transaction, programatically. However, they are
+different in significant ways. The most important differences are
+that they are not signed, duplicates are not rejected, and they do not
+appear in the block in the usual away. Instead, their effects are
+noted in metadata associated with the associated top-level application
+call transaction. An inner transaction's `Sender` must be the
+SHA512_256 hash of the application ID (prefixed by "appID"), or an
+account that has been rekeyed to that hash.
+
+Currently, inner transactions may perform `pay`, `axfer`, `acfg`, and
+`afrz` effects. After executing an inner transaction with
+`itxn_submit`, the effects of the transaction are visible begining
+with the next instruction with, for example, `balance` and
+`min_balance` checks.
+
+Of the transaction Header fields, only a few fields may be set:
+`Type`/`TypeEnum`, `Sender`, and `Fee`. For the specific fields of
+each transaction types, any field, except `RekeyTo` may be set. This
+allows, for example, clawback transactions, asset opt-ins, and asset
+creates in addtion to the more common uses of `axfer` and `acfg`. All
+fields default to the zero value, except those described under
+`itxn_begin`.
+
+Fields may be set multiple times, but may not be read. The most recent
+setting is used when `itxn_submit` executes. (For this purpose `Type`
+and `TypeEnum` are considered to be the same field.) `itxn_field`
+fails immediately for unsupported fields, unsupported transaction
+types, or improperly typed values for a particular field. `itxn_field`
+makes aceptance decisions entirely from the field and value provided,
+never considering previously set fields. Illegal interactions between
+fields, such as setting fields that belong to two different
+transaction types, are rejected by `itxn_submit`.
+
+| Op | Description |
+| --- | --- |
+| `itxn_begin` | Begin preparation of a new inner transaction |
+| `itxn_field f` | Set field F of the current inner transaction to X |
+| `itxn_submit` | Execute the current inner transaction. Fail if 16 inner transactions have already been executed, or if the transaction itself fails. |
+| `itxn f` | push field F of the last inner transaction to stack |
+| `itxna f i` | push Ith value of the array field F of the last inner transaction to stack |
+
+
# Assembler Syntax
The assembler parses line by line. Ops that just use the stack appear on a line by themselves. Ops that take arguments are the op and then whitespace and then any argument or arguments.
@@ -458,7 +541,6 @@ A '[proto-buf style variable length unsigned int](https://developers.google.com/
Design and implementation limitations to be aware of with various versions of TEAL.
-* TEAL cannot create or change a transaction, only approve or reject.
* Stateless TEAL cannot lookup balances of Algos or other assets. (Standard transaction accounting will apply after TEAL has run and authorized a transaction. A TEAL-approved transaction could still be invalid by other accounting rules just as a standard signed transaction could be invalid. e.g. I can't give away money I don't have.)
* TEAL cannot access information in previous blocks. TEAL cannot access most information in other transactions in the current block. (TEAL can access fields of the transaction it is attached to and the transactions in an atomic transaction group.)
* TEAL cannot know exactly what round the current transaction will commit in (but it is somewhere in FirstValid through LastValid).
diff --git a/data/transactions/logic/README_in.md b/data/transactions/logic/README_in.md
index 8f62938f4..c673e4a0c 100644
--- a/data/transactions/logic/README_in.md
+++ b/data/transactions/logic/README_in.md
@@ -1,17 +1,23 @@
# Transaction Execution Approval Language (TEAL)
TEAL is a bytecode based stack language that executes inside Algorand transactions. TEAL programs can be used to check the parameters of the transaction and approve the transaction as if by a signature. This use of TEAL is called a _LogicSig_. Starting with v2, TEAL programs may
-also execute as _Applications_ which are invoked with explicit application call transactions. Programs have read-only access to the transaction they are attached to, transactions in their atomic transaction group, and a few global values. In addition, _Application_ programs have access to limited state that is global to the application and per-account local state for each account that has opted-in to the application. Programs cannot modify or create transactions, only reject or approve them. For both types of program, approval is signaled by finishing with the stack containing a single non-zero uint64 value.
+also execute as _Applications_ which are invoked with explicit application call transactions. Programs have read-only access to the transaction they are attached to, transactions in their atomic transaction group, and a few global values. In addition, _Application_ programs have access to limited state that is global to the application and per-account local state for each account that has opted-in to the application. For both types of program, approval is signaled by finishing with the stack containing a single non-zero uint64 value.
## The Stack
-The stack starts empty and contains values of either uint64 or bytes (`bytes` are implemented in Go as a []byte slice). Most operations act on the stack, popping arguments from it and pushing results to it.
+The stack starts empty and contains values of either uint64 or bytes
+(`bytes` are implemented in Go as a []byte slice and may not exceed
+4096 bytes in length). Most operations act on the stack, popping
+arguments from it and pushing results to it.
The maximum stack depth is currently 1000.
## Scratch Space
-In addition to the stack there are 256 positions of scratch space, also uint64-bytes union values, accessed by the `load` and `store` ops moving data from or to scratch space, respectively.
+In addition to the stack there are 256 positions of scratch space,
+also uint64-bytes union values, each initialized as uint64
+zero. Scratch space is acccesed by the `load(s)` and `store(s)` ops
+moving data from or to scratch space, respectively.
## Execution Modes
@@ -30,14 +36,14 @@ TEAL LogicSigs run in Algorand nodes as part of testing a proposed transaction t
If an authorized program executes and finishes with a single non-zero uint64 value on the stack then that program has validated the transaction it is attached to.
-The TEAL program has access to data from the transaction it is attached to (`txn` op), any transactions in a transaction group it is part of (`gtxn` op), and a few global values like consensus parameters (`global` op). Some "Args" may be attached to a transaction being validated by a TEAL program. Args are an array of byte strings. A common pattern would be to have the key to unlock some contract as an Arg. Args are recorded on the blockchain and publicly visible when the transaction is submitted to the network.
+The TEAL program has access to data from the transaction it is attached to (`txn` op), any transactions in a transaction group it is part of (`gtxn` op), and a few global values like consensus parameters (`global` op). Some "Args" may be attached to a transaction being validated by a TEAL program. Args are an array of byte strings. A common pattern would be to have the key to unlock some contract as an Arg. Args are recorded on the blockchain and publicly visible when the transaction is submitted to the network. These LogicSig Args are _not_ signed.
A program can either authorize some delegated action on a normal private key signed or multisig account or be wholly in charge of a contract account.
* If the account has signed the program (an ed25519 signature on "Program" concatenated with the program bytes) then if the program returns true the transaction is authorized as if the account had signed it. This allows an account to hand out a signed program so that other users can carry out delegated actions which are approved by the program.
* If the SHA512_256 hash of the program (prefixed by "Program") is equal to the transaction Sender address then this is a contract account wholly controlled by the program. No other signature is necessary or possible. The only way to execute a transaction against the contract account is for the program to approve it.
-The TEAL bytecode plus the length of any Args must add up to less than 1000 bytes (consensus parameter LogicSigMaxSize). Each TEAL op has an associated cost and the program cost must total less than 20000 (consensus parameter LogicSigMaxCost). Most ops have a cost of 1, but a few slow crypto ops are much higher. Prior to v4, the program's cost was estimated as the static sum of all the opcode costs in the program (whether they were actually executed or not). Beginning with v4, the program's cost is tracked dynamically, while being evaluated. If the program exceeds its budget, it fails.
+The TEAL bytecode plus the length of all Args must add up to no more than 1000 bytes (consensus parameter LogicSigMaxSize). Each TEAL op has an associated cost and the program cost must total no more than 20000 (consensus parameter LogicSigMaxCost). Most ops have a cost of 1, but a few slow crypto ops are much higher. Prior to v4, the program's cost was estimated as the static sum of all the opcode costs in the program (whether they were actually executed or not). Beginning with v4, the program's cost is tracked dynamically, while being evaluated. If the program exceeds its budget, it fails.
## Constants
@@ -63,7 +69,7 @@ Many programs need only a few dozen instructions. The instruction set has some o
This summary is supplemented by more detail in the [opcodes document](TEAL_opcodes.md).
-Some operations 'panic' and immediately end execution of the program.
+Some operations 'panic' and immediately fail the program.
A transaction checked by a program that panics is not valid.
A contract account governed by a buggy program might not have a way to get assets back out of it. Code carefully.
@@ -77,6 +83,13 @@ For three-argument ops, `A` is the element two below the top, `B` is the penulti
@@ Arithmetic.md @@
+These opcodes return portions of byte arrays, accessed by position, in
+various sizes.
+
+### Byte Array Manipulation
+
+@@ Byte_Array_Slicing.md @@
+
These opcodes take byte-array values that are interpreted as
big-endian unsigned integers. For mathematical operators, the
returned values are the shortest byte-array that can represent the
@@ -89,16 +102,15 @@ explicitly restricted, though only `b*` and `b+` can produce a larger
output than their inputs, so there is an implicit length limit of 128
bytes on outputs.
-@@ Byteslice_Arithmetic.md @@
+@@ Byte_Array_Arithmetic.md @@
These opcodes operate on the bits of byte-array values. The shorter
-array is interpeted as though left padded with zeros until it is the
+array is interpreted as though left padded with zeros until it is the
same length as the other input. The returned values are the same
length as the longest input. Therefore, unlike array arithmetic,
these results may contain leading zero bytes.
-@@ Byteslice_Logic.md @@
-
+@@ Byte_Array_Logic.md @@
### Loading Values
@@ -142,6 +154,46 @@ App fields used in the `app_params_get` opcode.
@@ State_Access.md @@
+### Inner Transactions
+
+The following opcodes allow for "inner transactions". Inner
+transactions allow stateful applications to have many of the effects
+of a true top-level transaction, programatically. However, they are
+different in significant ways. The most important differences are
+that they are not signed, duplicates are not rejected, and they do not
+appear in the block in the usual away. Instead, their effects are
+noted in metadata associated with the associated top-level application
+call transaction. An inner transaction's `Sender` must be the
+SHA512_256 hash of the application ID (prefixed by "appID"), or an
+account that has been rekeyed to that hash.
+
+Currently, inner transactions may perform `pay`, `axfer`, `acfg`, and
+`afrz` effects. After executing an inner transaction with
+`itxn_submit`, the effects of the transaction are visible begining
+with the next instruction with, for example, `balance` and
+`min_balance` checks.
+
+Of the transaction Header fields, only a few fields may be set:
+`Type`/`TypeEnum`, `Sender`, and `Fee`. For the specific fields of
+each transaction types, any field, except `RekeyTo` may be set. This
+allows, for example, clawback transactions, asset opt-ins, and asset
+creates in addtion to the more common uses of `axfer` and `acfg`. All
+fields default to the zero value, except those described under
+`itxn_begin`.
+
+Fields may be set multiple times, but may not be read. The most recent
+setting is used when `itxn_submit` executes. (For this purpose `Type`
+and `TypeEnum` are considered to be the same field.) `itxn_field`
+fails immediately for unsupported fields, unsupported transaction
+types, or improperly typed values for a particular field. `itxn_field`
+makes aceptance decisions entirely from the field and value provided,
+never considering previously set fields. Illegal interactions between
+fields, such as setting fields that belong to two different
+transaction types, are rejected by `itxn_submit`.
+
+@@ Inner_Transactions.md @@
+
+
# Assembler Syntax
The assembler parses line by line. Ops that just use the stack appear on a line by themselves. Ops that take arguments are the op and then whitespace and then any argument or arguments.
@@ -212,7 +264,6 @@ A '[proto-buf style variable length unsigned int](https://developers.google.com/
Design and implementation limitations to be aware of with various versions of TEAL.
-* TEAL cannot create or change a transaction, only approve or reject.
* Stateless TEAL cannot lookup balances of Algos or other assets. (Standard transaction accounting will apply after TEAL has run and authorized a transaction. A TEAL-approved transaction could still be invalid by other accounting rules just as a standard signed transaction could be invalid. e.g. I can't give away money I don't have.)
* TEAL cannot access information in previous blocks. TEAL cannot access most information in other transactions in the current block. (TEAL can access fields of the transaction it is attached to and the transactions in an atomic transaction group.)
* TEAL cannot know exactly what round the current transaction will commit in (but it is somewhere in FirstValid through LastValid).
diff --git a/data/transactions/logic/TEAL_opcodes.md b/data/transactions/logic/TEAL_opcodes.md
index 127716322..0d4d65876 100644
--- a/data/transactions/logic/TEAL_opcodes.md
+++ b/data/transactions/logic/TEAL_opcodes.md
@@ -8,7 +8,7 @@ Ops have a 'cost' of 1 unless otherwise specified.
- Opcode: 0x00
- Pops: _None_
- Pushes: _None_
-- Error. Panic immediately. This is primarily a fencepost against accidental zero bytes getting compiled into programs.
+- Error. Fail immediately. This is primarily a fencepost against accidental zero bytes getting compiled into programs.
## sha256
@@ -18,7 +18,7 @@ Ops have a 'cost' of 1 unless otherwise specified.
- SHA256 hash of value X, yields [32]byte
- **Cost**:
- 7 (LogicSigVersion = 1)
- - 35 (2 <= LogicSigVersion <= 5)
+ - 35 (LogicSigVersion >= 2)
## keccak256
@@ -28,7 +28,7 @@ Ops have a 'cost' of 1 unless otherwise specified.
- Keccak256 hash of value X, yields [32]byte
- **Cost**:
- 26 (LogicSigVersion = 1)
- - 130 (2 <= LogicSigVersion <= 5)
+ - 130 (LogicSigVersion >= 2)
## sha512_256
@@ -38,7 +38,7 @@ Ops have a 'cost' of 1 unless otherwise specified.
- SHA512_256 hash of value X, yields [32]byte
- **Cost**:
- 9 (LogicSigVersion = 1)
- - 45 (2 <= LogicSigVersion <= 5)
+ - 45 (LogicSigVersion >= 2)
## ed25519verify
@@ -50,12 +50,66 @@ Ops have a 'cost' of 1 unless otherwise specified.
The 32 byte public key is the last element on the stack, preceded by the 64 byte signature at the second-to-last element on the stack, preceded by the data which was signed at the third-to-last element on the stack.
+## ecdsa_verify v
+
+- Opcode: 0x05 {uint8 curve index}
+- Pops: *... stack*, {[]byte A}, {[]byte B}, {[]byte C}, {[]byte D}, {[]byte E}
+- Pushes: uint64
+- for (data A, signature B, C and pubkey D, E) verify the signature of the data against the pubkey => {0 or 1}
+- **Cost**: 1700
+- LogicSigVersion >= 5
+
+`ECDSA` Curves:
+
+| Index | Name | Notes |
+| --- | --- | --- |
+| 0 | Secp256k1 | secp256k1 curve |
+
+
+The 32 byte Y-component of a public key is the last element on the stack, preceded by X-component of a pubkey, preceded by S and R components of a signature, preceded by the data that is fifth element on the stack. All values are big-endian encoded. The signed data must be 32 bytes long, and signatures in lower-S form are only accepted.
+
+## ecdsa_pk_decompress v
+
+- Opcode: 0x06 {uint8 curve index}
+- Pops: *... stack*, []byte
+- Pushes: *... stack*, []byte, []byte
+- decompress pubkey A into components X, Y => [*... stack*, X, Y]
+- **Cost**: 650
+- LogicSigVersion >= 5
+
+`ECDSA` Curves:
+
+| Index | Name | Notes |
+| --- | --- | --- |
+| 0 | Secp256k1 | secp256k1 curve |
+
+
+The 33 byte public key in a compressed form to be decompressed into X and Y (top) components. All values are big-endian encoded.
+
+## ecdsa_pk_recover v
+
+- Opcode: 0x07 {uint8 curve index}
+- Pops: *... stack*, {[]byte A}, {uint64 B}, {[]byte C}, {[]byte D}
+- Pushes: *... stack*, []byte, []byte
+- for (data A, recovery id B, signature C, D) recover a public key => [*... stack*, X, Y]
+- **Cost**: 2000
+- LogicSigVersion >= 5
+
+`ECDSA` Curves:
+
+| Index | Name | Notes |
+| --- | --- | --- |
+| 0 | Secp256k1 | secp256k1 curve |
+
+
+S (top) and R elements of a signature, recovery id and data (bottom) are expected on the stack and used to deriver a public key. All values are big-endian encoded. The signed data must be 32 bytes long.
+
## +
- Opcode: 0x08
- Pops: *... stack*, {uint64 A}, {uint64 B}
- Pushes: uint64
-- A plus B. Panic on overflow.
+- A plus B. Fail on overflow.
Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `addw`.
@@ -64,14 +118,14 @@ Overflow is an error condition which halts execution and fails the transaction.
- Opcode: 0x09
- Pops: *... stack*, {uint64 A}, {uint64 B}
- Pushes: uint64
-- A minus B. Panic if B > A.
+- A minus B. Fail if B > A.
## /
- Opcode: 0x0a
- Pops: *... stack*, {uint64 A}, {uint64 B}
- Pushes: uint64
-- A divided by B (truncated division). Panic if B == 0.
+- A divided by B (truncated division). Fail if B == 0.
`divmodw` is available to divide the two-element values produced by `mulw` and `addw`.
@@ -80,7 +134,7 @@ Overflow is an error condition which halts execution and fails the transaction.
- Opcode: 0x0b
- Pops: *... stack*, {uint64 A}, {uint64 B}
- Pushes: uint64
-- A times B. Panic on overflow.
+- A times B. Fail on overflow.
Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `mulw`.
@@ -168,14 +222,14 @@ Overflow is an error condition which halts execution and fails the transaction.
- Pushes: uint64
- converts bytes X as big endian to uint64
-`btoi` panics if the input is longer than 8 bytes.
+`btoi` fails if the input is longer than 8 bytes.
## %
- Opcode: 0x18
- Pops: *... stack*, {uint64 A}, {uint64 B}
- Pushes: uint64
-- A modulo B. Panic if B == 0.
+- A modulo B. Fail if B == 0.
## |
@@ -425,6 +479,11 @@ Overflow is an error condition which halts execution and fails the transaction.
| 54 | LocalNumUint | uint64 | Number of local state integers in ApplicationCall. LogicSigVersion >= 3. |
| 55 | LocalNumByteSlice | uint64 | Number of local state byteslices in ApplicationCall. LogicSigVersion >= 3. |
| 56 | ExtraProgramPages | uint64 | Number of additional pages for each of the application's approval and clear state programs. An ExtraProgramPages of 1 means 2048 more total bytes, or 1024 for each program. LogicSigVersion >= 4. |
+| 57 | Nonparticipation | uint64 | Marks an account nonparticipating for rewards. LogicSigVersion >= 5. |
+| 58 | Logs | []byte | Log messages emitted by an application call (itxn only). LogicSigVersion >= 5. |
+| 59 | NumLogs | uint64 | Number of Logs (itxn only). LogicSigVersion >= 5. |
+| 60 | CreatedAssetID | uint64 | Asset ID allocated by the creation of an ASA (itxn only). LogicSigVersion >= 5. |
+| 61 | CreatedApplicationID | uint64 | ApplicationID allocated by the creation of an application (itxn only). LogicSigVersion >= 5. |
TypeEnum mapping:
@@ -461,8 +520,10 @@ FirstValidTime causes the program to fail. The field is reserved for future use.
| 5 | LogicSigVersion | uint64 | Maximum supported TEAL version. LogicSigVersion >= 2. |
| 6 | Round | uint64 | Current round number. LogicSigVersion >= 2. |
| 7 | LatestTimestamp | uint64 | Last confirmed block UNIX timestamp. Fails if negative. LogicSigVersion >= 2. |
-| 8 | CurrentApplicationID | uint64 | ID of current application executing. Fails if no such application is executing. LogicSigVersion >= 2. |
+| 8 | CurrentApplicationID | uint64 | ID of current application executing. Fails in LogicSigs. LogicSigVersion >= 2. |
| 9 | CreatorAddress | []byte | Address of the creator of the current application. Fails if no such application is executing. LogicSigVersion >= 3. |
+| 10 | CurrentApplicationAddress | []byte | Address that the current application controls. Fails in LogicSigs. LogicSigVersion >= 5. |
+| 11 | GroupID | []byte | ID of the transaction group. 32 zero bytes if the transaction is not part of a group. LogicSigVersion >= 5. |
## gtxn t f
@@ -479,14 +540,14 @@ for notes on transaction fields available, see `txn`. If this transaction is _i_
- Opcode: 0x34 {uint8 position in scratch space to load from}
- Pops: _None_
- Pushes: any
-- copy a value from scratch space to the stack
+- copy a value from scratch space to the stack. All scratch spaces are 0 at program start.
## store i
- Opcode: 0x35 {uint8 position in scratch space to store to}
- Pops: *... stack*, any
- Pushes: _None_
-- pop a value from the stack and store to scratch space
+- pop value X. store X to the Ith scratch space
## txna f i
@@ -566,6 +627,22 @@ for notes on transaction fields available, see `txn`. If top of stack is _i_, `g
`gaids` fails unless the requested transaction created an asset or application and X < GroupIndex.
+## loads
+
+- Opcode: 0x3e
+- Pops: *... stack*, uint64
+- Pushes: any
+- copy a value from the Xth scratch space to the stack. All scratch spaces are 0 at program start.
+- LogicSigVersion >= 5
+
+## stores
+
+- Opcode: 0x3f
+- Pops: *... stack*, {uint64 A}, {any B}
+- Pushes: _None_
+- pop indexes A and B. store B to the Ath scratch space
+- LogicSigVersion >= 5
+
## bnz target
- Opcode: 0x40 {int16 branch offset, big endian}
@@ -664,7 +741,7 @@ See `bnz` for details on how branches work. `b` always jumps to the offset.
- Opcode: 0x4e {uint8 depth}
- Pops: *... stack*, any
- Pushes: any
-- remove top of stack, and place it down the stack such that N elements are above it
+- remove top of stack, and place it deeper in the stack such that N elements are above it. Fails if stack depth <= N.
- LogicSigVersion >= 5
## uncover n
@@ -672,7 +749,7 @@ See `bnz` for details on how branches work. `b` always jumps to the offset.
- Opcode: 0x4f {uint8 depth}
- Pops: *... stack*, any
- Pushes: any
-- remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack
+- remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack. Fails if stack depth <= N.
- LogicSigVersion >= 5
## concat
@@ -683,7 +760,7 @@ See `bnz` for details on how branches work. `b` always jumps to the offset.
- pop two byte-arrays A and B and join them, push the result
- LogicSigVersion >= 2
-`concat` panics if the result would be greater than 4096 bytes.
+`concat` fails if the result would be greater than 4096 bytes.
## substring s e
@@ -750,31 +827,31 @@ When A is a uint64, index 0 is the least significant bit. Setting bit 3 to 1 on
- Opcode: 0x58
- Pops: *... stack*, {[]byte A}, {uint64 B}, {uint64 C}
- Pushes: []byte
-- pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including B+C, push the substring result. If B or B+C is larger than the array length, the program fails
+- pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including B+C, push the substring result. If B+C is larger than the array length, the program fails
- LogicSigVersion >= 5
-## extract16bits
+## extract_uint16
- Opcode: 0x59
- Pops: *... stack*, {[]byte A}, {uint64 B}
- Pushes: uint64
-- pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+2, convert bytes as big endian and push the uint64 result. If B or B+2 is larger than the array length, the program fails
+- pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+2, convert bytes as big endian and push the uint64 result. If B+2 is larger than the array length, the program fails
- LogicSigVersion >= 5
-## extract32bits
+## extract_uint32
- Opcode: 0x5a
- Pops: *... stack*, {[]byte A}, {uint64 B}
- Pushes: uint64
-- pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+4, convert bytes as big endian and push the uint64 result. If B or B+4 is larger than the array length, the program fails
+- pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+4, convert bytes as big endian and push the uint64 result. If B+4 is larger than the array length, the program fails
- LogicSigVersion >= 5
-## extract64bits
+## extract_uint64
- Opcode: 0x5b
- Pops: *... stack*, {[]byte A}, {uint64 B}
- Pushes: uint64
-- pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+8, convert bytes as big endian and push the uint64 result. If B or B+8 is larger than the array length, the program fails
+- pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+8, convert bytes as big endian and push the uint64 result. If B+8 is larger than the array length, the program fails
- LogicSigVersion >= 5
## balance
@@ -819,7 +896,7 @@ params: Txn.Accounts offset (or, since v4, an account address that appears in Tx
- LogicSigVersion >= 2
- Mode: Application
-params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), application id (or, since v4, a Txn.ForeignApps offset), state key. Return: did_exist flag (top of the stack, 1 if exist and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.
+params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), application id (or, since v4, a Txn.ForeignApps offset), state key. Return: did_exist flag (top of the stack, 1 if the application existed and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.
## app_global_get
@@ -841,7 +918,7 @@ params: state key. Return: value. The value is zero (of type uint64) if the key
- LogicSigVersion >= 2
- Mode: Application
-params: Txn.ForeignApps offset (or, since v4, an application id that appears in Txn.ForeignApps or is the CurrentApplicationID), state key. Return: did_exist flag (top of the stack, 1 if exist and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.
+params: Txn.ForeignApps offset (or, since v4, an application id that appears in Txn.ForeignApps or is the CurrentApplicationID), state key. Return: did_exist flag (top of the stack, 1 if the application existed and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.
## app_local_put
@@ -906,7 +983,7 @@ Deleting a key which is already absent has no effect on the application global s
| 1 | AssetFrozen | uint64 | Is the asset frozen or not |
-params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), asset id (or, since v4, a Txn.ForeignAssets offset). Return: did_exist flag (1 if exist and 0 otherwise), value.
+params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), asset id (or, since v4, a Txn.ForeignAssets offset). Return: did_exist flag (1 if the asset existed and 0 otherwise), value.
## asset_params_get i
@@ -932,10 +1009,10 @@ params: Txn.Accounts offset (or, since v4, an account address that appears in Tx
| 8 | AssetReserve | []byte | Reserve address |
| 9 | AssetFreeze | []byte | Freeze address |
| 10 | AssetClawback | []byte | Clawback address |
-| 11 | AssetCreator | []byte | Creator address |
+| 11 | AssetCreator | []byte | Creator address. LogicSigVersion >= 5. |
-params: Before v4, Txn.ForeignAssets offset. Since v4, Txn.ForeignAssets offset or an asset id that appears in Txn.ForeignAssets. Return: did_exist flag (1 if exist and 0 otherwise), value.
+params: Before v4, Txn.ForeignAssets offset. Since v4, Txn.ForeignAssets offset or an asset id that appears in Txn.ForeignAssets. Return: did_exist flag (1 if the asset existed and 0 otherwise), value.
## app_params_get i
@@ -958,9 +1035,10 @@ params: Before v4, Txn.ForeignAssets offset. Since v4, Txn.ForeignAssets offset
| 5 | AppLocalNumByteSlice | uint64 | Number of byte array values allowed in Local State |
| 6 | AppExtraProgramPages | uint64 | Number of Extra Program Pages of code space |
| 7 | AppCreator | []byte | Creator address |
+| 8 | AppAddress | []byte | Address for which this application has authority |
-params: Txn.ForeignApps offset or an app id that appears in Txn.ForeignApps. Return: did_exist flag (1 if exist and 0 otherwise), value.
+params: Txn.ForeignApps offset or an app id that appears in Txn.ForeignApps. Return: did_exist flag (1 if the application existed and 0 otherwise), value.
## min_balance
@@ -1053,7 +1131,7 @@ bitlen interprets arrays as big-endian integers, unlike setbit/getbit
- Opcode: 0x94
- Pops: *... stack*, {uint64 A}, {uint64 B}
- Pushes: uint64
-- A raised to the Bth power. Panic if A == B == 0 and on overflow
+- A raised to the Bth power. Fail if A == B == 0 and on overflow
- LogicSigVersion >= 4
## expw
@@ -1061,7 +1139,7 @@ bitlen interprets arrays as big-endian integers, unlike setbit/getbit
- Opcode: 0x95
- Pops: *... stack*, {uint64 A}, {uint64 B}
- Pushes: *... stack*, uint64, uint64
-- A raised to the Bth power as a 128-bit long result as low (top) and high uint64 values on the stack. Panic if A == B == 0 or if the results exceeds 2^128-1
+- A raised to the Bth power as a 128-bit long result as low (top) and high uint64 values on the stack. Fail if A == B == 0 or if the results exceeds 2^128-1
- **Cost**: 10
- LogicSigVersion >= 4
@@ -1079,7 +1157,7 @@ bitlen interprets arrays as big-endian integers, unlike setbit/getbit
- Opcode: 0xa1
- Pops: *... stack*, {[]byte A}, {[]byte B}
- Pushes: []byte
-- A minus B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic on underflow.
+- A minus B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail on underflow.
- **Cost**: 10
- LogicSigVersion >= 4
@@ -1088,7 +1166,7 @@ bitlen interprets arrays as big-endian integers, unlike setbit/getbit
- Opcode: 0xa2
- Pops: *... stack*, {[]byte A}, {[]byte B}
- Pushes: []byte
-- A divided by B (truncated division), where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic if B is zero.
+- A divided by B (truncated division), where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail if B is zero.
- **Cost**: 20
- LogicSigVersion >= 4
@@ -1154,7 +1232,7 @@ bitlen interprets arrays as big-endian integers, unlike setbit/getbit
- Opcode: 0xaa
- Pops: *... stack*, {[]byte A}, {[]byte B}
- Pushes: []byte
-- A modulo B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic if B is zero.
+- A modulo B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail if B is zero.
- **Cost**: 20
- LogicSigVersion >= 4
@@ -1211,4 +1289,86 @@ bitlen interprets arrays as big-endian integers, unlike setbit/getbit
- LogicSigVersion >= 5
- Mode: Application
-`log` can be called up to MaxLogCalls times in a program, and log up to a total of 1k bytes.
+`log` fails if called more than MaxLogCalls times in a program, or if the sum of logged bytes exceeds 1024 bytes.
+
+## itxn_begin
+
+- Opcode: 0xb1
+- Pops: _None_
+- Pushes: _None_
+- Begin preparation of a new inner transaction
+- LogicSigVersion >= 5
+- Mode: Application
+
+`itxn_begin` initializes Sender to the application address; Fee to the minimum allowable, taking into account MinTxnFee and credit from overpaying in earlier transactions; FirstValid/LastValid to the values in the top-level transaction, and all other fields to zero values.
+
+## itxn_field f
+
+- Opcode: 0xb2 {uint8 transaction field index}
+- Pops: *... stack*, any
+- Pushes: _None_
+- Set field F of the current inner transaction to X
+- LogicSigVersion >= 5
+- Mode: Application
+
+`itxn_field` fails if X is of the wrong type for F, including a byte array of the wrong size for use as an address when F is an address field. `itxn_field` also fails if X is an account or asset that does not appear in `txn.Accounts` or `txn.ForeignAssets` of the top-level transaction. (Setting addresses in asset creation are exempted from this requirement.)
+
+## itxn_submit
+
+- Opcode: 0xb3
+- Pops: _None_
+- Pushes: _None_
+- Execute the current inner transaction. Fail if 16 inner transactions have already been executed, or if the transaction itself fails.
+- LogicSigVersion >= 5
+- Mode: Application
+
+## itxn f
+
+- Opcode: 0xb4 {uint8 transaction field index}
+- Pops: _None_
+- Pushes: any
+- push field F of the last inner transaction to stack
+- LogicSigVersion >= 5
+- Mode: Application
+
+## itxna f i
+
+- Opcode: 0xb5 {uint8 transaction field index} {uint8 transaction field array index}
+- Pops: _None_
+- Pushes: any
+- push Ith value of the array field F of the last inner transaction to stack
+- LogicSigVersion >= 5
+- Mode: Application
+
+## txnas f
+
+- Opcode: 0xc0 {uint8 transaction field index}
+- Pops: *... stack*, uint64
+- Pushes: any
+- push Xth value of the array field F of the current transaction
+- LogicSigVersion >= 5
+
+## gtxnas t f
+
+- Opcode: 0xc1 {uint8 transaction group index} {uint8 transaction field index}
+- Pops: *... stack*, uint64
+- Pushes: any
+- push Xth value of the array field F from the Tth transaction in the current group
+- LogicSigVersion >= 5
+
+## gtxnsas f
+
+- Opcode: 0xc2 {uint8 transaction field index}
+- Pops: *... stack*, {uint64 A}, {uint64 B}
+- Pushes: any
+- pop an index A and an index B. push Bth value of the array field F from the Ath transaction in the current group
+- LogicSigVersion >= 5
+
+## args
+
+- Opcode: 0xc3
+- Pops: *... stack*, uint64
+- Pushes: []byte
+- push Xth LogicSig argument to stack
+- LogicSigVersion >= 5
+- Mode: Signature
diff --git a/data/transactions/logic/assembler.go b/data/transactions/logic/assembler.go
index c5e38d632..58e597ecd 100644
--- a/data/transactions/logic/assembler.go
+++ b/data/transactions/logic/assembler.go
@@ -386,7 +386,7 @@ func (ops *OpStream) ByteLiteral(val []byte) {
found := false
var constIndex uint
for i, cv := range ops.bytec {
- if bytes.Compare(cv, val) == 0 {
+ if bytes.Equal(cv, val) {
found = true
constIndex = uint(i)
break
@@ -816,7 +816,7 @@ func assembleTxn2(ops *OpStream, spec *OpSpec, args []string) error {
func assembleTxna(ops *OpStream, spec *OpSpec, args []string) error {
if len(args) != 2 {
- return ops.error("txna expects two arguments")
+ return ops.error("txna expects two immediate arguments")
}
fs, ok := txnFieldSpecByName[args[0]]
if !ok {
@@ -844,6 +844,28 @@ func assembleTxna(ops *OpStream, spec *OpSpec, args []string) error {
return nil
}
+func assembleTxnas(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) != 1 {
+ return ops.error("txnas expects one immediate argument")
+ }
+ fs, ok := txnFieldSpecByName[args[0]]
+ if !ok {
+ return ops.errorf("txnas unknown field: %#v", args[0])
+ }
+ _, ok = txnaFieldSpecByField[fs.field]
+ if !ok {
+ return ops.errorf("txnas unknown field: %#v", args[0])
+ }
+ if fs.version > ops.Version {
+ return ops.errorf("txnas %#v available in version %d. Missed #pragma version?", args[0], fs.version)
+ }
+
+ ops.pending.WriteByte(spec.Opcode)
+ ops.pending.WriteByte(uint8(fs.field))
+ ops.returns(fs.ftype)
+ return nil
+}
+
func assembleGtxn(ops *OpStream, spec *OpSpec, args []string) error {
if len(args) != 2 {
return ops.error("gtxn expects two arguments")
@@ -853,16 +875,16 @@ func assembleGtxn(ops *OpStream, spec *OpSpec, args []string) error {
return ops.error(err)
}
if slot > 255 {
- return ops.errorf("gtxn transaction index beyond 255: %d", slot)
+ return ops.errorf("%s transaction index beyond 255: %d", spec.Name, slot)
}
fs, ok := txnFieldSpecByName[args[1]]
if !ok {
- return ops.errorf("gtxn unknown field: %#v", args[1])
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[1])
}
_, ok = txnaFieldSpecByField[fs.field]
if ok {
- return ops.errorf("found array field %#v in gtxn op", args[1])
+ return ops.errorf("found array field %#v in %s op", args[1], spec.Name)
}
if fs.version > ops.Version {
return ops.errorf("field %#v available in version %d. Missed #pragma version?", args[1], fs.version)
@@ -883,38 +905,38 @@ func assembleGtxn2(ops *OpStream, spec *OpSpec, args []string) error {
gtxna := OpsByName[ops.Version]["gtxna"]
return assembleGtxna(ops, &gtxna, args)
}
- return ops.error("gtxn expects two or three arguments")
+ return ops.errorf("%s expects two or three arguments", spec.Name)
}
func assembleGtxna(ops *OpStream, spec *OpSpec, args []string) error {
if len(args) != 3 {
- return ops.error("gtxna expects three arguments")
+ return ops.errorf("%s expects three arguments", spec.Name)
}
slot, err := strconv.ParseUint(args[0], 0, 64)
if err != nil {
return ops.error(err)
}
if slot > 255 {
- return ops.errorf("gtxna group index beyond 255: %d", slot)
+ return ops.errorf("%s group index beyond 255: %d", spec.Name, slot)
}
fs, ok := txnFieldSpecByName[args[1]]
if !ok {
- return ops.errorf("gtxna unknown field: %#v", args[1])
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[1])
}
_, ok = txnaFieldSpecByField[fs.field]
if !ok {
- return ops.errorf("gtxna unknown field: %#v", args[1])
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[1])
}
if fs.version > ops.Version {
- return ops.errorf("gtxna %#v available in version %d. Missed #pragma version?", args[1], fs.version)
+ return ops.errorf("%s %#v available in version %d. Missed #pragma version?", spec.Name, args[1], fs.version)
}
arrayFieldIdx, err := strconv.ParseUint(args[2], 0, 64)
if err != nil {
return ops.error(err)
}
if arrayFieldIdx > 255 {
- return ops.errorf("gtxna array index beyond 255: %d", arrayFieldIdx)
+ return ops.errorf("%s array index beyond 255: %d", spec.Name, arrayFieldIdx)
}
ops.pending.WriteByte(spec.Opcode)
@@ -925,17 +947,49 @@ func assembleGtxna(ops *OpStream, spec *OpSpec, args []string) error {
return nil
}
+func assembleGtxnas(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) != 2 {
+ return ops.errorf("%s expects two immediate arguments", spec.Name)
+ }
+
+ slot, err := strconv.ParseUint(args[0], 0, 64)
+ if err != nil {
+ return ops.error(err)
+ }
+ if slot > 255 {
+ return ops.errorf("%s group index beyond 255: %d", spec.Name, slot)
+ }
+
+ fs, ok := txnFieldSpecByName[args[1]]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[1])
+ }
+ _, ok = txnaFieldSpecByField[fs.field]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[1])
+ }
+ if fs.version > ops.Version {
+ return ops.errorf("%s %#v available in version %d. Missed #pragma version?", spec.Name, args[1], fs.version)
+ }
+
+ ops.pending.WriteByte(spec.Opcode)
+ ops.pending.WriteByte(uint8(slot))
+ ops.pending.WriteByte(uint8(fs.field))
+ ops.returns(fs.ftype)
+ return nil
+}
+
func assembleGtxns(ops *OpStream, spec *OpSpec, args []string) error {
if len(args) == 2 {
gtxnsa := OpsByName[ops.Version]["gtxnsa"]
return assembleGtxnsa(ops, &gtxnsa, args)
}
if len(args) != 1 {
- return ops.error("gtxns expects one or two immediate arguments")
+ return ops.errorf("%s expects one or two immediate arguments", spec.Name)
}
fs, ok := txnFieldSpecByName[args[0]]
if !ok {
- return ops.errorf("gtxns unknown field: %#v", args[0])
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
}
_, ok = txnaFieldSpecByField[fs.field]
if ok {
@@ -953,26 +1007,110 @@ func assembleGtxns(ops *OpStream, spec *OpSpec, args []string) error {
func assembleGtxnsa(ops *OpStream, spec *OpSpec, args []string) error {
if len(args) != 2 {
- return ops.error("gtxnsa expects two immediate arguments")
+ return ops.errorf("%s expects two immediate arguments", spec.Name)
+ }
+ fs, ok := txnFieldSpecByName[args[0]]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
+ }
+ _, ok = txnaFieldSpecByField[fs.field]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
+ }
+ if fs.version > ops.Version {
+ return ops.errorf("%s %#v available in version %d. Missed #pragma version?", spec.Name, args[0], fs.version)
+ }
+ arrayFieldIdx, err := strconv.ParseUint(args[1], 0, 64)
+ if err != nil {
+ return ops.error(err)
+ }
+ if arrayFieldIdx > 255 {
+ return ops.errorf("%s array index beyond 255: %d", spec.Name, arrayFieldIdx)
+ }
+ ops.pending.WriteByte(spec.Opcode)
+ ops.pending.WriteByte(uint8(fs.field))
+ ops.pending.WriteByte(uint8(arrayFieldIdx))
+ ops.returns(fs.ftype)
+ return nil
+}
+
+func assembleGtxnsas(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) != 1 {
+ return ops.errorf("%s expects one immediate argument", spec.Name)
+ }
+ fs, ok := txnFieldSpecByName[args[0]]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
+ }
+ _, ok = txnaFieldSpecByField[fs.field]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
+ }
+ if fs.version > ops.Version {
+ return ops.errorf("%s %#v available in version %d. Missed #pragma version?", spec.Name, args[0], fs.version)
+ }
+ ops.pending.WriteByte(spec.Opcode)
+ ops.pending.WriteByte(uint8(fs.field))
+ ops.returns(fs.ftype)
+ return nil
+}
+
+// asmItxn delegates to asmItxnOnly or asmItxna depending on number of operands
+func asmItxn(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) == 1 {
+ return asmItxnOnly(ops, spec, args)
+ }
+ if len(args) == 2 {
+ itxna := OpsByName[ops.Version]["itxna"]
+ return asmItxna(ops, &itxna, args)
+ }
+ return ops.errorf("%s expects one or two arguments", spec.Name)
+}
+
+func asmItxnOnly(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) != 1 {
+ return ops.errorf("%s expects one argument", spec.Name)
+ }
+ fs, ok := txnFieldSpecByName[args[0]]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
+ }
+ _, ok = txnaFieldSpecByField[fs.field]
+ if ok {
+ return ops.errorf("found array field %#v in %s op", args[0], spec.Name)
+ }
+ if fs.version > ops.Version {
+ return ops.errorf("field %#v available in version %d. Missed #pragma version?", args[0], fs.version)
+ }
+ ops.pending.WriteByte(spec.Opcode)
+ ops.pending.WriteByte(uint8(fs.field))
+ ops.returns(fs.ftype)
+ return nil
+}
+
+func asmItxna(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) != 2 {
+ return ops.errorf("%s expects two immediate arguments", spec.Name)
}
fs, ok := txnFieldSpecByName[args[0]]
if !ok {
- return ops.errorf("gtxnsa unknown field: %#v", args[0])
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
}
_, ok = txnaFieldSpecByField[fs.field]
if !ok {
- return ops.errorf("gtxnsa unknown field: %#v", args[0])
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
}
if fs.version > ops.Version {
- return ops.errorf("gtxnsa %#v available in version %d. Missed #pragma version?", args[0], fs.version)
+ return ops.errorf("%s %#v available in version %d. Missed #pragma version?", spec.Name, args[0], fs.version)
}
arrayFieldIdx, err := strconv.ParseUint(args[1], 0, 64)
if err != nil {
return ops.error(err)
}
if arrayFieldIdx > 255 {
- return ops.errorf("gtxnsa array index beyond 255: %d", arrayFieldIdx)
+ return ops.errorf("%s array index beyond 255: %d", spec.Name, arrayFieldIdx)
}
+
ops.pending.WriteByte(spec.Opcode)
ops.pending.WriteByte(uint8(fs.field))
ops.pending.WriteByte(uint8(arrayFieldIdx))
@@ -1064,6 +1202,43 @@ func assembleAppParams(ops *OpStream, spec *OpSpec, args []string) error {
return nil
}
+func asmTxField(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) != 1 {
+ return ops.errorf("%s expects one argument", spec.Name)
+ }
+ fs, ok := txnFieldSpecByName[args[0]]
+ if !ok {
+ return ops.errorf("txn unknown field: %#v", args[0])
+ }
+ _, ok = txnaFieldSpecByField[fs.field]
+ if ok {
+ return ops.errorf("found array field %#v in %s op", args[0], spec.Name)
+ }
+ ops.pending.WriteByte(spec.Opcode)
+ ops.pending.WriteByte(uint8(fs.field))
+ return nil
+}
+
+func assembleEcdsa(ops *OpStream, spec *OpSpec, args []string) error {
+ if len(args) != 1 {
+ return ops.errorf("%s expects one argument", spec.Name)
+ }
+
+ cs, ok := ecdsaCurveSpecByName[args[0]]
+ if !ok {
+ return ops.errorf("%s unknown field: %#v", spec.Name, args[0])
+ }
+ if cs.version > ops.Version {
+ //nolint:errcheck // we continue to maintain typestack
+ ops.errorf("%s %s available in version %d. Missed #pragma version?", spec.Name, args[0], cs.version)
+ }
+
+ val := cs.field
+ ops.pending.WriteByte(spec.Opcode)
+ ops.pending.WriteByte(uint8(val))
+ return nil
+}
+
type assembleFunc func(*OpStream, *OpSpec, []string) error
// Basic assembly. Any extra bytes of opcode are encoded as byte immediates.
@@ -1228,6 +1403,17 @@ func typeUncover(ops *OpStream, args []string) (StackTypes, StackTypes) {
return anys, returns
}
+func typeTxField(ops *OpStream, args []string) (StackTypes, StackTypes) {
+ if len(args) != 1 {
+ return oneAny, nil
+ }
+ fs, ok := txnFieldSpecByName[args[0]]
+ if !ok {
+ return oneAny, nil
+ }
+ return StackTypes{fs.ftype}, nil
+}
+
// keywords handle parsing and assembling special asm language constructs like 'addr'
// We use OpSpec here, but somewhat degenerate, since they don't have opcodes or eval functions
var keywords = map[string]OpSpec{
@@ -1960,8 +2146,16 @@ type disassembleState struct {
labelCount int
pendingLabels map[int]string
+ // If we find a (back) jump to a label we did not generate
+ // (because we didn't know about it yet), rerun is set to
+ // true, and we make a second attempt to assemble once the
+ // first attempt is done. The second attempt retains all the
+ // labels found in the first pass. In effect, the first
+ // attempt to assemble becomes a first-pass in a two-pass
+ // assembly process that simply collects jump target labels.
+ rerun bool
+
nextpc int
- err error
intc []uint64
bytec [][]byte
@@ -1972,6 +2166,9 @@ func (dis *disassembleState) putLabel(label string, target int) {
dis.pendingLabels = make(map[int]string)
}
dis.pendingLabels[target] = label
+ if target <= dis.pc {
+ dis.rerun = true
+ }
}
func (dis *disassembleState) outputLabelIfNeeded() (err error) {
@@ -2031,7 +2228,7 @@ func parseIntcblock(program []byte, pc int) (intc []uint64, nextpc int, err erro
return
}
-func checkIntConstBlock(cx *evalContext) error {
+func checkIntConstBlock(cx *EvalContext) error {
pos := cx.pc + 1
numInts, bytesUsed := binary.Uvarint(cx.program[pos:])
if bytesUsed <= 0 {
@@ -2099,7 +2296,7 @@ func parseBytecBlock(program []byte, pc int) (bytec [][]byte, nextpc int, err er
return
}
-func checkByteConstBlock(cx *evalContext) error {
+func checkByteConstBlock(cx *EvalContext) error {
pos := cx.pc + 1
numItems, bytesUsed := binary.Uvarint(cx.program[pos:])
if bytesUsed <= 0 {
@@ -2257,7 +2454,7 @@ func disPushInt(dis *disassembleState, spec *OpSpec) (string, error) {
dis.nextpc = pos + bytesUsed
return fmt.Sprintf("%s %d", spec.Name, val), nil
}
-func checkPushInt(cx *evalContext) error {
+func checkPushInt(cx *EvalContext) error {
opPushInt(cx)
return cx.err
}
@@ -2277,12 +2474,12 @@ func disPushBytes(dis *disassembleState, spec *OpSpec) (string, error) {
dis.nextpc = int(end)
return fmt.Sprintf("%s 0x%s // %s", spec.Name, hex.EncodeToString(bytes), guessByteFormat(bytes)), nil
}
-func checkPushBytes(cx *evalContext) error {
+func checkPushBytes(cx *EvalContext) error {
opPushBytes(cx)
return cx.err
}
-// This is also used to disassemble gtxns
+// This is also used to disassemble gtxns, gtxnsas, txnas, itxn
func disTxn(dis *disassembleState, spec *OpSpec) (string, error) {
lastIdx := dis.pc + 1
if len(dis.program) <= lastIdx {
@@ -2313,6 +2510,7 @@ func disTxna(dis *disassembleState, spec *OpSpec) (string, error) {
return fmt.Sprintf("%s %s %d", spec.Name, TxnFieldNames[txarg], arrayFieldIdx), nil
}
+// This is also used to disassemble gtxnas
func disGtxn(dis *disassembleState, spec *OpSpec) (string, error) {
lastIdx := dis.pc + 2
if len(dis.program) <= lastIdx {
@@ -2325,7 +2523,7 @@ func disGtxn(dis *disassembleState, spec *OpSpec) (string, error) {
if int(txarg) >= len(TxnFieldNames) {
return "", fmt.Errorf("invalid txn arg index %d at pc=%d", txarg, dis.pc)
}
- return fmt.Sprintf("gtxn %d %s", gi, TxnFieldNames[txarg]), nil
+ return fmt.Sprintf("%s %d %s", spec.Name, gi, TxnFieldNames[txarg]), nil
}
func disGtxna(dis *disassembleState, spec *OpSpec) (string, error) {
@@ -2428,16 +2626,46 @@ func disAppParams(dis *disassembleState, spec *OpSpec) (string, error) {
return fmt.Sprintf("%s %s", spec.Name, AppParamsFieldNames[arg]), nil
}
+func disTxField(dis *disassembleState, spec *OpSpec) (string, error) {
+ lastIdx := dis.pc + 1
+ if len(dis.program) <= lastIdx {
+ missing := lastIdx - len(dis.program) + 1
+ return "", fmt.Errorf("unexpected %s opcode end: missing %d bytes", spec.Name, missing)
+ }
+ dis.nextpc = dis.pc + 2
+ arg := dis.program[dis.pc+1]
+ if int(arg) >= len(TxnFieldNames) {
+ return "", fmt.Errorf("invalid %s arg index %d at pc=%d", spec.Name, arg, dis.pc)
+ }
+ return fmt.Sprintf("%s %s", spec.Name, TxnFieldNames[arg]), nil
+}
+
+func disEcdsa(dis *disassembleState, spec *OpSpec) (string, error) {
+ lastIdx := dis.pc + 1
+ if len(dis.program) <= lastIdx {
+ missing := lastIdx - len(dis.program) + 1
+ return "", fmt.Errorf("unexpected %s opcode end: missing %d bytes", spec.Name, missing)
+ }
+ dis.nextpc = dis.pc + 2
+ arg := dis.program[dis.pc+1]
+ if int(arg) >= len(EcdsaCurveNames) {
+ return "", fmt.Errorf("invalid curve arg index %d at pc=%d", arg, dis.pc)
+ }
+ return fmt.Sprintf("%s %s", spec.Name, EcdsaCurveNames[arg]), nil
+}
+
type disInfo struct {
pcOffset []PCOffset
hasStatefulOps bool
}
-// disassembleInstrumented is like Disassemble, but additionally returns where
-// each program counter value maps in the disassembly
-func disassembleInstrumented(program []byte) (text string, ds disInfo, err error) {
+// disassembleInstrumented is like Disassemble, but additionally
+// returns where each program counter value maps in the
+// disassembly. If the labels names are known, they may be passed in.
+// When doing so, labels for all jump targets must be provided.
+func disassembleInstrumented(program []byte, labels map[int]string) (text string, ds disInfo, err error) {
out := strings.Builder{}
- dis := disassembleState{program: program, out: &out}
+ dis := disassembleState{program: program, out: &out, pendingLabels: labels}
version, vlen := binary.Uvarint(program)
if vlen <= 0 {
fmt.Fprintf(dis.out, "// invalid version\n")
@@ -2489,18 +2717,26 @@ func disassembleInstrumented(program []byte) (text string, ds disInfo, err error
}
text = out.String()
+
+ if dis.rerun {
+ if labels != nil {
+ err = errors.New("rerun even though we had labels")
+ return
+ }
+ return disassembleInstrumented(program, dis.pendingLabels)
+ }
return
}
// Disassemble produces a text form of program bytes.
// AssembleString(Disassemble()) should result in the same program bytes.
func Disassemble(program []byte) (text string, err error) {
- text, _, err = disassembleInstrumented(program)
+ text, _, err = disassembleInstrumented(program, nil)
return
}
// HasStatefulOps checks if the program has stateful opcodes
func HasStatefulOps(program []byte) (bool, error) {
- _, ds, err := disassembleInstrumented(program)
+ _, ds, err := disassembleInstrumented(program, nil)
return ds.hasStatefulOps, err
}
diff --git a/data/transactions/logic/assembler_test.go b/data/transactions/logic/assembler_test.go
index 37c6333cd..bc61b83b2 100644
--- a/data/transactions/logic/assembler_test.go
+++ b/data/transactions/logic/assembler_test.go
@@ -303,13 +303,43 @@ extract 0 8
int 0
int 8
extract3
-int 0
-extract64bits
int 0
-extract32bits
-int 0
-extract16bits
+extract_uint64
+int 0
+extract_uint32
+int 0
+extract_uint16
log
+txn Nonparticipation
+gtxn 0 Nonparticipation
+itxn_begin
+itxn_field Sender
+itxn_submit
+int 1
+txnas ApplicationArgs
+int 0
+gtxnas 0 ApplicationArgs
+int 0
+int 0
+gtxnsas ApplicationArgs
+int 0
+args
+int 0
+loads
+int 0
+stores
+int 32
+bzero
+ecdsa_pk_decompress Secp256k1
+byte 0x0123456789abcd
+dup
+dup
+ecdsa_verify Secp256k1
+byte 0x0123456789abcd
+dup
+dup
+ecdsa_pk_recover Secp256k1
+itxna Logs 3
`
var nonsense = map[uint64]string{
@@ -325,7 +355,7 @@ var compiled = map[uint64]string{
2: "022008b7a60cf8acd19181cf959a12f8acd19181cf951af8acd19181cf15f8acd191810f01020026050212340c68656c6c6f20776f726c6421208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d024242047465737400320032013202320328292929292a0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e0102222324252104082209240a220b230c240d250e230f23102311231223132314181b1c2b171615400003290349483403350222231d4a484848482a50512a63222352410003420000432105602105612105270463484821052b62482b642b65484821052b2106662b21056721072b682b692107210570004848210771004848361c0037001a0031183119311b311d311e311f3120210721051e312131223123312431253126312731283129312a312b312c312d312e312f",
3: "032008b7a60cf8acd19181cf959a12f8acd19181cf951af8acd19181cf15f8acd191810f01020026050212340c68656c6c6f20776f726c6421208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d024242047465737400320032013202320328292929292a0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e0102222324252104082209240a220b230c240d250e230f23102311231223132314181b1c2b171615400003290349483403350222231d4a484848482a50512a63222352410003420000432105602105612105270463484821052b62482b642b65484821052b2106662b21056721072b682b692107210570004848210771004848361c0037001a0031183119311b311d311e311f3120210721051e312131223123312431253126312731283129312a312b312c312d312e312f4478222105531421055427042106552105082106564c4d4b02210538212106391c0081e80780046a6f686e",
4: "042004010200b7a60c26040242420c68656c6c6f20776f726c6421208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d047465737400320032013202320380021234292929292a0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e01022581f8acd19181cf959a1281f8acd19181cf951a81f8acd19181cf1581f8acd191810f082209240a220b230c240d250e230f23102311231223132314181b1c28171615400003290349483403350222231d4a484848482a50512a632223524100034200004322602261222b634848222862482864286548482228236628226724286828692422700048482471004848361c0037001a0031183119311b311d311e311f312024221e312131223123312431253126312731283129312a312b312c312d312e312f44782522531422542b2355220823564c4d4b0222382123391c0081e80780046a6f686e2281d00f24231f880003420001892223902291922394239593a0a1a2a3a4a5a6a7a8a9aaabacadae23af3a00003b003c003d8164",
- 5: "052004010200b7a60c26040242420c68656c6c6f20776f726c6421208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d047465737400320032013202320380021234292929292a0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e01022581f8acd19181cf959a1281f8acd19181cf951a81f8acd19181cf1581f8acd191810f082209240a220b230c240d250e230f23102311231223132314181b1c28171615400003290349483403350222231d4a484848482a50512a632223524100034200004322602261222b634848222862482864286548482228236628226724286828692422700048482471004848361c0037001a0031183119311b311d311e311f312024221e312131223123312431253126312731283129312a312b312c312d312e312f44782522531422542b2355220823564c4d4b0222382123391c0081e80780046a6f686e2281d00f24231f880003420001892223902291922394239593a0a1a2a3a4a5a6a7a8a9aaabacadae23af3a00003b003c003d816472064e014f0180070123456789abcd57000824810858245b245a2459b0",
+ 5: "052004010002b7a60c26050242420c68656c6c6f20776f726c6421070123456789abcd208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d047465737400320032013202320380021234292929292b0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e01022581f8acd19181cf959a1281f8acd19181cf951a81f8acd19181cf1581f8acd191810f082209240a220b230c240d250e230f23102311231223132314181b1c28171615400003290349483403350222231d4a484848482b50512a632223524100034200004322602261222704634848222862482864286548482228246628226723286828692322700048482371004848361c0037001a0031183119311b311d311e311f312023221e312131223123312431253126312731283129312a312b312c312d312e312f447825225314225427042455220824564c4d4b0222382124391c0081e80780046a6f686e2281d00f23241f880003420001892224902291922494249593a0a1a2a3a4a5a6a7a8a9aaabacadae24af3a00003b003c003d816472064e014f012a57000823810858235b235a2359b03139330039b1b200b322c01a23c1001a2323c21a23c3233e233f8120af06002a494905002a49490700b53a03",
}
func pseudoOp(opcode string) bool {
@@ -384,19 +414,11 @@ func TestAssembleAlias(t *testing.T) {
t.Parallel()
source1 := `txn Accounts 0 // alias to txna
pop
-gtxn 0 ApplicationArgs 0 // alias to gtxn
+gtxn 0 ApplicationArgs 0 // alias to gtxna
pop
`
- ops1, err := AssembleStringWithVersion(source1, AssemblerMaxVersion)
- require.NoError(t, err)
-
- source2 := `txna Accounts 0
-pop
-gtxna 0 ApplicationArgs 0
-pop
-`
- ops2, err := AssembleStringWithVersion(source2, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops1 := testProg(t, source1, AssemblerMaxVersion)
+ ops2 := testProg(t, strings.Replace(source1, "txn", "txna", -1), AssemblerMaxVersion)
require.Equal(t, ops1.Program, ops2.Program)
}
@@ -431,6 +453,20 @@ func testProg(t testing.TB, source string, ver uint64, expected ...expect) *OpSt
require.NoError(t, err)
require.NotNil(t, ops)
require.NotNil(t, ops.Program)
+ // It should always be possible to Disassemble
+ dis, err := Disassemble(ops.Program)
+ require.NoError(t, err)
+ // And, while the disassembly may not match input
+ // exactly, the assembly of the disassembly should
+ // give the same bytecode
+ ops2, err := AssembleStringWithVersion(dis, ver)
+ if len(ops2.Errors) > 0 || err != nil || ops2 == nil || ops2.Program == nil {
+ t.Log(program)
+ t.Log(dis)
+ }
+ require.Empty(t, ops2.Errors)
+ require.NoError(t, err)
+ require.Equal(t, ops.Program, ops2.Program)
} else {
require.Error(t, err)
errors := ops.Errors
@@ -486,13 +522,15 @@ func TestAssembleTxna(t *testing.T) {
testLine(t, "gtxna 0 Sender 256", AssemblerMaxVersion, "gtxna unknown field: \"Sender\"")
testLine(t, "txn Accounts 0", 1, "txn expects one argument")
testLine(t, "txn Accounts 0 1", 2, "txn expects one or two arguments")
- testLine(t, "txna Accounts 0 1", AssemblerMaxVersion, "txna expects two arguments")
+ testLine(t, "txna Accounts 0 1", AssemblerMaxVersion, "txna expects two immediate arguments")
+ testLine(t, "txnas Accounts 1", AssemblerMaxVersion, "txnas expects one immediate argument")
testLine(t, "txna Accounts a", AssemblerMaxVersion, "strconv.ParseUint...")
testLine(t, "gtxn 0 Sender 0", 1, "gtxn expects two arguments")
testLine(t, "gtxn 0 Sender 1 2", 2, "gtxn expects two or three arguments")
testLine(t, "gtxna 0 Accounts 1 2", AssemblerMaxVersion, "gtxna expects three arguments")
testLine(t, "gtxna a Accounts 0", AssemblerMaxVersion, "strconv.ParseUint...")
testLine(t, "gtxna 0 Accounts a", AssemblerMaxVersion, "strconv.ParseUint...")
+ testLine(t, "gtxnas Accounts 1 2", AssemblerMaxVersion, "gtxnas expects two immediate arguments")
testLine(t, "txn ABC", 2, "txn unknown field: \"ABC\"")
testLine(t, "gtxn 0 ABC", 2, "gtxn unknown field: \"ABC\"")
testLine(t, "gtxn a ABC", 2, "strconv.ParseUint...")
@@ -592,8 +630,7 @@ func TestAssembleInt(t *testing.T) {
}
text := "int 0xcafebabe"
- ops, err := AssembleStringWithVersion(text, v)
- require.NoError(t, err)
+ ops := testProg(t, text, v)
s := hex.EncodeToString(ops.Program)
require.Equal(t, mutateProgVersion(v, expected), s)
})
@@ -643,8 +680,7 @@ func TestAssembleBytes(t *testing.T) {
}
for _, vi := range variations {
- ops, err := AssembleStringWithVersion(vi, v)
- require.NoError(t, err)
+ ops := testProg(t, vi, v)
s := hex.EncodeToString(ops.Program)
require.Equal(t, mutateProgVersion(v, expected), s)
}
@@ -890,8 +926,7 @@ int ClearState
for v := uint64(optimizeConstantsEnabledVersion); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(program, v)
- require.NoError(t, err)
+ ops := testProg(t, program, v)
s := hex.EncodeToString(ops.Program)
require.Equal(t, mutateProgVersion(v, expected), s)
})
@@ -1184,8 +1219,7 @@ intc 0
intc 0
bnz done
done:`
- ops, err := AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops := testProg(t, source, AssemblerMaxVersion)
require.Equal(t, 9, len(ops.Program))
expectedProgBytes := []byte("\x01\x20\x01\x01\x22\x22\x40\x00\x00")
expectedProgBytes[0] = byte(AssemblerMaxVersion)
@@ -1249,6 +1283,7 @@ global Round
global LatestTimestamp
global CurrentApplicationID
global CreatorAddress
+global GroupID
txn Sender
txn Fee
bnz label1
@@ -1309,6 +1344,12 @@ txn LocalNumUint
txn LocalNumByteSlice
gtxn 12 Fee
txn ExtraProgramPages
+txn Nonparticipation
+global CurrentApplicationAddress
+itxna Logs 1
+itxn NumLogs
+itxn CreatedAssetID
+itxn CreatedApplicationID
`, AssemblerMaxVersion)
for _, globalField := range GlobalFieldNames {
if !strings.Contains(text, globalField) {
@@ -1394,6 +1435,7 @@ func TestConstantDisassembly(t *testing.T) {
}
func TestConstantArgs(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
testProg(t, "int", v, expect{1, "int needs one argument"})
@@ -1967,8 +2009,7 @@ func TestPragmas(t *testing.T) {
testProg(t, `#pragma version 100`, assemblerNoVersion,
expect{1, "unsupported version: 100"})
- ops, err := AssembleStringWithVersion(`int 1`, 99)
- require.Error(t, err)
+ testProg(t, `int 1`, 99, expect{0, "Can not assemble version 99"})
testProg(t, `#pragma version 0`, assemblerNoVersion,
expect{1, "unsupported version: 0"})
@@ -1977,7 +2018,7 @@ func TestPragmas(t *testing.T) {
expect{1, `bad #pragma version: "a"`})
// will default to 1
- ops = testProg(t, "int 3", assemblerNoVersion)
+ ops := testProg(t, "int 3", assemblerNoVersion)
require.Equal(t, uint64(1), ops.Version)
require.Equal(t, uint8(1), ops.Program[0])
@@ -1991,7 +2032,7 @@ func TestPragmas(t *testing.T) {
testProg(t, "#pragma version 1", 2, expect{1, "version mismatch..."})
testProg(t, "#pragma version 2", 1, expect{1, "version mismatch..."})
- ops = testProg(t, "#pragma version 2\n#pragma version 1", assemblerNoVersion,
+ testProg(t, "#pragma version 2\n#pragma version 1", assemblerNoVersion,
expect{2, "version mismatch..."})
// repetitive, but fine
@@ -2097,7 +2138,7 @@ func TestErrShortBytecblock(t *testing.T) {
_, _, err = parseIntcblock(ops.Program, 0)
require.Equal(t, err, errShortIntcblock)
- var cx evalContext
+ var cx EvalContext
cx.program = ops.Program
err = checkIntConstBlock(&cx)
require.Equal(t, err, errShortIntcblock)
@@ -2139,6 +2180,7 @@ flip: // [x]
}
func TestSwapTypeCheck(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
/* reconfirm that we detect this type error */
testProg(t, "int 1; byte 0x1234; +", AssemblerMaxVersion, expect{3, "+ arg 1..."})
@@ -2148,6 +2190,7 @@ func TestSwapTypeCheck(t *testing.T) {
}
func TestDigAsm(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testProg(t, "int 1; dig; +", AssemblerMaxVersion, expect{2, "dig expects 1 immediate..."})
testProg(t, "int 1; dig junk; +", AssemblerMaxVersion, expect{2, "...invalid syntax..."})
@@ -2167,6 +2210,7 @@ func TestDigAsm(t *testing.T) {
}
func TestEqualsTypeCheck(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testProg(t, "int 1; byte 0x1234; ==", AssemblerMaxVersion, expect{3, "== arg 0..."})
testProg(t, "int 1; byte 0x1234; !=", AssemblerMaxVersion, expect{3, "!= arg 0..."})
@@ -2175,6 +2219,7 @@ func TestEqualsTypeCheck(t *testing.T) {
}
func TestDupTypeCheck(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testProg(t, "byte 0x1234; dup; int 1; +", AssemblerMaxVersion, expect{4, "+ arg 0..."})
testProg(t, "byte 0x1234; int 1; dup; +", AssemblerMaxVersion)
@@ -2189,18 +2234,21 @@ func TestDupTypeCheck(t *testing.T) {
}
func TestSelectTypeCheck(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testProg(t, "int 1; int 2; int 3; select; len", AssemblerMaxVersion, expect{5, "len arg 0..."})
testProg(t, "byte 0x1234; byte 0x5678; int 3; select; !", AssemblerMaxVersion, expect{5, "! arg 0..."})
}
func TestSetBitTypeCheck(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testProg(t, "int 1; int 2; int 3; setbit; len", AssemblerMaxVersion, expect{5, "len arg 0..."})
testProg(t, "byte 0x1234; int 2; int 3; setbit; !", AssemblerMaxVersion, expect{5, "! arg 0..."})
}
func TestCoverAsm(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testProg(t, `int 4; byte "john"; int 5; cover 2; pop; +`, AssemblerMaxVersion)
testProg(t, `int 4; byte "ayush"; int 5; cover 1; pop; +`, AssemblerMaxVersion)
@@ -2209,9 +2257,20 @@ func TestCoverAsm(t *testing.T) {
}
func TestUncoverAsm(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testProg(t, `int 4; byte "john"; int 5; uncover 2; +`, AssemblerMaxVersion)
testProg(t, `int 4; byte "ayush"; int 5; uncover 1; pop; +`, AssemblerMaxVersion)
testProg(t, `int 1; byte "jj"; byte "ayush"; byte "john"; int 5; uncover 4; +`, AssemblerMaxVersion)
testProg(t, `int 4; byte "ayush"; int 5; uncover 1; +`, AssemblerMaxVersion, expect{5, "+ arg 1..."})
}
+
+func TestTxTypes(t *testing.T) {
+ testProg(t, "itxn_begin; itxn_field Sender", 5, expect{2, "itxn_field Sender expects 1 stack argument..."})
+ testProg(t, "itxn_begin; int 1; itxn_field Sender", 5, expect{3, "...wanted type []byte got uint64"})
+ testProg(t, "itxn_begin; byte 0x56127823; itxn_field Sender", 5)
+
+ testProg(t, "itxn_begin; itxn_field Amount", 5, expect{2, "itxn_field Amount expects 1 stack argument..."})
+ testProg(t, "itxn_begin; byte 0x87123376; itxn_field Amount", 5, expect{3, "...wanted type uint64 got []byte"})
+ testProg(t, "itxn_begin; int 1; itxn_field Amount", 5)
+}
diff --git a/data/transactions/logic/backwardCompat_test.go b/data/transactions/logic/backwardCompat_test.go
index d78275644..226c94840 100644
--- a/data/transactions/logic/backwardCompat_test.go
+++ b/data/transactions/logic/backwardCompat_test.go
@@ -22,8 +22,11 @@ import (
"strings"
"testing"
+ "github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/transactions/logictest"
+ "github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -371,6 +374,151 @@ func TestBackwardCompatTEALv1(t *testing.T) {
}
+// ensure v2 fields error on pre TEAL v2 logicsig version
+// ensure v2 fields error in v1 program
+func TestBackwardCompatGlobalFields(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ t.Parallel()
+ var fields []globalFieldSpec
+ for _, fs := range globalFieldSpecs {
+ if fs.version > 1 {
+ fields = append(fields, fs)
+ }
+ }
+ require.Greater(t, len(fields), 1)
+
+ ledger := logictest.MakeLedger(nil)
+ for _, field := range fields {
+ text := fmt.Sprintf("global %s", field.field.String())
+ // check assembler fails if version before introduction
+ testLine(t, text, assemblerNoVersion, "...available in version...")
+ for v := uint64(0); v < field.version; v++ {
+ testLine(t, text, v, "...available in version...")
+ }
+
+ ops := testProg(t, text, AssemblerMaxVersion)
+
+ proto := config.Consensus[protocol.ConsensusV23]
+ require.False(t, proto.Application)
+ ep := defaultEvalParams(nil, nil)
+ ep.Proto = &proto
+ ep.Ledger = ledger
+
+ // check failure with version check
+ _, err := Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "greater than protocol supported version")
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "greater than protocol supported version")
+
+ // check opcodes failures
+ ops.Program[0] = 1 // set version to 1
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid global field")
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid global field")
+
+ // check opcodes failures
+ ops.Program[0] = 0 // set version to 0
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid global field")
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid global field")
+ }
+}
+
+// ensure v2 fields error in v1 program
+func TestBackwardCompatTxnFields(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ t.Parallel()
+ var fields []txnFieldSpec
+ for _, fs := range txnFieldSpecs {
+ if fs.version > 1 {
+ fields = append(fields, fs)
+ }
+ }
+ require.Greater(t, len(fields), 1)
+
+ tests := []string{
+ "txn %s",
+ "gtxn 0 %s",
+ }
+
+ ledger := logictest.MakeLedger(nil)
+ txn := makeSampleTxn()
+ // We'll reject too early if we have a nonzero RekeyTo, because that
+ // field must be zero for every txn in the group if this is an old
+ // TEAL version
+ txn.Txn.RekeyTo = basics.Address{}
+ txgroup := makeSampleTxnGroup(txn)
+ for _, fs := range fields {
+ field := fs.field.String()
+ for _, command := range tests {
+ text := fmt.Sprintf(command, field)
+ asmError := "...available in version ..."
+ if _, ok := txnaFieldSpecByField[fs.field]; ok {
+ parts := strings.Split(text, " ")
+ op := parts[0]
+ asmError = fmt.Sprintf("found array field %#v in %s op", field, op)
+ }
+ // check assembler fails if version before introduction
+ testLine(t, text, assemblerNoVersion, asmError)
+ for v := uint64(0); v < fs.version; v++ {
+ testLine(t, text, v, asmError)
+ }
+
+ ops, err := AssembleStringWithVersion(text, AssemblerMaxVersion)
+ if _, ok := txnaFieldSpecByField[fs.field]; ok {
+ // "txn Accounts" is invalid, so skip evaluation
+ require.Error(t, err, asmError)
+ continue
+ } else {
+ require.NoError(t, err)
+ }
+
+ proto := config.Consensus[protocol.ConsensusV23]
+ require.False(t, proto.Application)
+ ep := defaultEvalParams(nil, nil)
+ ep.Proto = &proto
+ ep.Ledger = ledger
+ ep.TxnGroup = txgroup
+
+ // check failure with version check
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "greater than protocol supported version")
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "greater than protocol supported version")
+
+ // check opcodes failures
+ ops.Program[0] = 1 // set version to 1
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid txn field")
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid txn field")
+
+ // check opcodes failures
+ ops.Program[0] = 0 // set version to 0
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid txn field")
+ _, err = Eval(ops.Program, ep)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "invalid txn field")
+ }
+ }
+}
+
func TestBackwardCompatAssemble(t *testing.T) {
partitiontest.PartitionTest(t)
@@ -404,3 +552,12 @@ done:`
})
}
}
+
+func TestExplicitConstants(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ require.Equal(t, 4096, MaxStringSize, "constant changed, move it to consensus params")
+ require.Equal(t, 64, MaxByteMathSize, "constant changed, move it to consensus params")
+ require.Equal(t, 1024, MaxLogSize, "constant changed, move it to consensus params")
+ require.Equal(t, 32, MaxLogCalls, "constant changed, move it to consensus params")
+}
diff --git a/data/transactions/logic/debugger.go b/data/transactions/logic/debugger.go
index b591aad01..f90e7b3f3 100644
--- a/data/transactions/logic/debugger.go
+++ b/data/transactions/logic/debugger.go
@@ -76,7 +76,7 @@ type DebugState struct {
Error string `codec:"error"`
// global/local state changes are updated every step. Stateful TEAL only.
- basics.EvalDelta
+ transactions.EvalDelta
}
// GetProgramID returns program or execution ID that is string representation of sha256 checksum.
@@ -86,8 +86,8 @@ func GetProgramID(program []byte) string {
return hex.EncodeToString(hash[:])
}
-func makeDebugState(cx *evalContext) DebugState {
- disasm, dsInfo, err := disassembleInstrumented(cx.program)
+func makeDebugState(cx *EvalContext) DebugState {
+ disasm, dsInfo, err := disassembleInstrumented(cx.program, nil)
if err != nil {
// Report disassembly error as program text
disasm = err.Error()
@@ -98,7 +98,7 @@ func makeDebugState(cx *evalContext) DebugState {
ExecID: GetProgramID(cx.program),
Disassembly: disasm,
PCOffset: dsInfo.pcOffset,
- GroupIndex: cx.GroupIndex,
+ GroupIndex: int(cx.GroupIndex),
TxnGroup: cx.TxnGroup,
Proto: cx.Proto,
}
@@ -194,7 +194,7 @@ func valueDeltaToValueDelta(vd *basics.ValueDelta) basics.ValueDelta {
}
}
-func (cx *evalContext) refreshDebugState() *DebugState {
+func (cx *EvalContext) refreshDebugState() *DebugState {
ds := &cx.debugState
// Update pc, line, error, stack, and scratch space
@@ -204,12 +204,12 @@ func (cx *evalContext) refreshDebugState() *DebugState {
ds.Error = cx.err.Error()
}
- stack := make([]basics.TealValue, len(cx.stack), len(cx.stack))
+ stack := make([]basics.TealValue, len(cx.stack))
for i, sv := range cx.stack {
stack[i] = stackValueToTealValue(&sv)
}
- scratch := make([]basics.TealValue, len(cx.scratch), len(cx.scratch))
+ scratch := make([]basics.TealValue, len(cx.scratch))
for i, sv := range cx.scratch {
scratch[i] = stackValueToTealValue(&sv)
}
diff --git a/data/transactions/logic/doc.go b/data/transactions/logic/doc.go
index cb1c323f3..0e4a64664 100644
--- a/data/transactions/logic/doc.go
+++ b/data/transactions/logic/doc.go
@@ -24,98 +24,115 @@ import (
// short description of every op
var opDocByName = map[string]string{
- "err": "Error. Panic immediately. This is primarily a fencepost against accidental zero bytes getting compiled into programs.",
- "sha256": "SHA256 hash of value X, yields [32]byte",
- "keccak256": "Keccak256 hash of value X, yields [32]byte",
- "sha512_256": "SHA512_256 hash of value X, yields [32]byte",
- "ed25519verify": "for (data A, signature B, pubkey C) verify the signature of (\"ProgData\" || program_hash || data) against the pubkey => {0 or 1}",
- "+": "A plus B. Panic on overflow.",
- "-": "A minus B. Panic if B > A.",
- "/": "A divided by B (truncated division). Panic if B == 0.",
- "*": "A times B. Panic on overflow.",
- "<": "A less than B => {0 or 1}",
- ">": "A greater than B => {0 or 1}",
- "<=": "A less than or equal to B => {0 or 1}",
- ">=": "A greater than or equal to B => {0 or 1}",
- "&&": "A is not zero and B is not zero => {0 or 1}",
- "||": "A is not zero or B is not zero => {0 or 1}",
- "==": "A is equal to B => {0 or 1}",
- "!=": "A is not equal to B => {0 or 1}",
- "!": "X == 0 yields 1; else 0",
- "len": "yields length of byte value X",
- "itob": "converts uint64 X to big endian bytes",
- "btoi": "converts bytes X as big endian to uint64",
- "%": "A modulo B. Panic if B == 0.",
- "|": "A bitwise-or B",
- "&": "A bitwise-and B",
- "^": "A bitwise-xor B",
- "~": "bitwise invert value X",
- "shl": "A times 2^B, modulo 2^64",
- "shr": "A divided by 2^B",
- "sqrt": "The largest integer B such that B^2 <= X",
- "bitlen": "The highest set bit in X. If X is a byte-array, it is interpreted as a big-endian unsigned integer. bitlen of 0 is 0, bitlen of 8 is 4",
- "exp": "A raised to the Bth power. Panic if A == B == 0 and on overflow",
- "expw": "A raised to the Bth power as a 128-bit long result as low (top) and high uint64 values on the stack. Panic if A == B == 0 or if the results exceeds 2^128-1",
- "mulw": "A times B out to 128-bit long result as low (top) and high uint64 values on the stack",
- "addw": "A plus B out to 128-bit long result as sum (top) and carry-bit uint64 values on the stack",
- "divmodw": "Pop four uint64 values. The deepest two are interpreted as a uint128 dividend (deepest value is high word), the top two are interpreted as a uint128 divisor. Four uint64 values are pushed to the stack. The deepest two are the quotient (deeper value is the high uint64). The top two are the remainder, low bits on top.",
- "intcblock": "prepare block of uint64 constants for use by intc",
- "intc": "push Ith constant from intcblock to stack",
- "intc_0": "push constant 0 from intcblock to stack",
- "intc_1": "push constant 1 from intcblock to stack",
- "intc_2": "push constant 2 from intcblock to stack",
- "intc_3": "push constant 3 from intcblock to stack",
- "pushint": "push immediate UINT to the stack as an integer",
- "bytecblock": "prepare block of byte-array constants for use by bytec",
- "bytec": "push Ith constant from bytecblock to stack",
- "bytec_0": "push constant 0 from bytecblock to stack",
- "bytec_1": "push constant 1 from bytecblock to stack",
- "bytec_2": "push constant 2 from bytecblock to stack",
- "bytec_3": "push constant 3 from bytecblock to stack",
- "pushbytes": "push the following program bytes to the stack",
- "bzero": "push a byte-array of length X, containing all zero bytes",
- "arg": "push Nth LogicSig argument to stack",
- "arg_0": "push LogicSig argument 0 to stack",
- "arg_1": "push LogicSig argument 1 to stack",
- "arg_2": "push LogicSig argument 2 to stack",
- "arg_3": "push LogicSig argument 3 to stack",
- "txn": "push field F of current transaction to stack",
- "gtxn": "push field F of the Tth transaction in the current group",
- "gtxns": "push field F of the Xth transaction in the current group",
- "txna": "push Ith value of the array field F of the current transaction",
- "gtxna": "push Ith value of the array field F from the Tth transaction in the current group",
- "gtxnsa": "push Ith value of the array field F from the Xth transaction in the current group",
- "global": "push value from globals to stack",
- "load": "copy a value from scratch space to the stack",
- "store": "pop a value from the stack and store to scratch space",
- "gload": "push Ith scratch space index of the Tth transaction in the current group",
- "gloads": "push Ith scratch space index of the Xth transaction in the current group",
- "gaid": "push the ID of the asset or application created in the Tth transaction of the current group",
- "gaids": "push the ID of the asset or application created in the Xth transaction of the current group",
- "bnz": "branch to TARGET if value X is not zero",
- "bz": "branch to TARGET if value X is zero",
- "b": "branch unconditionally to TARGET",
- "return": "use last value on stack as success value; end",
- "pop": "discard value X from stack",
- "dup": "duplicate last value on stack",
- "dup2": "duplicate two last values on stack: A, B -> A, B, A, B",
- "dig": "push the Nth value from the top of the stack. dig 0 is equivalent to dup",
- "cover": "remove top of stack, and place it down the stack such that N elements are above it",
- "uncover": "remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack",
- "swap": "swaps two last values on stack: A, B -> B, A",
- "select": "selects one of two values based on top-of-stack: A, B, C -> (if C != 0 then B else A)",
- "concat": "pop two byte-arrays A and B and join them, push the result",
- "substring": "pop a byte-array A. For immediate values in 0..255 S and E: extract a range of bytes from A starting at S up to but not including E, push the substring result. If E < S, or either is larger than the array length, the program fails",
- "substring3": "pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including C, push the substring result. If C < B, or either is larger than the array length, the program fails",
- "getbit": "pop a target A (integer or byte-array), and index B. Push the Bth bit of A.",
- "setbit": "pop a target A, index B, and bit C. Set the Bth bit of A to C, and push the result",
- "getbyte": "pop a byte-array A and integer B. Extract the Bth byte of A and push it as an integer",
- "setbyte": "pop a byte-array A, integer B, and small integer C (between 0..255). Set the Bth byte of A to C, and push the result",
- "extract": "pop a byte-array A. For immediate values in 0..255 S and L: extract a range of bytes from A starting at S up to but not including S+L, push the substring result. If L is 0, then extract to the end of the string. If S or S+L is larger than the array length, the program fails",
- "extract3": "pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including B+C, push the substring result. If B or B+C is larger than the array length, the program fails",
- "extract16bits": "pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+2, convert bytes as big endian and push the uint64 result. If B or B+2 is larger than the array length, the program fails",
- "extract32bits": "pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+4, convert bytes as big endian and push the uint64 result. If B or B+4 is larger than the array length, the program fails",
- "extract64bits": "pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+8, convert bytes as big endian and push the uint64 result. If B or B+8 is larger than the array length, the program fails",
+ "err": "Error. Fail immediately. This is primarily a fencepost against accidental zero bytes getting compiled into programs.",
+ "sha256": "SHA256 hash of value X, yields [32]byte",
+ "keccak256": "Keccak256 hash of value X, yields [32]byte",
+ "sha512_256": "SHA512_256 hash of value X, yields [32]byte",
+ "ed25519verify": "for (data A, signature B, pubkey C) verify the signature of (\"ProgData\" || program_hash || data) against the pubkey => {0 or 1}",
+ "ecdsa_verify": "for (data A, signature B, C and pubkey D, E) verify the signature of the data against the pubkey => {0 or 1}",
+ "ecdsa_pk_decompress": "decompress pubkey A into components X, Y => [*... stack*, X, Y]",
+ "ecdsa_pk_recover": "for (data A, recovery id B, signature C, D) recover a public key => [*... stack*, X, Y]",
+
+ "+": "A plus B. Fail on overflow.",
+ "-": "A minus B. Fail if B > A.",
+ "/": "A divided by B (truncated division). Fail if B == 0.",
+ "*": "A times B. Fail on overflow.",
+ "<": "A less than B => {0 or 1}",
+ ">": "A greater than B => {0 or 1}",
+ "<=": "A less than or equal to B => {0 or 1}",
+ ">=": "A greater than or equal to B => {0 or 1}",
+ "&&": "A is not zero and B is not zero => {0 or 1}",
+ "||": "A is not zero or B is not zero => {0 or 1}",
+ "==": "A is equal to B => {0 or 1}",
+ "!=": "A is not equal to B => {0 or 1}",
+ "!": "X == 0 yields 1; else 0",
+ "len": "yields length of byte value X",
+ "itob": "converts uint64 X to big endian bytes",
+ "btoi": "converts bytes X as big endian to uint64",
+ "%": "A modulo B. Fail if B == 0.",
+ "|": "A bitwise-or B",
+ "&": "A bitwise-and B",
+ "^": "A bitwise-xor B",
+ "~": "bitwise invert value X",
+ "shl": "A times 2^B, modulo 2^64",
+ "shr": "A divided by 2^B",
+ "sqrt": "The largest integer B such that B^2 <= X",
+ "bitlen": "The highest set bit in X. If X is a byte-array, it is interpreted as a big-endian unsigned integer. bitlen of 0 is 0, bitlen of 8 is 4",
+ "exp": "A raised to the Bth power. Fail if A == B == 0 and on overflow",
+ "expw": "A raised to the Bth power as a 128-bit long result as low (top) and high uint64 values on the stack. Fail if A == B == 0 or if the results exceeds 2^128-1",
+ "mulw": "A times B out to 128-bit long result as low (top) and high uint64 values on the stack",
+ "addw": "A plus B out to 128-bit long result as sum (top) and carry-bit uint64 values on the stack",
+ "divmodw": "Pop four uint64 values. The deepest two are interpreted as a uint128 dividend (deepest value is high word), the top two are interpreted as a uint128 divisor. Four uint64 values are pushed to the stack. The deepest two are the quotient (deeper value is the high uint64). The top two are the remainder, low bits on top.",
+
+ "intcblock": "prepare block of uint64 constants for use by intc",
+ "intc": "push Ith constant from intcblock to stack",
+ "intc_0": "push constant 0 from intcblock to stack",
+ "intc_1": "push constant 1 from intcblock to stack",
+ "intc_2": "push constant 2 from intcblock to stack",
+ "intc_3": "push constant 3 from intcblock to stack",
+ "pushint": "push immediate UINT to the stack as an integer",
+ "bytecblock": "prepare block of byte-array constants for use by bytec",
+ "bytec": "push Ith constant from bytecblock to stack",
+ "bytec_0": "push constant 0 from bytecblock to stack",
+ "bytec_1": "push constant 1 from bytecblock to stack",
+ "bytec_2": "push constant 2 from bytecblock to stack",
+ "bytec_3": "push constant 3 from bytecblock to stack",
+ "pushbytes": "push the following program bytes to the stack",
+
+ "bzero": "push a byte-array of length X, containing all zero bytes",
+ "arg": "push Nth LogicSig argument to stack",
+ "arg_0": "push LogicSig argument 0 to stack",
+ "arg_1": "push LogicSig argument 1 to stack",
+ "arg_2": "push LogicSig argument 2 to stack",
+ "arg_3": "push LogicSig argument 3 to stack",
+ "args": "push Xth LogicSig argument to stack",
+ "txn": "push field F of current transaction to stack",
+ "gtxn": "push field F of the Tth transaction in the current group",
+ "gtxns": "push field F of the Xth transaction in the current group",
+ "txna": "push Ith value of the array field F of the current transaction",
+ "gtxna": "push Ith value of the array field F from the Tth transaction in the current group",
+ "gtxnsa": "push Ith value of the array field F from the Xth transaction in the current group",
+ "txnas": "push Xth value of the array field F of the current transaction",
+ "gtxnas": "push Xth value of the array field F from the Tth transaction in the current group",
+ "gtxnsas": "pop an index A and an index B. push Bth value of the array field F from the Ath transaction in the current group",
+ "itxn": "push field F of the last inner transaction to stack",
+ "itxna": "push Ith value of the array field F of the last inner transaction to stack",
+
+ "global": "push value from globals to stack",
+ "load": "copy a value from scratch space to the stack. All scratch spaces are 0 at program start.",
+ "store": "pop value X. store X to the Ith scratch space",
+ "loads": "copy a value from the Xth scratch space to the stack. All scratch spaces are 0 at program start.",
+ "stores": "pop indexes A and B. store B to the Ath scratch space",
+ "gload": "push Ith scratch space index of the Tth transaction in the current group",
+ "gloads": "push Ith scratch space index of the Xth transaction in the current group",
+ "gaid": "push the ID of the asset or application created in the Tth transaction of the current group",
+ "gaids": "push the ID of the asset or application created in the Xth transaction of the current group",
+
+ "bnz": "branch to TARGET if value X is not zero",
+ "bz": "branch to TARGET if value X is zero",
+ "b": "branch unconditionally to TARGET",
+ "return": "use last value on stack as success value; end",
+ "pop": "discard value X from stack",
+ "dup": "duplicate last value on stack",
+ "dup2": "duplicate two last values on stack: A, B -> A, B, A, B",
+ "dig": "push the Nth value from the top of the stack. dig 0 is equivalent to dup",
+ "cover": "remove top of stack, and place it deeper in the stack such that N elements are above it. Fails if stack depth <= N.",
+ "uncover": "remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack. Fails if stack depth <= N.",
+ "swap": "swaps two last values on stack: A, B -> B, A",
+ "select": "selects one of two values based on top-of-stack: A, B, C -> (if C != 0 then B else A)",
+
+ "concat": "pop two byte-arrays A and B and join them, push the result",
+ "substring": "pop a byte-array A. For immediate values in 0..255 S and E: extract a range of bytes from A starting at S up to but not including E, push the substring result. If E < S, or either is larger than the array length, the program fails",
+ "substring3": "pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including C, push the substring result. If C < B, or either is larger than the array length, the program fails",
+ "getbit": "pop a target A (integer or byte-array), and index B. Push the Bth bit of A.",
+ "setbit": "pop a target A, index B, and bit C. Set the Bth bit of A to C, and push the result",
+ "getbyte": "pop a byte-array A and integer B. Extract the Bth byte of A and push it as an integer",
+ "setbyte": "pop a byte-array A, integer B, and small integer C (between 0..255). Set the Bth byte of A to C, and push the result",
+ "extract": "pop a byte-array A. For immediate values in 0..255 S and L: extract a range of bytes from A starting at S up to but not including S+L, push the substring result. If L is 0, then extract to the end of the string. If S or S+L is larger than the array length, the program fails",
+ "extract3": "pop a byte-array A and two integers B and C. Extract a range of bytes from A starting at B up to but not including B+C, push the substring result. If B+C is larger than the array length, the program fails",
+ "extract_uint16": "pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+2, convert bytes as big endian and push the uint64 result. If B+2 is larger than the array length, the program fails",
+ "extract_uint32": "pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+4, convert bytes as big endian and push the uint64 result. If B+4 is larger than the array length, the program fails",
+ "extract_uint64": "pop a byte-array A and integer B. Extract a range of bytes from A starting at B up to but not including B+8, convert bytes as big endian and push the uint64 result. If B+8 is larger than the array length, the program fails",
"balance": "get balance for account A, in microalgos. The balance is observed after the effects of previous transactions in the group, and after the fee for the current transaction is deducted.",
"min_balance": "get minimum required balance for account A, in microalgos. Required balance is affected by [ASA](https://developer.algorand.org/docs/features/asa/#assets-overview) and [App](https://developer.algorand.org/docs/features/asc1/stateful/#minimum-balance-requirement-for-a-smart-contract) usage. When creating or opting into an app, the minimum balance grows before the app code runs, therefore the increase is visible there. When deleting or closing out, the minimum balance decreases after the app executes.",
@@ -136,8 +153,8 @@ var opDocByName = map[string]string{
"retsub": "pop the top instruction from the call stack and branch to it",
"b+": "A plus B, where A and B are byte-arrays interpreted as big-endian unsigned integers",
- "b-": "A minus B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic on underflow.",
- "b/": "A divided by B (truncated division), where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic if B is zero.",
+ "b-": "A minus B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail on underflow.",
+ "b/": "A divided by B (truncated division), where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail if B is zero.",
"b*": "A times B, where A and B are byte-arrays interpreted as big-endian unsigned integers.",
"b<": "A is less than B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1}",
"b>": "A is greater than B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1}",
@@ -145,13 +162,16 @@ var opDocByName = map[string]string{
"b>=": "A is greater than or equal to B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1}",
"b==": "A is equals to B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1}",
"b!=": "A is not equal to B, where A and B are byte-arrays interpreted as big-endian unsigned integers => { 0 or 1}",
- "b%": "A modulo B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Panic if B is zero.",
+ "b%": "A modulo B, where A and B are byte-arrays interpreted as big-endian unsigned integers. Fail if B is zero.",
"b|": "A bitwise-or B, where A and B are byte-arrays, zero-left extended to the greater of their lengths",
"b&": "A bitwise-and B, where A and B are byte-arrays, zero-left extended to the greater of their lengths",
"b^": "A bitwise-xor B, where A and B are byte-arrays, zero-left extended to the greater of their lengths",
"b~": "X with all bits inverted",
- "log": "write bytes to log state of the current application",
+ "log": "write bytes to log state of the current application",
+ "itxn_begin": "Begin preparation of a new inner transaction",
+ "itxn_field": "Set field F of the current inner transaction to X",
+ "itxn_submit": "Execute the current inner transaction. Fail if 16 inner transactions have already been executed, or if the transaction itself fails.",
}
// OpDoc returns a description of the op
@@ -160,37 +180,54 @@ func OpDoc(opName string) string {
}
var opcodeImmediateNotes = map[string]string{
- "intcblock": "{varuint length} [{varuint value}, ...]",
- "intc": "{uint8 int constant index}",
- "pushint": "{varuint int}",
- "bytecblock": "{varuint length} [({varuint value length} bytes), ...]",
- "bytec": "{uint8 byte constant index}",
- "pushbytes": "{varuint length} {bytes}",
- "arg": "{uint8 arg index N}",
- "txn": "{uint8 transaction field index}",
- "gtxn": "{uint8 transaction group index} {uint8 transaction field index}",
- "gtxns": "{uint8 transaction field index}",
- "txna": "{uint8 transaction field index} {uint8 transaction field array index}",
- "gtxna": "{uint8 transaction group index} {uint8 transaction field index} {uint8 transaction field array index}",
- "gtxnsa": "{uint8 transaction field index} {uint8 transaction field array index}",
- "global": "{uint8 global field index}",
- "bnz": "{int16 branch offset, big endian}",
- "bz": "{int16 branch offset, big endian}",
- "b": "{int16 branch offset, big endian}",
- "callsub": "{int16 branch offset, big endian}",
- "load": "{uint8 position in scratch space to load from}",
- "store": "{uint8 position in scratch space to store to}",
- "gload": "{uint8 transaction group index} {uint8 position in scratch space to load from}",
- "gloads": "{uint8 position in scratch space to load from}",
- "gaid": "{uint8 transaction group index}",
- "substring": "{uint8 start position} {uint8 end position}",
- "extract": "{uint8 start position} {uint8 length}",
- "dig": "{uint8 depth}",
- "cover": "{uint8 depth}",
- "uncover": "{uint8 depth}",
+ "intcblock": "{varuint length} [{varuint value}, ...]",
+ "intc": "{uint8 int constant index}",
+ "pushint": "{varuint int}",
+ "bytecblock": "{varuint length} [({varuint value length} bytes), ...]",
+ "bytec": "{uint8 byte constant index}",
+ "pushbytes": "{varuint length} {bytes}",
+
+ "arg": "{uint8 arg index N}",
+ "global": "{uint8 global field index}",
+
+ "txn": "{uint8 transaction field index}",
+ "gtxn": "{uint8 transaction group index} {uint8 transaction field index}",
+ "gtxns": "{uint8 transaction field index}",
+ "txna": "{uint8 transaction field index} {uint8 transaction field array index}",
+ "gtxna": "{uint8 transaction group index} {uint8 transaction field index} {uint8 transaction field array index}",
+ "gtxnsa": "{uint8 transaction field index} {uint8 transaction field array index}",
+ "txnas": "{uint8 transaction field index}",
+ "gtxnas": "{uint8 transaction group index} {uint8 transaction field index}",
+ "gtxnsas": "{uint8 transaction field index}",
+
+ "bnz": "{int16 branch offset, big endian}",
+ "bz": "{int16 branch offset, big endian}",
+ "b": "{int16 branch offset, big endian}",
+ "callsub": "{int16 branch offset, big endian}",
+
+ "load": "{uint8 position in scratch space to load from}",
+ "store": "{uint8 position in scratch space to store to}",
+ "gload": "{uint8 transaction group index} {uint8 position in scratch space to load from}",
+ "gloads": "{uint8 position in scratch space to load from}",
+ "gaid": "{uint8 transaction group index}",
+
+ "substring": "{uint8 start position} {uint8 end position}",
+ "extract": "{uint8 start position} {uint8 length}",
+ "dig": "{uint8 depth}",
+ "cover": "{uint8 depth}",
+ "uncover": "{uint8 depth}",
+
"asset_holding_get": "{uint8 asset holding field index}",
"asset_params_get": "{uint8 asset params field index}",
"app_params_get": "{uint8 app params field index}",
+
+ "itxn_field": "{uint8 transaction field index}",
+ "itxn": "{uint8 transaction field index}",
+ "itxna": "{uint8 transaction field index} {uint8 transaction field array index}",
+
+ "ecdsa_verify": "{uint8 curve index}",
+ "ecdsa_pk_decompress": "{uint8 curve index}",
+ "ecdsa_pk_recover": "{uint8 curve index}",
}
// OpImmediateNote returns a short string about immediate data which follows the op byte
@@ -200,45 +237,50 @@ func OpImmediateNote(opName string) string {
// further documentation on the function of the opcode
var opDocExtras = map[string]string{
- "ed25519verify": "The 32 byte public key is the last element on the stack, preceded by the 64 byte signature at the second-to-last element on the stack, preceded by the data which was signed at the third-to-last element on the stack.",
- "bnz": "The `bnz` instruction opcode 0x40 is followed by two immediate data bytes which are a high byte first and low byte second which together form a 16 bit offset which the instruction may branch to. For a bnz instruction at `pc`, if the last element of the stack is not zero then branch to instruction at `pc + 3 + N`, else proceed to next instruction at `pc + 3`. Branch targets must be aligned instructions. (e.g. Branching to the second byte of a 2 byte op will be rejected.) Starting at v4, the offset is treated as a signed 16 bit integer allowing for backward branches and looping. In prior version (v1 to v3), branch offsets are limited to forward branches only, 0-0x7fff.\n\nAt v2 it became allowed to branch to the end of the program exactly after the last instruction: bnz to byte N (with 0-indexing) was illegal for a TEAL program with N bytes before v2, and is legal after it. This change eliminates the need for a last instruction of no-op as a branch target at the end. (Branching beyond the end--in other words, to a byte larger than N--is still illegal and will cause the program to fail.)",
- "bz": "See `bnz` for details on how branches work. `bz` inverts the behavior of `bnz`.",
- "b": "See `bnz` for details on how branches work. `b` always jumps to the offset.",
- "callsub": "The call stack is separate from the data stack. Only `callsub` and `retsub` manipulate it.",
- "retsub": "The call stack is separate from the data stack. Only `callsub` and `retsub` manipulate it.",
- "intcblock": "`intcblock` loads following program bytes into an array of integer constants in the evaluator. These integer constants can be referred to by `intc` and `intc_*` which will push the value onto the stack. Subsequent calls to `intcblock` reset and replace the integer constants available to the script.",
- "bytecblock": "`bytecblock` loads the following program bytes into an array of byte-array constants in the evaluator. These constants can be referred to by `bytec` and `bytec_*` which will push the value onto the stack. Subsequent calls to `bytecblock` reset and replace the bytes constants available to the script.",
- "*": "Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `mulw`.",
- "+": "Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `addw`.",
- "/": "`divmodw` is available to divide the two-element values produced by `mulw` and `addw`.",
- "bitlen": "bitlen interprets arrays as big-endian integers, unlike setbit/getbit",
- "txn": "FirstValidTime causes the program to fail. The field is reserved for future use.",
- "gtxn": "for notes on transaction fields available, see `txn`. If this transaction is _i_ in the group, `gtxn i field` is equivalent to `txn field`.",
- "gtxns": "for notes on transaction fields available, see `txn`. If top of stack is _i_, `gtxns field` is equivalent to `gtxn _i_ field`. gtxns exists so that _i_ can be calculated, often based on the index of the current transaction.",
- "gload": "`gload` fails unless the requested transaction is an ApplicationCall and T < GroupIndex.",
- "gloads": "`gloads` fails unless the requested transaction is an ApplicationCall and X < GroupIndex.",
- "gaid": "`gaid` fails unless the requested transaction created an asset or application and T < GroupIndex.",
- "gaids": "`gaids` fails unless the requested transaction created an asset or application and X < GroupIndex.",
- "btoi": "`btoi` panics if the input is longer than 8 bytes.",
- "concat": "`concat` panics if the result would be greater than 4096 bytes.",
- "pushbytes": "pushbytes args are not added to the bytecblock during assembly processes",
- "pushint": "pushint args are not added to the intcblock during assembly processes",
- "getbit": "see explanation of bit ordering in setbit",
- "setbit": "When A is a uint64, index 0 is the least significant bit. Setting bit 3 to 1 on the integer 0 yields 8, or 2^3. When A is a byte array, index 0 is the leftmost bit of the leftmost byte. Setting bits 0 through 11 to 1 in a 4-byte-array of 0s yields the byte array 0xfff00000. Setting bit 3 to 1 on the 1-byte-array 0x00 yields the byte array 0x10.",
- "balance": "params: Before v4, Txn.Accounts offset. Since v4, Txn.Accounts offset or an account address that appears in Txn.Accounts or is Txn.Sender). Return: value.",
- "min_balance": "params: Before v4, Txn.Accounts offset. Since v4, Txn.Accounts offset or an account address that appears in Txn.Accounts or is Txn.Sender). Return: value.",
- "app_opted_in": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), application id (or, since v4, a Txn.ForeignApps offset). Return: 1 if opted in and 0 otherwise.",
- "app_local_get": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), state key. Return: value. The value is zero (of type uint64) if the key does not exist.",
- "app_local_get_ex": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), application id (or, since v4, a Txn.ForeignApps offset), state key. Return: did_exist flag (top of the stack, 1 if exist and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.",
- "app_global_get_ex": "params: Txn.ForeignApps offset (or, since v4, an application id that appears in Txn.ForeignApps or is the CurrentApplicationID), state key. Return: did_exist flag (top of the stack, 1 if exist and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.",
- "app_global_get": "params: state key. Return: value. The value is zero (of type uint64) if the key does not exist.",
- "app_local_put": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), state key, value.",
- "app_local_del": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), state key.\n\nDeleting a key which is already absent has no effect on the application local state. (In particular, it does _not_ cause the program to fail.)",
- "app_global_del": "params: state key.\n\nDeleting a key which is already absent has no effect on the application global state. (In particular, it does _not_ cause the program to fail.)",
- "asset_holding_get": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), asset id (or, since v4, a Txn.ForeignAssets offset). Return: did_exist flag (1 if exist and 0 otherwise), value.",
- "asset_params_get": "params: Before v4, Txn.ForeignAssets offset. Since v4, Txn.ForeignAssets offset or an asset id that appears in Txn.ForeignAssets. Return: did_exist flag (1 if exist and 0 otherwise), value.",
- "app_params_get": "params: Txn.ForeignApps offset or an app id that appears in Txn.ForeignApps. Return: did_exist flag (1 if exist and 0 otherwise), value.",
- "log": "`log` can be called up to MaxLogCalls times in a program, and log up to a total of 1k bytes.",
+ "ed25519verify": "The 32 byte public key is the last element on the stack, preceded by the 64 byte signature at the second-to-last element on the stack, preceded by the data which was signed at the third-to-last element on the stack.",
+ "ecdsa_verify": "The 32 byte Y-component of a public key is the last element on the stack, preceded by X-component of a pubkey, preceded by S and R components of a signature, preceded by the data that is fifth element on the stack. All values are big-endian encoded. The signed data must be 32 bytes long, and signatures in lower-S form are only accepted.",
+ "ecdsa_pk_decompress": "The 33 byte public key in a compressed form to be decompressed into X and Y (top) components. All values are big-endian encoded.",
+ "ecdsa_pk_recover": "S (top) and R elements of a signature, recovery id and data (bottom) are expected on the stack and used to deriver a public key. All values are big-endian encoded. The signed data must be 32 bytes long.",
+ "bnz": "The `bnz` instruction opcode 0x40 is followed by two immediate data bytes which are a high byte first and low byte second which together form a 16 bit offset which the instruction may branch to. For a bnz instruction at `pc`, if the last element of the stack is not zero then branch to instruction at `pc + 3 + N`, else proceed to next instruction at `pc + 3`. Branch targets must be aligned instructions. (e.g. Branching to the second byte of a 2 byte op will be rejected.) Starting at v4, the offset is treated as a signed 16 bit integer allowing for backward branches and looping. In prior version (v1 to v3), branch offsets are limited to forward branches only, 0-0x7fff.\n\nAt v2 it became allowed to branch to the end of the program exactly after the last instruction: bnz to byte N (with 0-indexing) was illegal for a TEAL program with N bytes before v2, and is legal after it. This change eliminates the need for a last instruction of no-op as a branch target at the end. (Branching beyond the end--in other words, to a byte larger than N--is still illegal and will cause the program to fail.)",
+ "bz": "See `bnz` for details on how branches work. `bz` inverts the behavior of `bnz`.",
+ "b": "See `bnz` for details on how branches work. `b` always jumps to the offset.",
+ "callsub": "The call stack is separate from the data stack. Only `callsub` and `retsub` manipulate it.",
+ "retsub": "The call stack is separate from the data stack. Only `callsub` and `retsub` manipulate it.",
+ "intcblock": "`intcblock` loads following program bytes into an array of integer constants in the evaluator. These integer constants can be referred to by `intc` and `intc_*` which will push the value onto the stack. Subsequent calls to `intcblock` reset and replace the integer constants available to the script.",
+ "bytecblock": "`bytecblock` loads the following program bytes into an array of byte-array constants in the evaluator. These constants can be referred to by `bytec` and `bytec_*` which will push the value onto the stack. Subsequent calls to `bytecblock` reset and replace the bytes constants available to the script.",
+ "*": "Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `mulw`.",
+ "+": "Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `addw`.",
+ "/": "`divmodw` is available to divide the two-element values produced by `mulw` and `addw`.",
+ "bitlen": "bitlen interprets arrays as big-endian integers, unlike setbit/getbit",
+ "txn": "FirstValidTime causes the program to fail. The field is reserved for future use.",
+ "gtxn": "for notes on transaction fields available, see `txn`. If this transaction is _i_ in the group, `gtxn i field` is equivalent to `txn field`.",
+ "gtxns": "for notes on transaction fields available, see `txn`. If top of stack is _i_, `gtxns field` is equivalent to `gtxn _i_ field`. gtxns exists so that _i_ can be calculated, often based on the index of the current transaction.",
+ "gload": "`gload` fails unless the requested transaction is an ApplicationCall and T < GroupIndex.",
+ "gloads": "`gloads` fails unless the requested transaction is an ApplicationCall and X < GroupIndex.",
+ "gaid": "`gaid` fails unless the requested transaction created an asset or application and T < GroupIndex.",
+ "gaids": "`gaids` fails unless the requested transaction created an asset or application and X < GroupIndex.",
+ "btoi": "`btoi` fails if the input is longer than 8 bytes.",
+ "concat": "`concat` fails if the result would be greater than 4096 bytes.",
+ "pushbytes": "pushbytes args are not added to the bytecblock during assembly processes",
+ "pushint": "pushint args are not added to the intcblock during assembly processes",
+ "getbit": "see explanation of bit ordering in setbit",
+ "setbit": "When A is a uint64, index 0 is the least significant bit. Setting bit 3 to 1 on the integer 0 yields 8, or 2^3. When A is a byte array, index 0 is the leftmost bit of the leftmost byte. Setting bits 0 through 11 to 1 in a 4-byte-array of 0s yields the byte array 0xfff00000. Setting bit 3 to 1 on the 1-byte-array 0x00 yields the byte array 0x10.",
+ "balance": "params: Before v4, Txn.Accounts offset. Since v4, Txn.Accounts offset or an account address that appears in Txn.Accounts or is Txn.Sender). Return: value.",
+ "min_balance": "params: Before v4, Txn.Accounts offset. Since v4, Txn.Accounts offset or an account address that appears in Txn.Accounts or is Txn.Sender). Return: value.",
+ "app_opted_in": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), application id (or, since v4, a Txn.ForeignApps offset). Return: 1 if opted in and 0 otherwise.",
+ "app_local_get": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), state key. Return: value. The value is zero (of type uint64) if the key does not exist.",
+ "app_local_get_ex": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), application id (or, since v4, a Txn.ForeignApps offset), state key. Return: did_exist flag (top of the stack, 1 if the application existed and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.",
+ "app_global_get_ex": "params: Txn.ForeignApps offset (or, since v4, an application id that appears in Txn.ForeignApps or is the CurrentApplicationID), state key. Return: did_exist flag (top of the stack, 1 if the application existed and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist.",
+ "app_global_get": "params: state key. Return: value. The value is zero (of type uint64) if the key does not exist.",
+ "app_local_put": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), state key, value.",
+ "app_local_del": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), state key.\n\nDeleting a key which is already absent has no effect on the application local state. (In particular, it does _not_ cause the program to fail.)",
+ "app_global_del": "params: state key.\n\nDeleting a key which is already absent has no effect on the application global state. (In particular, it does _not_ cause the program to fail.)",
+ "asset_holding_get": "params: Txn.Accounts offset (or, since v4, an account address that appears in Txn.Accounts or is Txn.Sender), asset id (or, since v4, a Txn.ForeignAssets offset). Return: did_exist flag (1 if the asset existed and 0 otherwise), value.",
+ "asset_params_get": "params: Before v4, Txn.ForeignAssets offset. Since v4, Txn.ForeignAssets offset or an asset id that appears in Txn.ForeignAssets. Return: did_exist flag (1 if the asset existed and 0 otherwise), value.",
+ "app_params_get": "params: Txn.ForeignApps offset or an app id that appears in Txn.ForeignApps. Return: did_exist flag (1 if the application existed and 0 otherwise), value.",
+ "log": "`log` fails if called more than MaxLogCalls times in a program, or if the sum of logged bytes exceeds 1024 bytes.",
+ "itxn_begin": "`itxn_begin` initializes Sender to the application address; Fee to the minimum allowable, taking into account MinTxnFee and credit from overpaying in earlier transactions; FirstValid/LastValid to the values in the top-level transaction, and all other fields to zero values.",
+ "itxn_field": "`itxn_field` fails if X is of the wrong type for F, including a byte array of the wrong size for use as an address when F is an address field. `itxn_field` also fails if X is an account or asset that does not appear in `txn.Accounts` or `txn.ForeignAssets` of the top-level transaction. (Setting addresses in asset creation are exempted from this requirement.)",
}
// OpDocExtra returns extra documentation text about an op
@@ -246,15 +288,18 @@ func OpDocExtra(opName string) string {
return opDocExtras[opName]
}
-// OpGroups is groupings of ops for documentation purposes.
+// OpGroups is groupings of ops for documentation purposes. The order
+// here is the order args opcodes are presented, so place related
+// opcodes consecutively, even if their opcode values are not.
var OpGroups = map[string][]string{
- "Arithmetic": {"sha256", "keccak256", "sha512_256", "ed25519verify", "+", "-", "/", "*", "<", ">", "<=", ">=", "&&", "||", "shl", "shr", "sqrt", "bitlen", "exp", "==", "!=", "!", "len", "itob", "btoi", "%", "|", "&", "^", "~", "mulw", "addw", "divmodw", "expw", "getbit", "setbit", "getbyte", "setbyte", "concat"},
- "Byte Array Slicing": {"substring", "substring3", "extract", "extract3", "extract16bits", "extract32bits", "extract64bits"},
- "Byteslice Arithmetic": {"b+", "b-", "b/", "b*", "b<", "b>", "b<=", "b>=", "b==", "b!=", "b%"},
- "Byteslice Logic": {"b|", "b&", "b^", "b~"},
- "Loading Values": {"intcblock", "intc", "intc_0", "intc_1", "intc_2", "intc_3", "pushint", "bytecblock", "bytec", "bytec_0", "bytec_1", "bytec_2", "bytec_3", "pushbytes", "bzero", "arg", "arg_0", "arg_1", "arg_2", "arg_3", "txn", "gtxn", "txna", "gtxna", "gtxns", "gtxnsa", "global", "load", "store", "gload", "gloads", "gaid", "gaids"},
- "Flow Control": {"err", "bnz", "bz", "b", "return", "pop", "dup", "dup2", "dig", "cover", "uncover", "swap", "select", "assert", "callsub", "retsub"},
- "State Access": {"balance", "min_balance", "app_opted_in", "app_local_get", "app_local_get_ex", "app_global_get", "app_global_get_ex", "app_local_put", "app_global_put", "app_local_del", "app_global_del", "asset_holding_get", "asset_params_get", "app_params_get", "log"},
+ "Arithmetic": {"sha256", "keccak256", "sha512_256", "ed25519verify", "ecdsa_verify", "ecdsa_pk_recover", "ecdsa_pk_decompress", "+", "-", "/", "*", "<", ">", "<=", ">=", "&&", "||", "shl", "shr", "sqrt", "bitlen", "exp", "==", "!=", "!", "len", "itob", "btoi", "%", "|", "&", "^", "~", "mulw", "addw", "divmodw", "expw", "getbit", "setbit", "getbyte", "setbyte", "concat"},
+ "Byte Array Slicing": {"substring", "substring3", "extract", "extract3", "extract_uint16", "extract_uint32", "extract_uint64"},
+ "Byte Array Arithmetic": {"b+", "b-", "b/", "b*", "b<", "b>", "b<=", "b>=", "b==", "b!=", "b%"},
+ "Byte Array Logic": {"b|", "b&", "b^", "b~"},
+ "Loading Values": {"intcblock", "intc", "intc_0", "intc_1", "intc_2", "intc_3", "pushint", "bytecblock", "bytec", "bytec_0", "bytec_1", "bytec_2", "bytec_3", "pushbytes", "bzero", "arg", "arg_0", "arg_1", "arg_2", "arg_3", "args", "txn", "gtxn", "txna", "txnas", "gtxna", "gtxnas", "gtxns", "gtxnsa", "gtxnsas", "global", "load", "loads", "store", "stores", "gload", "gloads", "gaid", "gaids"},
+ "Flow Control": {"err", "bnz", "bz", "b", "return", "pop", "dup", "dup2", "dig", "cover", "uncover", "swap", "select", "assert", "callsub", "retsub"},
+ "State Access": {"balance", "min_balance", "app_opted_in", "app_local_get", "app_local_get_ex", "app_global_get", "app_global_get_ex", "app_local_put", "app_global_put", "app_local_del", "app_global_del", "asset_holding_get", "asset_params_get", "app_params_get", "log"},
+ "Inner Transactions": {"itxn_begin", "itxn_field", "itxn_submit", "itxn", "itxna"},
}
// OpCost indicates the cost of an operation over the range of
@@ -322,47 +367,55 @@ func OnCompletionDescription(value uint64) string {
const OnCompletionPreamble = "An application transaction must indicate the action to be taken following the execution of its approvalProgram or clearStateProgram. The constants below describe the available actions."
var txnFieldDocs = map[string]string{
- "Sender": "32 byte address",
- "Fee": "micro-Algos",
- "FirstValid": "round number",
- "FirstValidTime": "Causes program to fail; reserved for future use",
- "LastValid": "round number",
- "Note": "Any data up to 1024 bytes",
- "Lease": "32 byte lease value",
- "Receiver": "32 byte address",
- "Amount": "micro-Algos",
- "CloseRemainderTo": "32 byte address",
- "VotePK": "32 byte address",
- "SelectionPK": "32 byte address",
- "VoteFirst": "The first round that the participation key is valid.",
- "VoteLast": "The last round that the participation key is valid.",
- "VoteKeyDilution": "Dilution for the 2-level participation key",
- "Type": "Transaction type as bytes",
- "TypeEnum": "See table below",
- "XferAsset": "Asset ID",
- "AssetAmount": "value in Asset's units",
- "AssetSender": "32 byte address. Causes clawback of all value of asset from AssetSender if Sender is the Clawback address of the asset.",
- "AssetReceiver": "32 byte address",
- "AssetCloseTo": "32 byte address",
- "GroupIndex": "Position of this transaction within an atomic transaction group. A stand-alone transaction is implicitly element 0 in a group of 1",
- "TxID": "The computed ID for this transaction. 32 bytes.",
- "ApplicationID": "ApplicationID from ApplicationCall transaction",
- "OnCompletion": "ApplicationCall transaction on completion action",
- "ApplicationArgs": "Arguments passed to the application in the ApplicationCall transaction",
- "NumAppArgs": "Number of ApplicationArgs",
- "Accounts": "Accounts listed in the ApplicationCall transaction",
- "NumAccounts": "Number of Accounts",
- "Assets": "Foreign Assets listed in the ApplicationCall transaction",
- "NumAssets": "Number of Assets",
- "Applications": "Foreign Apps listed in the ApplicationCall transaction",
- "NumApplications": "Number of Applications",
- "GlobalNumUint": "Number of global state integers in ApplicationCall",
- "GlobalNumByteSlice": "Number of global state byteslices in ApplicationCall",
- "LocalNumUint": "Number of local state integers in ApplicationCall",
- "LocalNumByteSlice": "Number of local state byteslices in ApplicationCall",
- "ApprovalProgram": "Approval program",
- "ClearStateProgram": "Clear state program",
- "RekeyTo": "32 byte Sender's new AuthAddr",
+ "Type": "Transaction type as bytes",
+ "TypeEnum": "See table below",
+ "Sender": "32 byte address",
+ "Fee": "micro-Algos",
+ "FirstValid": "round number",
+ "FirstValidTime": "Causes program to fail; reserved for future use",
+ "LastValid": "round number",
+ "Note": "Any data up to 1024 bytes",
+ "Lease": "32 byte lease value",
+ "RekeyTo": "32 byte Sender's new AuthAddr",
+
+ "GroupIndex": "Position of this transaction within an atomic transaction group. A stand-alone transaction is implicitly element 0 in a group of 1",
+ "TxID": "The computed ID for this transaction. 32 bytes.",
+
+ "Receiver": "32 byte address",
+ "Amount": "micro-Algos",
+ "CloseRemainderTo": "32 byte address",
+
+ "VotePK": "32 byte address",
+ "SelectionPK": "32 byte address",
+ "VoteFirst": "The first round that the participation key is valid.",
+ "VoteLast": "The last round that the participation key is valid.",
+ "VoteKeyDilution": "Dilution for the 2-level participation key",
+ "Nonparticipation": "Marks an account nonparticipating for rewards",
+
+ "XferAsset": "Asset ID",
+ "AssetAmount": "value in Asset's units",
+ "AssetSender": "32 byte address. Causes clawback of all value of asset from AssetSender if Sender is the Clawback address of the asset.",
+ "AssetReceiver": "32 byte address",
+ "AssetCloseTo": "32 byte address",
+
+ "ApplicationID": "ApplicationID from ApplicationCall transaction",
+ "OnCompletion": "ApplicationCall transaction on completion action",
+ "ApplicationArgs": "Arguments passed to the application in the ApplicationCall transaction",
+ "NumAppArgs": "Number of ApplicationArgs",
+ "Accounts": "Accounts listed in the ApplicationCall transaction",
+ "NumAccounts": "Number of Accounts",
+ "Assets": "Foreign Assets listed in the ApplicationCall transaction",
+ "NumAssets": "Number of Assets",
+ "Applications": "Foreign Apps listed in the ApplicationCall transaction",
+ "NumApplications": "Number of Applications",
+ "GlobalNumUint": "Number of global state integers in ApplicationCall",
+ "GlobalNumByteSlice": "Number of global state byteslices in ApplicationCall",
+ "LocalNumUint": "Number of local state integers in ApplicationCall",
+ "LocalNumByteSlice": "Number of local state byteslices in ApplicationCall",
+ "ApprovalProgram": "Approval program",
+ "ClearStateProgram": "Clear state program",
+ "ExtraProgramPages": "Number of additional pages for each of the application's approval and clear state programs. An ExtraProgramPages of 1 means 2048 more total bytes, or 1024 for each program.",
+
"ConfigAsset": "Asset ID in asset config transaction",
"ConfigAssetTotal": "Total number of units of this asset created",
"ConfigAssetDecimals": "Number of digits to display after the decimal place when displaying the asset",
@@ -375,10 +428,15 @@ var txnFieldDocs = map[string]string{
"ConfigAssetReserve": "32 byte address",
"ConfigAssetFreeze": "32 byte address",
"ConfigAssetClawback": "32 byte address",
- "FreezeAsset": "Asset ID being frozen or un-frozen",
- "FreezeAssetAccount": "32 byte address of the account whose asset slot is being frozen or un-frozen",
- "FreezeAssetFrozen": "The new frozen value, 0 or 1",
- "ExtraProgramPages": "Number of additional pages for each of the application's approval and clear state programs. An ExtraProgramPages of 1 means 2048 more total bytes, or 1024 for each program.",
+
+ "FreezeAsset": "Asset ID being frozen or un-frozen",
+ "FreezeAssetAccount": "32 byte address of the account whose asset slot is being frozen or un-frozen",
+ "FreezeAssetFrozen": "The new frozen value, 0 or 1",
+
+ "Logs": "Log messages emitted by an application call (itxn only)",
+ "NumLogs": "Number of Logs (itxn only)",
+ "CreatedAssetID": "Asset ID allocated by the creation of an ASA (itxn only)",
+ "CreatedApplicationID": "ApplicationID allocated by the creation of an application (itxn only)",
}
// TxnFieldDocs are notes on fields available by `txn` and `gtxn` with extra versioning info if any
@@ -387,16 +445,18 @@ func TxnFieldDocs() map[string]string {
}
var globalFieldDocs = map[string]string{
- "MinTxnFee": "micro Algos",
- "MinBalance": "micro Algos",
- "MaxTxnLife": "rounds",
- "ZeroAddress": "32 byte address of all zero bytes",
- "GroupSize": "Number of transactions in this atomic transaction group. At least 1",
- "LogicSigVersion": "Maximum supported TEAL version",
- "Round": "Current round number",
- "LatestTimestamp": "Last confirmed block UNIX timestamp. Fails if negative",
- "CurrentApplicationID": "ID of current application executing. Fails if no such application is executing",
- "CreatorAddress": "Address of the creator of the current application. Fails if no such application is executing",
+ "MinTxnFee": "micro Algos",
+ "MinBalance": "micro Algos",
+ "MaxTxnLife": "rounds",
+ "ZeroAddress": "32 byte address of all zero bytes",
+ "GroupSize": "Number of transactions in this atomic transaction group. At least 1",
+ "LogicSigVersion": "Maximum supported TEAL version",
+ "Round": "Current round number",
+ "LatestTimestamp": "Last confirmed block UNIX timestamp. Fails if negative",
+ "CurrentApplicationID": "ID of current application executing. Fails in LogicSigs",
+ "CreatorAddress": "Address of the creator of the current application. Fails if no such application is executing",
+ "CurrentApplicationAddress": "Address that the current application controls. Fails in LogicSigs",
+ "GroupID": "ID of the transaction group. 32 zero bytes if the transaction is not part of a group.",
}
// GlobalFieldDocs are notes on fields available in `global` with extra versioning info if any
@@ -433,8 +493,8 @@ var AssetHoldingFieldDocs = map[string]string{
"AssetFrozen": "Is the asset frozen or not",
}
-// AssetParamsFieldDocs are notes on fields available in `asset_params_get`
-var AssetParamsFieldDocs = map[string]string{
+// assetParamsFieldDocs are notes on fields available in `asset_params_get`
+var assetParamsFieldDocs = map[string]string{
"AssetTotal": "Total number of units of this asset",
"AssetDecimals": "See AssetParams.Decimals",
"AssetDefaultFrozen": "Frozen by default or not",
@@ -449,8 +509,13 @@ var AssetParamsFieldDocs = map[string]string{
"AssetCreator": "Creator address",
}
-// AppParamsFieldDocs are notes on fields available in `app_params_get`
-var AppParamsFieldDocs = map[string]string{
+// AssetParamsFieldDocs are notes on fields available in `asset_params_get` with extra versioning info if any
+func AssetParamsFieldDocs() map[string]string {
+ return fieldsDocWithExtra(assetParamsFieldDocs, assetParamsFieldSpecByName)
+}
+
+// appParamsFieldDocs are notes on fields available in `app_params_get`
+var appParamsFieldDocs = map[string]string{
"AppApprovalProgram": "Bytecode of Approval Program",
"AppClearStateProgram": "Bytecode of Clear State Program",
"AppGlobalNumUint": "Number of uint64 values allowed in Global State",
@@ -459,4 +524,15 @@ var AppParamsFieldDocs = map[string]string{
"AppLocalNumByteSlice": "Number of byte array values allowed in Local State",
"AppExtraProgramPages": "Number of Extra Program Pages of code space",
"AppCreator": "Creator address",
+ "AppAddress": "Address for which this application has authority",
+}
+
+// AppParamsFieldDocs are notes on fields available in `app_params_get` with extra versioning info if any
+func AppParamsFieldDocs() map[string]string {
+ return fieldsDocWithExtra(appParamsFieldDocs, appParamsFieldSpecByName)
+}
+
+// EcdsaCurveDocs are notes on curves available in `ecdsa_` opcodes
+var EcdsaCurveDocs = map[string]string{
+ "Secp256k1": "secp256k1 curve",
}
diff --git a/data/transactions/logic/doc_test.go b/data/transactions/logic/doc_test.go
index ad87f4a01..f41501624 100644
--- a/data/transactions/logic/doc_test.go
+++ b/data/transactions/logic/doc_test.go
@@ -48,9 +48,25 @@ func TestOpDocs(t *testing.T) {
require.Len(t, onCompletionDescriptions, len(OnCompletionNames))
require.Len(t, globalFieldDocs, len(GlobalFieldNames))
require.Len(t, AssetHoldingFieldDocs, len(AssetHoldingFieldNames))
- require.Len(t, AssetParamsFieldDocs, len(AssetParamsFieldNames))
- require.Len(t, AppParamsFieldDocs, len(AppParamsFieldNames))
+ require.Len(t, assetParamsFieldDocs, len(AssetParamsFieldNames))
+ require.Len(t, appParamsFieldDocs, len(AppParamsFieldNames))
require.Len(t, TypeNameDescriptions, len(TxnTypeNames))
+ require.Len(t, EcdsaCurveDocs, len(EcdsaCurveNames))
+}
+
+// TestDocStragglers confirms that we don't have any docs laying
+// around for non-existent opcodes, most likely from a rename.
+func TestDocStragglers(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ for op := range opDocExtras {
+ _, ok := opDocByName[op]
+ require.True(t, ok, "%s is in opDocExtra, but not opDocByName", op)
+ }
+ for op := range opcodeImmediateNotes {
+ _, ok := opDocByName[op]
+ require.True(t, ok, "%s is in opcodeImmediateNotes, but not opDocByName", op)
+ }
}
func TestOpGroupCoverage(t *testing.T) {
@@ -72,7 +88,7 @@ func TestOpGroupCoverage(t *testing.T) {
}
for name, seen := range opsSeen {
if !seen {
- t.Errorf("warning: op %#v not in any group of OpGroupList\n", name)
+ t.Errorf("warning: op %#v not in any group of OpGroups\n", name)
}
}
}
@@ -96,6 +112,8 @@ func TestOpImmediateNote(t *testing.T) {
}
func TestAllImmediatesDocumented(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
for _, op := range OpSpecs {
count := len(op.Details.Immediates)
note := OpImmediateNote(op.Name)
diff --git a/data/transactions/logic/eval.go b/data/transactions/logic/eval.go
index ac06dc701..aa2744ddc 100644
--- a/data/transactions/logic/eval.go
+++ b/data/transactions/logic/eval.go
@@ -35,6 +35,7 @@ import (
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/crypto"
+ "github.com/algorand/go-algorand/crypto/secp256k1"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/logging"
@@ -44,8 +45,8 @@ import (
// EvalMaxVersion is the max version we can interpret and run
const EvalMaxVersion = LogicVersion
-// EvalMaxScratchSize is the maximum number of scratch slots.
-const EvalMaxScratchSize = 255
+// The constants below control TEAL opcodes evaluation and MAY NOT be changed
+// without moving them into consensus parameters.
// MaxStringSize is the limit of byte strings created by `concat`
const MaxStringSize = 4096
@@ -57,7 +58,7 @@ const MaxByteMathSize = 64
const MaxLogSize = 1024
// MaxLogCalls is the limit of total log calls during a program execution
-const MaxLogCalls = config.MaxLogCalls
+const MaxLogCalls = 32
// stackValue is the type for the operand stack.
// Each stackValue is either a valid []byte value or a uint64 value.
@@ -99,6 +100,46 @@ func (sv *stackValue) String() string {
return fmt.Sprintf("%d 0x%x", sv.Uint, sv.Uint)
}
+func (sv *stackValue) address() (addr basics.Address, err error) {
+ if len(sv.Bytes) != len(addr) {
+ return basics.Address{}, errors.New("not an address")
+ }
+ copy(addr[:], sv.Bytes)
+ return
+}
+
+func (sv *stackValue) uint() (uint64, error) {
+ if sv.Bytes != nil {
+ return 0, errors.New("not a uint64")
+ }
+ return sv.Uint, nil
+}
+
+func (sv *stackValue) bool() (bool, error) {
+ u64, err := sv.uint()
+ if err != nil {
+ return false, err
+ }
+ switch u64 {
+ case 0:
+ return false, nil
+ case 1:
+ return true, nil
+ default:
+ return false, fmt.Errorf("boolean is neither 1 nor 0: %d", u64)
+ }
+}
+
+func (sv *stackValue) string(limit int) (string, error) {
+ if sv.Bytes == nil {
+ return "", errors.New("not a byte array")
+ }
+ if len(sv.Bytes) > limit {
+ return "", errors.New("value is too long")
+ }
+ return string(sv.Bytes), nil
+}
+
func stackValueFromTealValue(tv *basics.TealValue) (sv stackValue, err error) {
switch tv.Type {
case basics.TealBytesType:
@@ -145,6 +186,7 @@ func (sv *stackValue) toTealValue() (tv basics.TealValue) {
type LedgerForLogic interface {
Balance(addr basics.Address) (basics.MicroAlgos, error)
MinBalance(addr basics.Address, proto *config.ConsensusParams) (basics.MicroAlgos, error)
+ Authorizer(addr basics.Address) (basics.Address, error)
Round() basics.Round
LatestTimestamp() int64
@@ -152,7 +194,6 @@ type LedgerForLogic interface {
AssetParams(aidx basics.AssetIndex) (basics.AssetParams, basics.Address, error)
AppParams(aidx basics.AppIndex) (basics.AppParams, basics.Address, error)
ApplicationID() basics.AppIndex
- CreatorAddress() basics.Address
OptedIn(addr basics.Address, appIdx basics.AppIndex) (bool, error)
GetCreatableID(groupIdx int) basics.CreatableIndex
@@ -164,9 +205,9 @@ type LedgerForLogic interface {
SetGlobal(key string, value basics.TealValue) error
DelGlobal(key string) error
- GetDelta(txn *transactions.Transaction) (evalDelta basics.EvalDelta, err error)
+ GetDelta(txn *transactions.Transaction) (evalDelta transactions.EvalDelta, err error)
- AppendLog(txn *transactions.Transaction, value string) error
+ Perform(txn *transactions.Transaction, spec transactions.SpecialAddresses) (transactions.ApplyData, error)
}
// EvalSideEffects contains data returned from evaluation
@@ -206,7 +247,7 @@ type EvalParams struct {
TxnGroup []transactions.SignedTxn
// GroupIndex should point to Txn within TxnGroup
- GroupIndex int
+ GroupIndex uint64
PastSideEffects []EvalSideEffects
@@ -222,6 +263,14 @@ type EvalParams struct {
// MinTealVersion is nil, we will compute it ourselves
MinTealVersion *uint64
+ // Amount "overpaid" by the top-level transactions of the
+ // group. Often 0. When positive, it is spent by application
+ // actions. Shared value across a group's txns, so that it
+ // can be updated. nil is interpretted as 0.
+ FeeCredit *uint64
+
+ Specials *transactions.SpecialAddresses
+
// determines eval mode: runModeSignature or runModeApplication
runModeFlags runMode
@@ -229,8 +278,8 @@ type EvalParams struct {
PooledApplicationBudget *uint64
}
-type opEvalFunc func(cx *evalContext)
-type opCheckFunc func(cx *evalContext) error
+type opEvalFunc func(cx *EvalContext)
+type opCheckFunc func(cx *EvalContext) error
type runMode uint64
@@ -281,23 +330,32 @@ func (ep EvalParams) log() logging.Logger {
type scratchSpace = [256]stackValue
-type evalContext struct {
+// EvalContext is the execution context of AVM bytecode. It contains
+// the full state of the running program, and tracks some of the
+// things that the program has been done, like log message and inner
+// transactions.
+type EvalContext struct {
EvalParams
stack []stackValue
callstack []int
- program []byte // txn.Lsig.Logic ?
- pc int
- nextpc int
- err error
- intc []uint64
- bytec [][]byte
- version uint64
- scratch scratchSpace
-
- cost int // cost incurred so far
- logCalls int // number of log calls so far
- logSize int // log size of the program so far
+
+ program []byte
+ pc int
+ nextpc int
+ err error
+ intc []uint64
+ bytec [][]byte
+ version uint64
+ scratch scratchSpace
+
+ subtxn *transactions.SignedTxn // place to build for itxn_submit
+ // The transactions Performed() and their effects
+ InnerTxns []transactions.SignedTxnWithAD
+
+ cost int // cost incurred so far
+ Logs []string
+ logSize int // total log size so far
// Set of PC values that branches we've seen so far might
// go. So, if checkStep() skips one, that branch is trying to
@@ -310,7 +368,8 @@ type evalContext struct {
instructionStarts map[int]bool
programHashCached crypto.Digest
- txidCache map[int]transactions.Txid
+ txidCache map[uint64]transactions.Txid
+ appAddrCache map[basics.AppIndex]basics.Address
// Stores state & disassembly for the optional debugger
debugState DebugState
@@ -365,26 +424,38 @@ func (pe PanicError) Error() string {
var errLogicSigNotSupported = errors.New("LogicSig not supported")
var errTooManyArgs = errors.New("LogicSig has too many arguments")
-// EvalStateful executes stateful TEAL program
-func EvalStateful(program []byte, params EvalParams) (pass bool, err error) {
- var cx evalContext
+// EvalStatefulCx executes stateful TEAL program
+func EvalStatefulCx(program []byte, params EvalParams) (bool, *EvalContext, error) {
+ var cx EvalContext
cx.EvalParams = params
cx.runModeFlags = runModeApplication
- pass, err = eval(program, &cx)
- if cx.EvalParams.Proto.EnableAppCostPooling && cx.EvalParams.PooledApplicationBudget != nil {
+ pass, err := eval(program, &cx)
+
+ // The following two updates show a need for something like a
+ // GroupEvalContext, as we are currently tucking things into the
+ // EvalParams so that they are available to later calls.
+
+ // update pooled budget
+ if cx.Proto.EnableAppCostPooling && cx.PooledApplicationBudget != nil {
// if eval passes, then budget is always greater than cost, so should not have underflow
- *cx.EvalParams.PooledApplicationBudget = basics.SubSaturate(*cx.EvalParams.PooledApplicationBudget, uint64(cx.cost))
+ *cx.PooledApplicationBudget = basics.SubSaturate(*cx.PooledApplicationBudget, uint64(cx.cost))
}
-
- // set side effects
+ // update side effects
cx.PastSideEffects[cx.GroupIndex].setScratchSpace(cx.scratch)
- return
+
+ return pass, &cx, err
+}
+
+// EvalStateful is a lighter weight interface that doesn't return the EvalContext
+func EvalStateful(program []byte, params EvalParams) (bool, error) {
+ pass, _, err := EvalStatefulCx(program, params)
+ return pass, err
}
// Eval checks to see if a transaction passes logic
// A program passes successfully if it finishes with one int element on the stack that is non-zero.
func Eval(program []byte, params EvalParams) (pass bool, err error) {
- var cx evalContext
+ var cx EvalContext
cx.EvalParams = params
cx.runModeFlags = runModeSignature
return eval(program, &cx)
@@ -392,7 +463,7 @@ func Eval(program []byte, params EvalParams) (pass bool, err error) {
// eval implementation
// A program passes successfully if it finishes with one int element on the stack that is non-zero.
-func eval(program []byte, cx *evalContext) (pass bool, err error) {
+func eval(program []byte, cx *EvalContext) (pass bool, err error) {
defer func() {
if x := recover(); x != nil {
buf := make([]byte, 16*1024)
@@ -558,7 +629,7 @@ func check(program []byte, params EvalParams) (err error) {
return fmt.Errorf("program version must be >= %d for this transaction group, but have version %d", minVersion, version)
}
- var cx evalContext
+ var cx EvalContext
cx.version = version
cx.pc = vlen
cx.EvalParams = params
@@ -616,7 +687,7 @@ func boolToUint(x bool) uint64 {
// MaxStackDepth should move to consensus params
const MaxStackDepth = 1000
-func (cx *evalContext) step() {
+func (cx *EvalContext) step() {
opcode := cx.program[cx.pc]
spec := &opsByOpcode[cx.version][opcode]
@@ -691,7 +762,7 @@ func (cx *evalContext) step() {
// perhaps we could have an interface that allows
// disassembly to use the cx directly. But for now,
// we don't want to worry about the dissassembly
- // routines mucking about in the excution context
+ // routines mucking about in the execution context
// (changing the pc, for example) and this gives a big
// improvement of dryrun readability
dstate := &disassembleState{program: cx.program, pc: cx.pc, numericTargets: true, intc: cx.intc, bytec: cx.bytec}
@@ -741,7 +812,7 @@ func (cx *evalContext) step() {
}
}
-func (cx *evalContext) checkStep() (int, error) {
+func (cx *EvalContext) checkStep() (int, error) {
cx.instructionStarts[cx.pc] = true
opcode := cx.program[cx.pc]
spec := &opsByOpcode[cx.version][opcode]
@@ -783,11 +854,11 @@ func (cx *evalContext) checkStep() (int, error) {
return deets.Cost, nil
}
-func opErr(cx *evalContext) {
+func opErr(cx *EvalContext) {
cx.err = errors.New("TEAL runtime encountered err opcode")
}
-func opReturn(cx *evalContext) {
+func opReturn(cx *EvalContext) {
// Achieve the end condition:
// Take the last element on the stack and make it the return value (only element on the stack)
// Move the pc to the end of the program
@@ -797,7 +868,7 @@ func opReturn(cx *evalContext) {
cx.nextpc = len(cx.program)
}
-func opAssert(cx *evalContext) {
+func opAssert(cx *EvalContext) {
last := len(cx.stack) - 1
if cx.stack[last].Uint != 0 {
cx.stack = cx.stack[:last]
@@ -806,13 +877,13 @@ func opAssert(cx *evalContext) {
cx.err = fmt.Errorf("assert failed pc=%d", cx.pc)
}
-func opSwap(cx *evalContext) {
+func opSwap(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cx.stack[last], cx.stack[prev] = cx.stack[prev], cx.stack[last]
}
-func opSelect(cx *evalContext) {
+func opSelect(cx *EvalContext) {
last := len(cx.stack) - 1 // condition on top
prev := last - 1 // true is one down
pprev := prev - 1 // false below that
@@ -823,14 +894,14 @@ func opSelect(cx *evalContext) {
cx.stack = cx.stack[:prev]
}
-func opSHA256(cx *evalContext) {
+func opSHA256(cx *EvalContext) {
last := len(cx.stack) - 1
hash := sha256.Sum256(cx.stack[last].Bytes)
cx.stack[last].Bytes = hash[:]
}
// The Keccak256 variant of SHA-3 is implemented for compatibility with Ethereum
-func opKeccak256(cx *evalContext) {
+func opKeccak256(cx *EvalContext) {
last := len(cx.stack) - 1
hasher := sha3.NewLegacyKeccak256()
hasher.Write(cx.stack[last].Bytes)
@@ -845,35 +916,28 @@ func opKeccak256(cx *evalContext) {
// stability and portability in case the rest of Algorand ever moves
// to a different default hash. For stability of this language, at
// that time a new opcode should be made with the new hash.
-func opSHA512_256(cx *evalContext) {
+func opSHA512_256(cx *EvalContext) {
last := len(cx.stack) - 1
hash := sha512.Sum512_256(cx.stack[last].Bytes)
cx.stack[last].Bytes = hash[:]
}
-func opPlus(cx *evalContext) {
+func opPlus(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
- cx.stack[prev].Uint += cx.stack[last].Uint
- if cx.stack[prev].Uint < cx.stack[last].Uint {
+ sum, carry := bits.Add64(cx.stack[prev].Uint, cx.stack[last].Uint, 0)
+ if carry > 0 {
cx.err = errors.New("+ overflowed")
return
}
+ cx.stack[prev].Uint = sum
cx.stack = cx.stack[:last]
}
-func opAddwImpl(x, y uint64) (carry uint64, sum uint64) {
- sum = x + y
- if sum < x {
- carry = 1
- }
- return
-}
-
-func opAddw(cx *evalContext) {
+func opAddw(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
- carry, sum := opAddwImpl(cx.stack[prev].Uint, cx.stack[last].Uint)
+ sum, carry := bits.Add64(cx.stack[prev].Uint, cx.stack[last].Uint, 0)
cx.stack[prev].Uint = carry
cx.stack[last].Uint = sum
}
@@ -896,7 +960,7 @@ func opDivModwImpl(hiNum, loNum, hiDen, loDen uint64) (hiQuo uint64, loQuo uint6
rem.Uint64()
}
-func opDivModw(cx *evalContext) {
+func opDivModw(cx *EvalContext) {
loDen := len(cx.stack) - 1
hiDen := loDen - 1
if cx.stack[loDen].Uint == 0 && cx.stack[hiDen].Uint == 0 {
@@ -913,7 +977,7 @@ func opDivModw(cx *evalContext) {
cx.stack[loDen].Uint = loRem
}
-func opMinus(cx *evalContext) {
+func opMinus(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
if cx.stack[last].Uint > cx.stack[prev].Uint {
@@ -924,7 +988,7 @@ func opMinus(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opDiv(cx *evalContext) {
+func opDiv(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
if cx.stack[last].Uint == 0 {
@@ -935,7 +999,7 @@ func opDiv(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opModulo(cx *evalContext) {
+func opModulo(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
if cx.stack[last].Uint == 0 {
@@ -946,53 +1010,27 @@ func opModulo(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opMul(cx *evalContext) {
+func opMul(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
- a := cx.stack[prev].Uint
- b := cx.stack[last].Uint
- v := a * b
- if (a != 0) && (b != 0) && (v/a != b) {
+ high, low := bits.Mul64(cx.stack[prev].Uint, cx.stack[last].Uint)
+ if high > 0 {
cx.err = errors.New("* overflowed")
return
}
- cx.stack[prev].Uint = v
+ cx.stack[prev].Uint = low
cx.stack = cx.stack[:last]
}
-func opMulwImpl(x, y uint64) (high64 uint64, low64 uint64, err error) {
- var a, b, v big.Int
- a.SetUint64(x)
- b.SetUint64(y)
- v.Mul(&a, &b)
-
- var maxUint, high, low big.Int
- maxUint.SetUint64(math.MaxUint64)
- low.And(&v, &maxUint)
- high.Rsh(&v, 64)
- if !low.IsUint64() || !high.IsUint64() {
- err = errors.New("mulw overflowed")
- return
- }
-
- high64 = high.Uint64()
- low64 = low.Uint64()
- return
-}
-
-func opMulw(cx *evalContext) {
+func opMulw(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
- high, low, err := opMulwImpl(cx.stack[prev].Uint, cx.stack[last].Uint)
- if err != nil {
- cx.err = err
- return
- }
+ high, low := bits.Mul64(cx.stack[prev].Uint, cx.stack[last].Uint)
cx.stack[prev].Uint = high
cx.stack[last].Uint = low
}
-func opLt(cx *evalContext) {
+func opLt(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cond := cx.stack[prev].Uint < cx.stack[last].Uint
@@ -1004,22 +1042,22 @@ func opLt(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opGt(cx *evalContext) {
+func opGt(cx *EvalContext) {
opSwap(cx)
opLt(cx)
}
-func opLe(cx *evalContext) {
+func opLe(cx *EvalContext) {
opGt(cx)
opNot(cx)
}
-func opGe(cx *evalContext) {
+func opGe(cx *EvalContext) {
opLt(cx)
opNot(cx)
}
-func opAnd(cx *evalContext) {
+func opAnd(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cond := (cx.stack[prev].Uint != 0) && (cx.stack[last].Uint != 0)
@@ -1031,7 +1069,7 @@ func opAnd(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opOr(cx *evalContext) {
+func opOr(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cond := (cx.stack[prev].Uint != 0) || (cx.stack[last].Uint != 0)
@@ -1043,7 +1081,7 @@ func opOr(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opEq(cx *evalContext) {
+func opEq(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
ta := cx.stack[prev].argType()
@@ -1067,12 +1105,12 @@ func opEq(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opNeq(cx *evalContext) {
+func opNeq(cx *EvalContext) {
opEq(cx)
opNot(cx)
}
-func opNot(cx *evalContext) {
+func opNot(cx *EvalContext) {
last := len(cx.stack) - 1
cond := cx.stack[last].Uint == 0
if cond {
@@ -1082,13 +1120,13 @@ func opNot(cx *evalContext) {
}
}
-func opLen(cx *evalContext) {
+func opLen(cx *EvalContext) {
last := len(cx.stack) - 1
cx.stack[last].Uint = uint64(len(cx.stack[last].Bytes))
cx.stack[last].Bytes = nil
}
-func opItob(cx *evalContext) {
+func opItob(cx *EvalContext) {
last := len(cx.stack) - 1
ibytes := make([]byte, 8)
binary.BigEndian.PutUint64(ibytes, cx.stack[last].Uint)
@@ -1097,7 +1135,7 @@ func opItob(cx *evalContext) {
cx.stack[last].Bytes = ibytes
}
-func opBtoi(cx *evalContext) {
+func opBtoi(cx *EvalContext) {
last := len(cx.stack) - 1
ibytes := cx.stack[last].Bytes
if len(ibytes) > 8 {
@@ -1113,33 +1151,33 @@ func opBtoi(cx *evalContext) {
cx.stack[last].Bytes = nil
}
-func opBitOr(cx *evalContext) {
+func opBitOr(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cx.stack[prev].Uint = cx.stack[prev].Uint | cx.stack[last].Uint
cx.stack = cx.stack[:last]
}
-func opBitAnd(cx *evalContext) {
+func opBitAnd(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cx.stack[prev].Uint = cx.stack[prev].Uint & cx.stack[last].Uint
cx.stack = cx.stack[:last]
}
-func opBitXor(cx *evalContext) {
+func opBitXor(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cx.stack[prev].Uint = cx.stack[prev].Uint ^ cx.stack[last].Uint
cx.stack = cx.stack[:last]
}
-func opBitNot(cx *evalContext) {
+func opBitNot(cx *EvalContext) {
last := len(cx.stack) - 1
cx.stack[last].Uint = cx.stack[last].Uint ^ 0xffffffffffffffff
}
-func opShiftLeft(cx *evalContext) {
+func opShiftLeft(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
if cx.stack[last].Uint > 63 {
@@ -1150,7 +1188,7 @@ func opShiftLeft(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opShiftRight(cx *evalContext) {
+func opShiftRight(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
if cx.stack[last].Uint > 63 {
@@ -1161,7 +1199,7 @@ func opShiftRight(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opSqrt(cx *evalContext) {
+func opSqrt(cx *EvalContext) {
/*
It would not be safe to use math.Sqrt, because we would have to
convert our u64 to an f64, but f64 cannot represent all u64s exactly.
@@ -1188,7 +1226,7 @@ func opSqrt(cx *evalContext) {
cx.stack[last].Uint = root >> 1
}
-func opBitLen(cx *evalContext) {
+func opBitLen(cx *EvalContext) {
last := len(cx.stack) - 1
if cx.stack[last].argType() == StackUint64 {
cx.stack[last].Uint = uint64(bits.Len64(cx.stack[last].Uint))
@@ -1219,12 +1257,12 @@ func opExpImpl(base uint64, exp uint64) (uint64, error) {
if exp == 0 || base == 1 {
return 1, nil
}
- // base is now at least 2, so exp can not be over 64
- if exp > 64 {
+ // base is now at least 2, so exp can not be 64
+ if exp >= 64 {
return 0, fmt.Errorf("%d^%d overflow", base, exp)
}
answer := base
- // safe to cast exp, because it is known to fit in int (it's <= 64)
+ // safe to cast exp, because it is known to fit in int (it's < 64)
for i := 1; i < int(exp); i++ {
next := answer * base
if next/answer != base {
@@ -1235,7 +1273,7 @@ func opExpImpl(base uint64, exp uint64) (uint64, error) {
return answer, nil
}
-func opExp(cx *evalContext) {
+func opExp(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
@@ -1262,14 +1300,14 @@ func opExpwImpl(base uint64, exp uint64) (*big.Int, error) {
if exp == 0 || base == 1 {
return new(big.Int).SetUint64(1), nil
}
- // base is now at least 2, so exp can not be over 128
- if exp > 128 {
+ // base is now at least 2, so exp can not be 128
+ if exp >= 128 {
return &big.Int{}, fmt.Errorf("%d^%d overflow", base, exp)
}
answer := new(big.Int).SetUint64(base)
bigbase := new(big.Int).SetUint64(base)
- // safe to cast exp, because it is known to fit in int (it's <= 128)
+ // safe to cast exp, because it is known to fit in int (it's < 128)
for i := 1; i < int(exp); i++ {
next := answer.Mul(answer, bigbase)
answer = next
@@ -1281,7 +1319,7 @@ func opExpwImpl(base uint64, exp uint64) (*big.Int, error) {
}
-func opExpw(cx *evalContext) {
+func opExpw(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
@@ -1299,7 +1337,7 @@ func opExpw(cx *evalContext) {
cx.stack[last].Uint = lo
}
-func opBytesBinOp(cx *evalContext, result *big.Int, op func(x, y *big.Int) *big.Int) {
+func opBytesBinOp(cx *EvalContext, result *big.Int, op func(x, y *big.Int) *big.Int) {
last := len(cx.stack) - 1
prev := last - 1
@@ -1319,17 +1357,17 @@ func opBytesBinOp(cx *evalContext, result *big.Int, op func(x, y *big.Int) *big.
cx.stack = cx.stack[:last]
}
-func opBytesPlus(cx *evalContext) {
+func opBytesPlus(cx *EvalContext) {
result := new(big.Int)
opBytesBinOp(cx, result, result.Add)
}
-func opBytesMinus(cx *evalContext) {
+func opBytesMinus(cx *EvalContext) {
result := new(big.Int)
opBytesBinOp(cx, result, result.Sub)
}
-func opBytesDiv(cx *evalContext) {
+func opBytesDiv(cx *EvalContext) {
result := new(big.Int)
checkDiv := func(x, y *big.Int) *big.Int {
if y.BitLen() == 0 {
@@ -1341,12 +1379,12 @@ func opBytesDiv(cx *evalContext) {
opBytesBinOp(cx, result, checkDiv)
}
-func opBytesMul(cx *evalContext) {
+func opBytesMul(cx *EvalContext) {
result := new(big.Int)
opBytesBinOp(cx, result, result.Mul)
}
-func opBytesLt(cx *evalContext) {
+func opBytesLt(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
@@ -1366,22 +1404,22 @@ func opBytesLt(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opBytesGt(cx *evalContext) {
+func opBytesGt(cx *EvalContext) {
opSwap(cx)
opBytesLt(cx)
}
-func opBytesLe(cx *evalContext) {
+func opBytesLe(cx *EvalContext) {
opBytesGt(cx)
opNot(cx)
}
-func opBytesGe(cx *evalContext) {
+func opBytesGe(cx *EvalContext) {
opBytesLt(cx)
opNot(cx)
}
-func opBytesEq(cx *evalContext) {
+func opBytesEq(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
@@ -1401,12 +1439,12 @@ func opBytesEq(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opBytesNeq(cx *evalContext) {
+func opBytesNeq(cx *EvalContext) {
opBytesEq(cx)
opNot(cx)
}
-func opBytesModulo(cx *evalContext) {
+func opBytesModulo(cx *EvalContext) {
result := new(big.Int)
checkMod := func(x, y *big.Int) *big.Int {
if y.BitLen() == 0 {
@@ -1429,7 +1467,7 @@ func zpad(smaller []byte, size int) []byte {
// They can be returned in either order, but the first slice returned
// must be newly allocated, and already in place at the top of stack
// (the original top having been popped).
-func opBytesBinaryLogicPrep(cx *evalContext) ([]byte, []byte) {
+func opBytesBinaryLogicPrep(cx *EvalContext) ([]byte, []byte) {
last := len(cx.stack) - 1
prev := last - 1
@@ -1447,28 +1485,28 @@ func opBytesBinaryLogicPrep(cx *evalContext) ([]byte, []byte) {
return fresh, other
}
-func opBytesBitOr(cx *evalContext) {
+func opBytesBitOr(cx *EvalContext) {
a, b := opBytesBinaryLogicPrep(cx)
for i := range a {
a[i] = a[i] | b[i]
}
}
-func opBytesBitAnd(cx *evalContext) {
+func opBytesBitAnd(cx *EvalContext) {
a, b := opBytesBinaryLogicPrep(cx)
for i := range a {
a[i] = a[i] & b[i]
}
}
-func opBytesBitXor(cx *evalContext) {
+func opBytesBitXor(cx *EvalContext) {
a, b := opBytesBinaryLogicPrep(cx)
for i := range a {
a[i] = a[i] ^ b[i]
}
}
-func opBytesBitNot(cx *evalContext) {
+func opBytesBitNot(cx *EvalContext) {
last := len(cx.stack) - 1
fresh := make([]byte, len(cx.stack[last].Bytes))
@@ -1478,7 +1516,7 @@ func opBytesBitNot(cx *evalContext) {
cx.stack[last].Bytes = fresh
}
-func opBytesZero(cx *evalContext) {
+func opBytesZero(cx *EvalContext) {
last := len(cx.stack) - 1
length := cx.stack[last].Uint
if length > MaxStringSize {
@@ -1488,35 +1526,35 @@ func opBytesZero(cx *evalContext) {
cx.stack[last].Bytes = make([]byte, length)
}
-func opIntConstBlock(cx *evalContext) {
+func opIntConstBlock(cx *EvalContext) {
cx.intc, cx.nextpc, cx.err = parseIntcblock(cx.program, cx.pc)
}
-func opIntConstN(cx *evalContext, n uint) {
+func opIntConstN(cx *EvalContext, n uint) {
if n >= uint(len(cx.intc)) {
cx.err = fmt.Errorf("intc [%d] beyond %d constants", n, len(cx.intc))
return
}
cx.stack = append(cx.stack, stackValue{Uint: cx.intc[n]})
}
-func opIntConstLoad(cx *evalContext) {
+func opIntConstLoad(cx *EvalContext) {
n := uint(cx.program[cx.pc+1])
opIntConstN(cx, n)
}
-func opIntConst0(cx *evalContext) {
+func opIntConst0(cx *EvalContext) {
opIntConstN(cx, 0)
}
-func opIntConst1(cx *evalContext) {
+func opIntConst1(cx *EvalContext) {
opIntConstN(cx, 1)
}
-func opIntConst2(cx *evalContext) {
+func opIntConst2(cx *EvalContext) {
opIntConstN(cx, 2)
}
-func opIntConst3(cx *evalContext) {
+func opIntConst3(cx *EvalContext) {
opIntConstN(cx, 3)
}
-func opPushInt(cx *evalContext) {
+func opPushInt(cx *EvalContext) {
val, bytesUsed := binary.Uvarint(cx.program[cx.pc+1:])
if bytesUsed <= 0 {
cx.err = fmt.Errorf("could not decode int at pc=%d", cx.pc+1)
@@ -1527,35 +1565,35 @@ func opPushInt(cx *evalContext) {
cx.nextpc = cx.pc + 1 + bytesUsed
}
-func opByteConstBlock(cx *evalContext) {
+func opByteConstBlock(cx *EvalContext) {
cx.bytec, cx.nextpc, cx.err = parseBytecBlock(cx.program, cx.pc)
}
-func opByteConstN(cx *evalContext, n uint) {
+func opByteConstN(cx *EvalContext, n uint) {
if n >= uint(len(cx.bytec)) {
cx.err = fmt.Errorf("bytec [%d] beyond %d constants", n, len(cx.bytec))
return
}
cx.stack = append(cx.stack, stackValue{Bytes: cx.bytec[n]})
}
-func opByteConstLoad(cx *evalContext) {
+func opByteConstLoad(cx *EvalContext) {
n := uint(cx.program[cx.pc+1])
opByteConstN(cx, n)
}
-func opByteConst0(cx *evalContext) {
+func opByteConst0(cx *EvalContext) {
opByteConstN(cx, 0)
}
-func opByteConst1(cx *evalContext) {
+func opByteConst1(cx *EvalContext) {
opByteConstN(cx, 1)
}
-func opByteConst2(cx *evalContext) {
+func opByteConst2(cx *EvalContext) {
opByteConstN(cx, 2)
}
-func opByteConst3(cx *evalContext) {
+func opByteConst3(cx *EvalContext) {
opByteConstN(cx, 3)
}
-func opPushBytes(cx *evalContext) {
+func opPushBytes(cx *EvalContext) {
pos := cx.pc + 1
length, bytesUsed := binary.Uvarint(cx.program[pos:])
if bytesUsed <= 0 {
@@ -1573,7 +1611,7 @@ func opPushBytes(cx *evalContext) {
cx.nextpc = int(end)
}
-func opArgN(cx *evalContext, n uint64) {
+func opArgN(cx *EvalContext, n uint64) {
if n >= uint64(len(cx.Txn.Lsig.Args)) {
cx.err = fmt.Errorf("cannot load arg[%d] of %d", n, len(cx.Txn.Lsig.Args))
return
@@ -1582,24 +1620,31 @@ func opArgN(cx *evalContext, n uint64) {
cx.stack = append(cx.stack, stackValue{Bytes: val})
}
-func opArg(cx *evalContext) {
+func opArg(cx *EvalContext) {
n := uint64(cx.program[cx.pc+1])
opArgN(cx, n)
}
-func opArg0(cx *evalContext) {
+func opArg0(cx *EvalContext) {
opArgN(cx, 0)
}
-func opArg1(cx *evalContext) {
+func opArg1(cx *EvalContext) {
opArgN(cx, 1)
}
-func opArg2(cx *evalContext) {
+func opArg2(cx *EvalContext) {
opArgN(cx, 2)
}
-func opArg3(cx *evalContext) {
+func opArg3(cx *EvalContext) {
opArgN(cx, 3)
}
+func opArgs(cx *EvalContext) {
+ last := len(cx.stack) - 1
+ n := cx.stack[last].Uint
+ // Pop the index and push the result back on the stack.
+ cx.stack = cx.stack[:last]
+ opArgN(cx, n)
+}
-func branchTarget(cx *evalContext) (int, error) {
+func branchTarget(cx *EvalContext) (int, error) {
offset := int16(uint16(cx.program[cx.pc+1])<<8 | uint16(cx.program[cx.pc+2]))
if offset < 0 && cx.version < backBranchEnabledVersion {
return 0, fmt.Errorf("negative branch offset %x", offset)
@@ -1620,7 +1665,7 @@ func branchTarget(cx *evalContext) (int, error) {
}
// checks any branch that is {op} {int16 be offset}
-func checkBranch(cx *evalContext) error {
+func checkBranch(cx *EvalContext) error {
cx.nextpc = cx.pc + 3
target, err := branchTarget(cx)
if err != nil {
@@ -1635,7 +1680,7 @@ func checkBranch(cx *evalContext) error {
cx.branchTargets[target] = true
return nil
}
-func opBnz(cx *evalContext) {
+func opBnz(cx *EvalContext) {
last := len(cx.stack) - 1
cx.nextpc = cx.pc + 3
isNonZero := cx.stack[last].Uint != 0
@@ -1650,7 +1695,7 @@ func opBnz(cx *evalContext) {
}
}
-func opBz(cx *evalContext) {
+func opBz(cx *EvalContext) {
last := len(cx.stack) - 1
cx.nextpc = cx.pc + 3
isZero := cx.stack[last].Uint == 0
@@ -1665,7 +1710,7 @@ func opBz(cx *evalContext) {
}
}
-func opB(cx *evalContext) {
+func opB(cx *EvalContext) {
target, err := branchTarget(cx)
if err != nil {
cx.err = err
@@ -1674,12 +1719,12 @@ func opB(cx *evalContext) {
cx.nextpc = target
}
-func opCallSub(cx *evalContext) {
+func opCallSub(cx *EvalContext) {
cx.callstack = append(cx.callstack, cx.pc+3)
opB(cx)
}
-func opRetSub(cx *evalContext) {
+func opRetSub(cx *EvalContext) {
top := len(cx.callstack) - 1
if top < 0 {
cx.err = errors.New("retsub with empty callstack")
@@ -1690,24 +1735,24 @@ func opRetSub(cx *evalContext) {
cx.nextpc = target
}
-func opPop(cx *evalContext) {
+func opPop(cx *EvalContext) {
last := len(cx.stack) - 1
cx.stack = cx.stack[:last]
}
-func opDup(cx *evalContext) {
+func opDup(cx *EvalContext) {
last := len(cx.stack) - 1
sv := cx.stack[last]
cx.stack = append(cx.stack, sv)
}
-func opDup2(cx *evalContext) {
+func opDup2(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
cx.stack = append(cx.stack, cx.stack[prev:]...)
}
-func opDig(cx *evalContext) {
+func opDig(cx *EvalContext) {
depth := int(uint(cx.program[cx.pc+1]))
idx := len(cx.stack) - 1 - depth
// Need to check stack size explicitly here because checkArgs() doesn't understand dig
@@ -1720,7 +1765,7 @@ func opDig(cx *evalContext) {
cx.stack = append(cx.stack, sv)
}
-func opCover(cx *evalContext) {
+func opCover(cx *EvalContext) {
depth := int(cx.program[cx.pc+1])
topIdx := len(cx.stack) - 1
idx := topIdx - depth
@@ -1735,7 +1780,7 @@ func opCover(cx *evalContext) {
cx.stack[idx] = sv
}
-func opUncover(cx *evalContext) {
+func opUncover(cx *EvalContext) {
depth := int(cx.program[cx.pc+1])
topIdx := len(cx.stack) - 1
idx := topIdx - depth
@@ -1751,7 +1796,7 @@ func opUncover(cx *evalContext) {
cx.stack[topIdx] = sv
}
-func (cx *evalContext) assetHoldingToValue(holding *basics.AssetHolding, fs assetHoldingFieldSpec) (sv stackValue, err error) {
+func (cx *EvalContext) assetHoldingToValue(holding *basics.AssetHolding, fs assetHoldingFieldSpec) (sv stackValue, err error) {
switch fs.field {
case AssetBalance:
sv.Uint = holding.Amount
@@ -1768,7 +1813,7 @@ func (cx *evalContext) assetHoldingToValue(holding *basics.AssetHolding, fs asse
return
}
-func (cx *evalContext) assetParamsToValue(params *basics.AssetParams, creator basics.Address, fs assetParamsFieldSpec) (sv stackValue, err error) {
+func (cx *EvalContext) assetParamsToValue(params *basics.AssetParams, creator basics.Address, fs assetParamsFieldSpec) (sv stackValue, err error) {
switch fs.field {
case AssetTotal:
sv.Uint = params.Total
@@ -1805,7 +1850,7 @@ func (cx *evalContext) assetParamsToValue(params *basics.AssetParams, creator ba
return
}
-func (cx *evalContext) appParamsToValue(params *basics.AppParams, creator basics.Address, fs appParamsFieldSpec) (sv stackValue, err error) {
+func (cx *EvalContext) appParamsToValue(params *basics.AppParams, fs appParamsFieldSpec) (sv stackValue, err error) {
switch fs.field {
case AppApprovalProgram:
sv.Bytes = params.ApprovalProgram[:]
@@ -1821,9 +1866,8 @@ func (cx *evalContext) appParamsToValue(params *basics.AppParams, creator basics
sv.Uint = params.LocalStateSchema.NumByteSlice
case AppExtraProgramPages:
sv.Uint = uint64(params.ExtraProgramPages)
- case AppCreator:
- sv.Bytes = creator[:]
default:
+ // The pseudo fields AppCreator and AppAddress are handled before this method
err = fmt.Errorf("invalid app_params_get field %d", fs.field)
return
}
@@ -1836,15 +1880,19 @@ func (cx *evalContext) appParamsToValue(params *basics.AppParams, creator basics
// TxnFieldToTealValue is a thin wrapper for txnFieldToStack for external use
func TxnFieldToTealValue(txn *transactions.Transaction, groupIndex int, field TxnField, arrayFieldIdx uint64) (basics.TealValue, error) {
- cx := evalContext{EvalParams: EvalParams{GroupIndex: groupIndex}}
- sv, err := cx.txnFieldToStack(txn, field, arrayFieldIdx, groupIndex)
+ if groupIndex < 0 {
+ return basics.TealValue{}, fmt.Errorf("negative groupIndex %d", groupIndex)
+ }
+ cx := EvalContext{EvalParams: EvalParams{GroupIndex: uint64(groupIndex)}}
+ fs := txnFieldSpecByField[field]
+ sv, err := cx.txnFieldToStack(txn, fs, arrayFieldIdx, uint64(groupIndex))
return sv.toTealValue(), err
}
-func (cx *evalContext) getTxID(txn *transactions.Transaction, groupIndex int) transactions.Txid {
+func (cx *EvalContext) getTxID(txn *transactions.Transaction, groupIndex uint64) transactions.Txid {
// Initialize txidCache if necessary
if cx.txidCache == nil {
- cx.txidCache = make(map[int]transactions.Txid, len(cx.TxnGroup))
+ cx.txidCache = make(map[uint64]transactions.Txid, len(cx.TxnGroup))
}
// Hashes are expensive, so we cache computed TxIDs
@@ -1857,9 +1905,41 @@ func (cx *evalContext) getTxID(txn *transactions.Transaction, groupIndex int) tr
return txid
}
-func (cx *evalContext) txnFieldToStack(txn *transactions.Transaction, field TxnField, arrayFieldIdx uint64, groupIndex int) (sv stackValue, err error) {
+func (cx *EvalContext) itxnFieldToStack(itxn *transactions.SignedTxnWithAD, fs txnFieldSpec, arrayFieldIdx uint64) (sv stackValue, err error) {
+ if fs.effects {
+ switch fs.field {
+ case Logs:
+ if arrayFieldIdx >= uint64(len(itxn.EvalDelta.Logs)) {
+ err = fmt.Errorf("invalid Logs index %d", arrayFieldIdx)
+ return
+ }
+ sv.Bytes = nilToEmpty([]byte(itxn.EvalDelta.Logs[arrayFieldIdx]))
+ case NumLogs:
+ sv.Uint = uint64(len(itxn.EvalDelta.Logs))
+ case CreatedAssetID:
+ sv.Uint = uint64(itxn.ApplyData.ConfigAsset)
+ case CreatedApplicationID:
+ sv.Uint = uint64(itxn.ApplyData.ApplicationID)
+ default:
+ err = fmt.Errorf("invalid txn field %d", fs.field)
+ }
+ return
+ }
+
+ if fs.field == GroupIndex || fs.field == TxID {
+ err = fmt.Errorf("illegal field for inner transaction %s", fs.field)
+ } else {
+ sv, err = cx.txnFieldToStack(&itxn.Txn, fs, arrayFieldIdx, 0)
+ }
+ return
+}
+
+func (cx *EvalContext) txnFieldToStack(txn *transactions.Transaction, fs txnFieldSpec, arrayFieldIdx uint64, groupIndex uint64) (sv stackValue, err error) {
+ if fs.effects {
+ return sv, errors.New("Unable to obtain effects from top-level transactions")
+ }
err = nil
- switch field {
+ switch fs.field {
case Sender:
sv.Bytes = txn.Sender[:]
case Fee:
@@ -1886,6 +1966,8 @@ func (cx *evalContext) txnFieldToStack(txn *transactions.Transaction, field TxnF
sv.Uint = uint64(txn.VoteLast)
case VoteKeyDilution:
sv.Uint = txn.VoteKeyDilution
+ case Nonparticipation:
+ sv.Uint = boolToUint(txn.Nonparticipation)
case Type:
sv.Bytes = []byte(txn.Type)
case TypeEnum:
@@ -1901,7 +1983,7 @@ func (cx *evalContext) txnFieldToStack(txn *transactions.Transaction, field TxnF
case AssetCloseTo:
sv.Bytes = txn.AssetCloseTo[:]
case GroupIndex:
- sv.Uint = uint64(groupIndex)
+ sv.Uint = groupIndex
case TxID:
txid := cx.getTxID(txn, groupIndex)
sv.Bytes = txid[:]
@@ -2007,20 +2089,19 @@ func (cx *evalContext) txnFieldToStack(txn *transactions.Transaction, field TxnF
case ExtraProgramPages:
sv.Uint = uint64(txn.ExtraProgramPages)
default:
- err = fmt.Errorf("invalid txn field %d", field)
+ err = fmt.Errorf("invalid txn field %d", fs.field)
return
}
- txnField := TxnField(field)
- txnFieldType := TxnFieldTypes[txnField]
+ txnFieldType := TxnFieldTypes[fs.field]
if !typecheck(txnFieldType, sv.argType()) {
- err = fmt.Errorf("%s expected field type is %s but got %s", txnField.String(), txnFieldType.String(), sv.argType().String())
+ err = fmt.Errorf("%s expected field type is %s but got %s", fs.field.String(), txnFieldType.String(), sv.argType().String())
}
return
}
-func opTxn(cx *evalContext) {
- field := TxnField(uint64(cx.program[cx.pc+1]))
+func opTxn(cx *EvalContext) {
+ field := TxnField(cx.program[cx.pc+1])
fs, ok := txnFieldSpecByField[field]
if !ok || fs.version > cx.version {
cx.err = fmt.Errorf("invalid txn field %d", field)
@@ -2031,7 +2112,7 @@ func opTxn(cx *evalContext) {
cx.err = fmt.Errorf("invalid txn field %d", field)
return
}
- sv, err := cx.txnFieldToStack(&cx.Txn.Txn, field, 0, cx.GroupIndex)
+ sv, err := cx.txnFieldToStack(&cx.Txn.Txn, fs, 0, cx.GroupIndex)
if err != nil {
cx.err = err
return
@@ -2039,8 +2120,8 @@ func opTxn(cx *evalContext) {
cx.stack = append(cx.stack, sv)
}
-func opTxna(cx *evalContext) {
- field := TxnField(uint64(cx.program[cx.pc+1]))
+func opTxna(cx *EvalContext) {
+ field := TxnField(cx.program[cx.pc+1])
fs, ok := txnFieldSpecByField[field]
if !ok || fs.version > cx.version {
cx.err = fmt.Errorf("invalid txn field %d", field)
@@ -2052,7 +2133,7 @@ func opTxna(cx *evalContext) {
return
}
arrayFieldIdx := uint64(cx.program[cx.pc+2])
- sv, err := cx.txnFieldToStack(&cx.Txn.Txn, field, arrayFieldIdx, cx.GroupIndex)
+ sv, err := cx.txnFieldToStack(&cx.Txn.Txn, fs, arrayFieldIdx, cx.GroupIndex)
if err != nil {
cx.err = err
return
@@ -2060,14 +2141,37 @@ func opTxna(cx *evalContext) {
cx.stack = append(cx.stack, sv)
}
-func opGtxn(cx *evalContext) {
- gtxid := int(uint(cx.program[cx.pc+1]))
- if gtxid >= len(cx.TxnGroup) {
+func opTxnas(cx *EvalContext) {
+ last := len(cx.stack) - 1
+
+ field := TxnField(cx.program[cx.pc+1])
+ fs, ok := txnFieldSpecByField[field]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid txn field %d", field)
+ return
+ }
+ _, ok = txnaFieldSpecByField[field]
+ if !ok {
+ cx.err = fmt.Errorf("txnas unsupported field %d", field)
+ return
+ }
+ arrayFieldIdx := cx.stack[last].Uint
+ sv, err := cx.txnFieldToStack(&cx.Txn.Txn, fs, arrayFieldIdx, cx.GroupIndex)
+ if err != nil {
+ cx.err = err
+ return
+ }
+ cx.stack[last] = sv
+}
+
+func opGtxn(cx *EvalContext) {
+ gtxid := cx.program[cx.pc+1]
+ if int(gtxid) >= len(cx.TxnGroup) {
cx.err = fmt.Errorf("gtxn lookup TxnGroup[%d] but it only has %d", gtxid, len(cx.TxnGroup))
return
}
tx := &cx.TxnGroup[gtxid].Txn
- field := TxnField(uint64(cx.program[cx.pc+2]))
+ field := TxnField(cx.program[cx.pc+2])
fs, ok := txnFieldSpecByField[field]
if !ok || fs.version > cx.version {
cx.err = fmt.Errorf("invalid txn field %d", field)
@@ -2080,11 +2184,11 @@ func opGtxn(cx *evalContext) {
}
var sv stackValue
var err error
- if TxnField(field) == GroupIndex {
+ if field == GroupIndex {
// GroupIndex; asking this when we just specified it is _dumb_, but oh well
sv.Uint = uint64(gtxid)
} else {
- sv, err = cx.txnFieldToStack(tx, field, 0, gtxid)
+ sv, err = cx.txnFieldToStack(tx, fs, 0, uint64(gtxid))
if err != nil {
cx.err = err
return
@@ -2093,14 +2197,14 @@ func opGtxn(cx *evalContext) {
cx.stack = append(cx.stack, sv)
}
-func opGtxna(cx *evalContext) {
+func opGtxna(cx *EvalContext) {
gtxid := int(uint(cx.program[cx.pc+1]))
if gtxid >= len(cx.TxnGroup) {
cx.err = fmt.Errorf("gtxna lookup TxnGroup[%d] but it only has %d", gtxid, len(cx.TxnGroup))
return
}
tx := &cx.TxnGroup[gtxid].Txn
- field := TxnField(uint64(cx.program[cx.pc+2]))
+ field := TxnField(cx.program[cx.pc+2])
fs, ok := txnFieldSpecByField[field]
if !ok || fs.version > cx.version {
cx.err = fmt.Errorf("invalid txn field %d", field)
@@ -2112,7 +2216,7 @@ func opGtxna(cx *evalContext) {
return
}
arrayFieldIdx := uint64(cx.program[cx.pc+3])
- sv, err := cx.txnFieldToStack(tx, field, arrayFieldIdx, gtxid)
+ sv, err := cx.txnFieldToStack(tx, fs, arrayFieldIdx, uint64(gtxid))
if err != nil {
cx.err = err
return
@@ -2120,15 +2224,44 @@ func opGtxna(cx *evalContext) {
cx.stack = append(cx.stack, sv)
}
-func opGtxns(cx *evalContext) {
+func opGtxnas(cx *EvalContext) {
last := len(cx.stack) - 1
- gtxid := int(cx.stack[last].Uint)
- if gtxid >= len(cx.TxnGroup) {
+
+ gtxid := cx.program[cx.pc+1]
+ if int(gtxid) >= len(cx.TxnGroup) {
+ cx.err = fmt.Errorf("gtxnas lookup TxnGroup[%d] but it only has %d", gtxid, len(cx.TxnGroup))
+ return
+ }
+ tx := &cx.TxnGroup[gtxid].Txn
+ field := TxnField(cx.program[cx.pc+2])
+ fs, ok := txnFieldSpecByField[field]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid txn field %d", field)
+ return
+ }
+ _, ok = txnaFieldSpecByField[field]
+ if !ok {
+ cx.err = fmt.Errorf("gtxnas unsupported field %d", field)
+ return
+ }
+ arrayFieldIdx := cx.stack[last].Uint
+ sv, err := cx.txnFieldToStack(tx, fs, arrayFieldIdx, uint64(gtxid))
+ if err != nil {
+ cx.err = err
+ return
+ }
+ cx.stack[last] = sv
+}
+
+func opGtxns(cx *EvalContext) {
+ last := len(cx.stack) - 1
+ gtxid := cx.stack[last].Uint
+ if gtxid >= uint64(len(cx.TxnGroup)) {
cx.err = fmt.Errorf("gtxns lookup TxnGroup[%d] but it only has %d", gtxid, len(cx.TxnGroup))
return
}
tx := &cx.TxnGroup[gtxid].Txn
- field := TxnField(uint64(cx.program[cx.pc+1]))
+ field := TxnField(cx.program[cx.pc+1])
fs, ok := txnFieldSpecByField[field]
if !ok || fs.version > cx.version {
cx.err = fmt.Errorf("invalid txn field %d", field)
@@ -2141,11 +2274,11 @@ func opGtxns(cx *evalContext) {
}
var sv stackValue
var err error
- if TxnField(field) == GroupIndex {
+ if field == GroupIndex {
// GroupIndex; asking this when we just specified it is _dumb_, but oh well
- sv.Uint = uint64(gtxid)
+ sv.Uint = gtxid
} else {
- sv, err = cx.txnFieldToStack(tx, field, 0, gtxid)
+ sv, err = cx.txnFieldToStack(tx, fs, 0, gtxid)
if err != nil {
cx.err = err
return
@@ -2154,15 +2287,15 @@ func opGtxns(cx *evalContext) {
cx.stack[last] = sv
}
-func opGtxnsa(cx *evalContext) {
+func opGtxnsa(cx *EvalContext) {
last := len(cx.stack) - 1
- gtxid := int(cx.stack[last].Uint)
- if gtxid >= len(cx.TxnGroup) {
+ gtxid := cx.stack[last].Uint
+ if gtxid >= uint64(len(cx.TxnGroup)) {
cx.err = fmt.Errorf("gtxnsa lookup TxnGroup[%d] but it only has %d", gtxid, len(cx.TxnGroup))
return
}
tx := &cx.TxnGroup[gtxid].Txn
- field := TxnField(uint64(cx.program[cx.pc+1]))
+ field := TxnField(cx.program[cx.pc+1])
fs, ok := txnFieldSpecByField[field]
if !ok || fs.version > cx.version {
cx.err = fmt.Errorf("invalid txn field %d", field)
@@ -2174,7 +2307,7 @@ func opGtxnsa(cx *evalContext) {
return
}
arrayFieldIdx := uint64(cx.program[cx.pc+2])
- sv, err := cx.txnFieldToStack(tx, field, arrayFieldIdx, gtxid)
+ sv, err := cx.txnFieldToStack(tx, fs, arrayFieldIdx, gtxid)
if err != nil {
cx.err = err
return
@@ -2182,8 +2315,94 @@ func opGtxnsa(cx *evalContext) {
cx.stack[last] = sv
}
-func opGaidImpl(cx *evalContext, groupIdx int, opName string) (sv stackValue, err error) {
- if groupIdx >= len(cx.TxnGroup) {
+func opGtxnsas(cx *EvalContext) {
+ last := len(cx.stack) - 1
+ prev := last - 1
+
+ gtxid := cx.stack[prev].Uint
+ if gtxid >= uint64(len(cx.TxnGroup)) {
+ cx.err = fmt.Errorf("gtxnsas lookup TxnGroup[%d] but it only has %d", gtxid, len(cx.TxnGroup))
+ return
+ }
+ tx := &cx.TxnGroup[gtxid].Txn
+ field := TxnField(cx.program[cx.pc+1])
+ fs, ok := txnFieldSpecByField[field]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid txn field %d", field)
+ return
+ }
+ _, ok = txnaFieldSpecByField[field]
+ if !ok {
+ cx.err = fmt.Errorf("gtxnsas unsupported field %d", field)
+ return
+ }
+ arrayFieldIdx := cx.stack[last].Uint
+ sv, err := cx.txnFieldToStack(tx, fs, arrayFieldIdx, gtxid)
+ if err != nil {
+ cx.err = err
+ return
+ }
+ cx.stack[prev] = sv
+ cx.stack = cx.stack[:last]
+}
+
+func opItxn(cx *EvalContext) {
+ field := TxnField(cx.program[cx.pc+1])
+ fs, ok := txnFieldSpecByField[field]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid itxn field %d", field)
+ return
+ }
+ _, ok = txnaFieldSpecByField[field]
+ if ok {
+ cx.err = fmt.Errorf("invalid itxn field %d", field)
+ return
+ }
+
+ if len(cx.InnerTxns) == 0 {
+ cx.err = fmt.Errorf("no inner transaction available %d", field)
+ return
+ }
+
+ itxn := &cx.InnerTxns[len(cx.InnerTxns)-1]
+ sv, err := cx.itxnFieldToStack(itxn, fs, 0)
+ if err != nil {
+ cx.err = err
+ return
+ }
+ cx.stack = append(cx.stack, sv)
+}
+
+func opItxna(cx *EvalContext) {
+ field := TxnField(cx.program[cx.pc+1])
+ fs, ok := txnFieldSpecByField[field]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid itxn field %d", field)
+ return
+ }
+ _, ok = txnaFieldSpecByField[field]
+ if !ok {
+ cx.err = fmt.Errorf("itxna unsupported field %d", field)
+ return
+ }
+ arrayFieldIdx := uint64(cx.program[cx.pc+2])
+
+ if len(cx.InnerTxns) == 0 {
+ cx.err = fmt.Errorf("no inner transaction available %d", field)
+ return
+ }
+
+ itxn := &cx.InnerTxns[len(cx.InnerTxns)-1]
+ sv, err := cx.itxnFieldToStack(itxn, fs, arrayFieldIdx)
+ if err != nil {
+ cx.err = err
+ return
+ }
+ cx.stack = append(cx.stack, sv)
+}
+
+func opGaidImpl(cx *EvalContext, groupIdx uint64, opName string) (sv stackValue, err error) {
+ if groupIdx >= uint64(len(cx.TxnGroup)) {
err = fmt.Errorf("%s lookup TxnGroup[%d] but it only has %d", opName, groupIdx, len(cx.TxnGroup))
return
} else if groupIdx > cx.GroupIndex {
@@ -2209,9 +2428,9 @@ func opGaidImpl(cx *evalContext, groupIdx int, opName string) (sv stackValue, er
return
}
-func opGaid(cx *evalContext) {
- groupIdx := int(uint(cx.program[cx.pc+1]))
- sv, err := opGaidImpl(cx, groupIdx, "gaid")
+func opGaid(cx *EvalContext) {
+ groupIdx := cx.program[cx.pc+1]
+ sv, err := opGaidImpl(cx, uint64(groupIdx), "gaid")
if err != nil {
cx.err = err
return
@@ -2220,9 +2439,9 @@ func opGaid(cx *evalContext) {
cx.stack = append(cx.stack, sv)
}
-func opGaids(cx *evalContext) {
+func opGaids(cx *EvalContext) {
last := len(cx.stack) - 1
- groupIdx := int(cx.stack[last].Uint)
+ groupIdx := cx.stack[last].Uint
sv, err := opGaidImpl(cx, groupIdx, "gaids")
if err != nil {
cx.err = err
@@ -2232,7 +2451,7 @@ func opGaids(cx *evalContext) {
cx.stack[last] = sv
}
-func (cx *evalContext) getRound() (rnd uint64, err error) {
+func (cx *EvalContext) getRound() (rnd uint64, err error) {
if cx.Ledger == nil {
err = fmt.Errorf("ledger not available")
return
@@ -2240,7 +2459,7 @@ func (cx *evalContext) getRound() (rnd uint64, err error) {
return uint64(cx.Ledger.Round()), nil
}
-func (cx *evalContext) getLatestTimestamp() (timestamp uint64, err error) {
+func (cx *EvalContext) getLatestTimestamp() (timestamp uint64, err error) {
if cx.Ledger == nil {
err = fmt.Errorf("ledger not available")
return
@@ -2253,33 +2472,64 @@ func (cx *evalContext) getLatestTimestamp() (timestamp uint64, err error) {
return uint64(ts), nil
}
-func (cx *evalContext) getApplicationID() (rnd uint64, err error) {
+func (cx *EvalContext) getApplicationID() (uint64, error) {
if cx.Ledger == nil {
- err = fmt.Errorf("ledger not available")
- return
+ return 0, fmt.Errorf("ledger not available")
}
return uint64(cx.Ledger.ApplicationID()), nil
}
-func (cx *evalContext) getCreatableID(groupIndex int) (cid uint64, err error) {
+func (cx *EvalContext) getApplicationAddress() (basics.Address, error) {
+ if cx.Ledger == nil {
+ return basics.Address{}, fmt.Errorf("ledger not available")
+ }
+
+ // Initialize appAddrCache if necessary
+ if cx.appAddrCache == nil {
+ cx.appAddrCache = make(map[basics.AppIndex]basics.Address)
+ }
+
+ appID := cx.Ledger.ApplicationID()
+ // Hashes are expensive, so we cache computed app addrs
+ appAddr, ok := cx.appAddrCache[appID]
+ if !ok {
+ appAddr = appID.Address()
+ cx.appAddrCache[appID] = appAddr
+ }
+
+ return appAddr, nil
+}
+
+func (cx *EvalContext) getCreatableID(groupIndex uint64) (cid uint64, err error) {
if cx.Ledger == nil {
err = fmt.Errorf("ledger not available")
return
}
- return uint64(cx.Ledger.GetCreatableID(groupIndex)), nil
+ gi := int(groupIndex)
+ if gi < 0 {
+ return 0, fmt.Errorf("groupIndex %d too high", groupIndex)
+ }
+ return uint64(cx.Ledger.GetCreatableID(gi)), nil
}
-func (cx *evalContext) getCreatorAddress() ([]byte, error) {
+func (cx *EvalContext) getCreatorAddress() ([]byte, error) {
if cx.Ledger == nil {
return nil, fmt.Errorf("ledger not available")
}
- addr := cx.Ledger.CreatorAddress()
- return addr[:], nil
+ _, creator, err := cx.Ledger.AppParams(cx.Ledger.ApplicationID())
+ if err != nil {
+ return nil, fmt.Errorf("No params for current app")
+ }
+ return creator[:], nil
+}
+
+func (cx *EvalContext) getGroupID() []byte {
+ return cx.Txn.Txn.Group[:]
}
var zeroAddress basics.Address
-func (cx *evalContext) globalFieldToValue(fs globalFieldSpec) (sv stackValue, err error) {
+func (cx *EvalContext) globalFieldToValue(fs globalFieldSpec) (sv stackValue, err error) {
switch fs.field {
case MinTxnFee:
sv.Uint = cx.Proto.MinTxnFee
@@ -2299,8 +2549,14 @@ func (cx *evalContext) globalFieldToValue(fs globalFieldSpec) (sv stackValue, er
sv.Uint, err = cx.getLatestTimestamp()
case CurrentApplicationID:
sv.Uint, err = cx.getApplicationID()
+ case CurrentApplicationAddress:
+ var addr basics.Address
+ addr, err = cx.getApplicationAddress()
+ sv.Bytes = addr[:]
case CreatorAddress:
sv.Bytes, err = cx.getCreatorAddress()
+ case GroupID:
+ sv.Bytes = cx.getGroupID()
default:
err = fmt.Errorf("invalid global field %d", fs.field)
}
@@ -2312,7 +2568,7 @@ func (cx *evalContext) globalFieldToValue(fs globalFieldSpec) (sv stackValue, er
return sv, err
}
-func opGlobal(cx *evalContext) {
+func opGlobal(cx *EvalContext) {
globalField := GlobalField(cx.program[cx.pc+1])
fs, ok := globalFieldSpecByField[globalField]
if !ok || fs.version > cx.version {
@@ -2347,14 +2603,14 @@ func (msg Msg) ToBeHashed() (protocol.HashID, []byte) {
}
// programHash lets us lazily compute H(cx.program)
-func (cx *evalContext) programHash() crypto.Digest {
+func (cx *EvalContext) programHash() crypto.Digest {
if cx.programHashCached == (crypto.Digest{}) {
cx.programHashCached = crypto.HashObj(Program(cx.program))
}
return cx.programHashCached
}
-func opEd25519verify(cx *evalContext) {
+func opEd25519verify(cx *EvalContext) {
last := len(cx.stack) - 1 // index of PK
prev := last - 1 // index of signature
pprev := prev - 1 // index of data
@@ -2383,23 +2639,203 @@ func opEd25519verify(cx *evalContext) {
cx.stack = cx.stack[:prev]
}
-func opLoad(cx *evalContext) {
- gindex := int(uint(cx.program[cx.pc+1]))
- cx.stack = append(cx.stack, cx.scratch[gindex])
+// leadingZeros needs to be replaced by big.Int.FillBytes
+func leadingZeros(size int, b *big.Int) ([]byte, error) {
+ data := b.Bytes()
+ if size < len(data) {
+ return nil, fmt.Errorf("insufficient buffer size: %d < %d", size, len(data))
+ }
+ if size == len(data) {
+ return data, nil
+ }
+
+ buf := make([]byte, size)
+ copy(buf[size-len(data):], data)
+ return buf, nil
+}
+
+func opEcdsaVerify(cx *EvalContext) {
+ ecdsaCurve := EcdsaCurve(cx.program[cx.pc+1])
+ fs, ok := ecdsaCurveSpecByField[ecdsaCurve]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid curve %d", ecdsaCurve)
+ return
+ }
+
+ if fs.field != Secp256k1 {
+ cx.err = fmt.Errorf("unsupported curve %d", fs.field)
+ return
+ }
+
+ last := len(cx.stack) - 1 // index of PK y
+ prev := last - 1 // index of PK x
+ pprev := prev - 1 // index of signature s
+ fourth := pprev - 1 // index of signature r
+ fifth := fourth - 1 // index of data
+
+ pkY := cx.stack[last].Bytes
+ pkX := cx.stack[prev].Bytes
+ sigS := cx.stack[pprev].Bytes
+ sigR := cx.stack[fourth].Bytes
+ msg := cx.stack[fifth].Bytes
+
+ x := new(big.Int).SetBytes(pkX)
+ y := new(big.Int).SetBytes(pkY)
+ pubkey := secp256k1.S256().Marshal(x, y)
+
+ signature := make([]byte, 0, len(sigR)+len(sigS))
+ signature = append(signature, sigR...)
+ signature = append(signature, sigS...)
+
+ result := secp256k1.VerifySignature(pubkey, msg, signature)
+
+ if result {
+ cx.stack[fifth].Uint = 1
+ } else {
+ cx.stack[fifth].Uint = 0
+ }
+ cx.stack[fifth].Bytes = nil
+ cx.stack = cx.stack[:fourth]
+}
+
+func opEcdsaPkDecompress(cx *EvalContext) {
+ ecdsaCurve := EcdsaCurve(cx.program[cx.pc+1])
+ fs, ok := ecdsaCurveSpecByField[ecdsaCurve]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid curve %d", ecdsaCurve)
+ return
+ }
+
+ if fs.field != Secp256k1 {
+ cx.err = fmt.Errorf("unsupported curve %d", fs.field)
+ return
+ }
+
+ last := len(cx.stack) - 1 // compressed PK
+
+ pubkey := cx.stack[last].Bytes
+ x, y := secp256k1.DecompressPubkey(pubkey)
+ if x == nil {
+ cx.err = fmt.Errorf("invalid pubkey")
+ return
+ }
+
+ var err error
+ cx.stack[last].Uint = 0
+ cx.stack[last].Bytes, err = leadingZeros(32, x)
+ if err != nil {
+ cx.err = fmt.Errorf("x component zeroing failed: %s", err.Error())
+ return
+ }
+
+ var sv stackValue
+ sv.Bytes, err = leadingZeros(32, y)
+ if err != nil {
+ cx.err = fmt.Errorf("y component zeroing failed: %s", err.Error())
+ return
+ }
+
+ cx.stack = append(cx.stack, sv)
+}
+
+func opEcdsaPkRecover(cx *EvalContext) {
+ ecdsaCurve := EcdsaCurve(cx.program[cx.pc+1])
+ fs, ok := ecdsaCurveSpecByField[ecdsaCurve]
+ if !ok || fs.version > cx.version {
+ cx.err = fmt.Errorf("invalid curve %d", ecdsaCurve)
+ return
+ }
+
+ if fs.field != Secp256k1 {
+ cx.err = fmt.Errorf("unsupported curve %d", fs.field)
+ return
+ }
+
+ last := len(cx.stack) - 1 // index of signature s
+ prev := last - 1 // index of signature r
+ pprev := prev - 1 // index of recovery id
+ fourth := pprev - 1 // index of data
+
+ sigS := cx.stack[last].Bytes
+ sigR := cx.stack[prev].Bytes
+ recid := cx.stack[pprev].Uint
+ msg := cx.stack[fourth].Bytes
+
+ if recid > 3 {
+ cx.err = fmt.Errorf("invalid recovery id: %d", recid)
+ return
+ }
+
+ signature := make([]byte, 0, len(sigR)+len(sigS)+1)
+ signature = append(signature, sigR...)
+ signature = append(signature, sigS...)
+ signature = append(signature, uint8(recid))
+
+ pk, err := secp256k1.RecoverPubkey(msg, signature)
+ if err != nil {
+ cx.err = fmt.Errorf("pubkey recover failed: %s", err.Error())
+ return
+ }
+ x, y := secp256k1.S256().Unmarshal(pk)
+ if x == nil {
+ cx.err = fmt.Errorf("pubkey unmarshal failed")
+ return
+ }
+
+ cx.stack[fourth].Uint = 0
+ cx.stack[fourth].Bytes, err = leadingZeros(32, x)
+ if err != nil {
+ cx.err = fmt.Errorf("x component zeroing failed: %s", err.Error())
+ return
+ }
+ cx.stack[pprev].Uint = 0
+ cx.stack[pprev].Bytes, err = leadingZeros(32, y)
+ if err != nil {
+ cx.err = fmt.Errorf("y component zeroing failed: %s", err.Error())
+ return
+ }
+ cx.stack = cx.stack[:prev]
+}
+
+func opLoad(cx *EvalContext) {
+ n := cx.program[cx.pc+1]
+ cx.stack = append(cx.stack, cx.scratch[n])
}
-func opStore(cx *evalContext) {
- gindex := int(uint(cx.program[cx.pc+1]))
+func opLoads(cx *EvalContext) {
last := len(cx.stack) - 1
- cx.scratch[gindex] = cx.stack[last]
+ n := cx.stack[last].Uint
+ if n >= uint64(len(cx.scratch)) {
+ cx.err = fmt.Errorf("invalid Scratch index %d", n)
+ return
+ }
+ cx.stack[last] = cx.scratch[n]
+}
+
+func opStore(cx *EvalContext) {
+ n := cx.program[cx.pc+1]
+ last := len(cx.stack) - 1
+ cx.scratch[n] = cx.stack[last]
cx.stack = cx.stack[:last]
}
-func opGloadImpl(cx *evalContext, groupIdx int, scratchIdx int, opName string) (scratchValue stackValue, err error) {
- if groupIdx >= len(cx.TxnGroup) {
+func opStores(cx *EvalContext) {
+ last := len(cx.stack) - 1
+ prev := last - 1
+ n := cx.stack[prev].Uint
+ if n >= uint64(len(cx.scratch)) {
+ cx.err = fmt.Errorf("invalid Scratch index %d", n)
+ return
+ }
+ cx.scratch[n] = cx.stack[last]
+ cx.stack = cx.stack[:prev]
+}
+
+func opGloadImpl(cx *EvalContext, groupIdx uint64, scratchIdx byte, opName string) (scratchValue stackValue, err error) {
+ if groupIdx >= uint64(len(cx.TxnGroup)) {
err = fmt.Errorf("%s lookup TxnGroup[%d] but it only has %d", opName, groupIdx, len(cx.TxnGroup))
return
- } else if scratchIdx >= 256 {
+ } else if int(scratchIdx) >= len(cx.scratch) {
err = fmt.Errorf("invalid Scratch index %d", scratchIdx)
return
} else if txn := cx.TxnGroup[groupIdx].Txn; txn.Type != protocol.ApplicationCallTx {
@@ -2413,13 +2849,13 @@ func opGloadImpl(cx *evalContext, groupIdx int, scratchIdx int, opName string) (
return
}
- scratchValue = cx.PastSideEffects[groupIdx].getScratchValue(uint8(scratchIdx))
+ scratchValue = cx.PastSideEffects[groupIdx].getScratchValue(scratchIdx)
return
}
-func opGload(cx *evalContext) {
- groupIdx := int(uint(cx.program[cx.pc+1]))
- scratchIdx := int(uint(cx.program[cx.pc+2]))
+func opGload(cx *EvalContext) {
+ groupIdx := uint64(cx.program[cx.pc+1])
+ scratchIdx := cx.program[cx.pc+2]
scratchValue, err := opGloadImpl(cx, groupIdx, scratchIdx, "gload")
if err != nil {
cx.err = err
@@ -2429,10 +2865,10 @@ func opGload(cx *evalContext) {
cx.stack = append(cx.stack, scratchValue)
}
-func opGloads(cx *evalContext) {
+func opGloads(cx *EvalContext) {
last := len(cx.stack) - 1
- groupIdx := int(cx.stack[last].Uint)
- scratchIdx := int(uint(cx.program[cx.pc+1]))
+ groupIdx := cx.stack[last].Uint
+ scratchIdx := cx.program[cx.pc+1]
scratchValue, err := opGloadImpl(cx, groupIdx, scratchIdx, "gloads")
if err != nil {
cx.err = err
@@ -2442,7 +2878,7 @@ func opGloads(cx *evalContext) {
cx.stack[last] = scratchValue
}
-func opConcat(cx *evalContext) {
+func opConcat(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
a := cx.stack[prev].Bytes
@@ -2470,14 +2906,14 @@ func substring(x []byte, start, end int) (out []byte, err error) {
return
}
-func opSubstring(cx *evalContext) {
+func opSubstring(cx *EvalContext) {
last := len(cx.stack) - 1
start := cx.program[cx.pc+1]
end := cx.program[cx.pc+2]
cx.stack[last].Bytes, cx.err = substring(cx.stack[last].Bytes, int(start), int(end))
}
-func opSubstring3(cx *evalContext) {
+func opSubstring3(cx *EvalContext) {
last := len(cx.stack) - 1 // end
prev := last - 1 // start
pprev := prev - 1 // bytes
@@ -2491,7 +2927,7 @@ func opSubstring3(cx *evalContext) {
cx.stack = cx.stack[:prev]
}
-func opGetBit(cx *evalContext) {
+func opGetBit(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
idx := cx.stack[last].Uint
@@ -2528,7 +2964,7 @@ func opGetBit(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opSetBit(cx *evalContext) {
+func opSetBit(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
pprev := prev - 1
@@ -2580,7 +3016,7 @@ func opSetBit(cx *evalContext) {
cx.stack = cx.stack[:prev]
}
-func opGetByte(cx *evalContext) {
+func opGetByte(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
@@ -2596,7 +3032,7 @@ func opGetByte(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opSetByte(cx *evalContext) {
+func opSetByte(cx *EvalContext) {
last := len(cx.stack) - 1
prev := last - 1
pprev := prev - 1
@@ -2625,7 +3061,7 @@ func opExtractImpl(x []byte, start, length int) (out []byte, err error) {
return
}
-func opExtract(cx *evalContext) {
+func opExtract(cx *EvalContext) {
last := len(cx.stack) - 1
startIdx := cx.program[cx.pc+1]
lengthIdx := cx.program[cx.pc+2]
@@ -2637,7 +3073,7 @@ func opExtract(cx *evalContext) {
cx.stack[last].Bytes, cx.err = opExtractImpl(cx.stack[last].Bytes, int(startIdx), length)
}
-func opExtract3(cx *evalContext) {
+func opExtract3(cx *EvalContext) {
last := len(cx.stack) - 1 // length
prev := last - 1 // start
byteArrayIdx := prev - 1 // bytes
@@ -2662,7 +3098,7 @@ func convertBytesToInt(x []byte) (out uint64) {
return
}
-func opExtractNBytes(cx *evalContext, n int) {
+func opExtractNBytes(cx *EvalContext, n int) {
last := len(cx.stack) - 1 // start
prev := last - 1 // bytes
startIdx := cx.stack[last].Uint
@@ -2673,35 +3109,54 @@ func opExtractNBytes(cx *evalContext, n int) {
cx.stack = cx.stack[:last]
}
-func opExtract16Bits(cx *evalContext) {
+func opExtract16Bits(cx *EvalContext) {
opExtractNBytes(cx, 2) // extract 2 bytes
}
-func opExtract32Bits(cx *evalContext) {
+func opExtract32Bits(cx *EvalContext) {
opExtractNBytes(cx, 4) // extract 4 bytes
}
-func opExtract64Bits(cx *evalContext) {
+func opExtract64Bits(cx *EvalContext) {
opExtractNBytes(cx, 8) // extract 8 bytes
}
-func accountReference(cx *evalContext, account stackValue) (basics.Address, uint64, error) {
+// accountReference yields the address and Accounts offset designated
+// by a stackValue. If the stackValue is the app account, it need not
+// be in the Accounts array, therefore len(Accounts) + 1 is returned
+// as the index. This unusual convention is based on the existing
+// convention that 0 is the sender, 1-len(Accounts) are indexes into
+// Accounts array, and so len+1 is the next available value. This
+// will allow encoding into EvalDelta efficiently when it becomes
+// necessary (when apps change local state on their own account).
+func (cx *EvalContext) accountReference(account stackValue) (basics.Address, uint64, error) {
if account.argType() == StackUint64 {
addr, err := cx.Txn.Txn.AddressByIndex(account.Uint, cx.Txn.Txn.Sender)
return addr, account.Uint, err
}
- addr := basics.Address{}
- copy(addr[:], account.Bytes)
+ addr, err := account.address()
+ if err != nil {
+ return addr, 0, err
+ }
idx, err := cx.Txn.Txn.IndexByAddress(addr, cx.Txn.Txn.Sender)
+
+ if err != nil {
+ // Application address is acceptable. index is meaningless though
+ appAddr, _ := cx.getApplicationAddress()
+ if appAddr == addr {
+ return addr, uint64(len(cx.Txn.Txn.Accounts) + 1), nil
+ }
+ }
+
return addr, idx, err
}
type opQuery func(basics.Address, *config.ConsensusParams) (basics.MicroAlgos, error)
-func opBalanceQuery(cx *evalContext, query opQuery, item string) error {
+func opBalanceQuery(cx *EvalContext, query opQuery, item string) error {
last := len(cx.stack) - 1 // account (index or actual address)
- addr, _, err := accountReference(cx, cx.stack[last])
+ addr, _, err := cx.accountReference(cx.stack[last])
if err != nil {
return err
}
@@ -2715,7 +3170,7 @@ func opBalanceQuery(cx *evalContext, query opQuery, item string) error {
cx.stack[last].Uint = microAlgos.Raw
return nil
}
-func opBalance(cx *evalContext) {
+func opBalance(cx *EvalContext) {
if cx.Ledger == nil {
cx.err = fmt.Errorf("ledger not available")
return
@@ -2729,7 +3184,7 @@ func opBalance(cx *evalContext) {
cx.err = err
}
}
-func opMinBalance(cx *evalContext) {
+func opMinBalance(cx *EvalContext) {
if cx.Ledger == nil {
cx.err = fmt.Errorf("ledger not available")
return
@@ -2741,7 +3196,7 @@ func opMinBalance(cx *evalContext) {
}
}
-func opAppOptedIn(cx *evalContext) {
+func opAppOptedIn(cx *EvalContext) {
last := len(cx.stack) - 1 // app
prev := last - 1 // account
@@ -2750,7 +3205,7 @@ func opAppOptedIn(cx *evalContext) {
return
}
- addr, _, err := accountReference(cx, cx.stack[prev])
+ addr, _, err := cx.accountReference(cx.stack[prev])
if err != nil {
cx.err = err
return
@@ -2778,7 +3233,7 @@ func opAppOptedIn(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opAppLocalGet(cx *evalContext) {
+func opAppLocalGet(cx *EvalContext) {
last := len(cx.stack) - 1 // state key
prev := last - 1 // account
@@ -2794,7 +3249,7 @@ func opAppLocalGet(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opAppLocalGetEx(cx *evalContext) {
+func opAppLocalGetEx(cx *EvalContext) {
last := len(cx.stack) - 1 // state key
prev := last - 1 // app id
pprev := prev - 1 // account
@@ -2818,13 +3273,13 @@ func opAppLocalGetEx(cx *evalContext) {
cx.stack = cx.stack[:last]
}
-func opAppLocalGetImpl(cx *evalContext, appID uint64, key []byte, acct stackValue) (result stackValue, ok bool, err error) {
+func opAppLocalGetImpl(cx *EvalContext, appID uint64, key []byte, acct stackValue) (result stackValue, ok bool, err error) {
if cx.Ledger == nil {
err = fmt.Errorf("ledger not available")
return
}
- addr, accountIdx, err := accountReference(cx, acct)
+ addr, accountIdx, err := cx.accountReference(acct)
if err != nil {
return
}
@@ -2846,7 +3301,7 @@ func opAppLocalGetImpl(cx *evalContext, appID uint64, key []byte, acct stackValu
return
}
-func opAppGetGlobalStateImpl(cx *evalContext, appIndex uint64, key []byte) (result stackValue, ok bool, err error) {
+func opAppGetGlobalStateImpl(cx *EvalContext, appIndex uint64, key []byte) (result stackValue, ok bool, err error) {
if cx.Ledger == nil {
err = fmt.Errorf("ledger not available")
return
@@ -2868,7 +3323,7 @@ func opAppGetGlobalStateImpl(cx *evalContext, appIndex uint64, key []byte) (resu
return
}
-func opAppGlobalGet(cx *evalContext) {
+func opAppGlobalGet(cx *EvalContext) {
last := len(cx.stack) - 1 // state key
key := cx.stack[last].Bytes
@@ -2882,7 +3337,7 @@ func opAppGlobalGet(cx *evalContext) {
cx.stack[last] = result
}
-func opAppGlobalGetEx(cx *evalContext) {
+func opAppGlobalGetEx(cx *EvalContext) {
last := len(cx.stack) - 1 // state key
prev := last - 1 // app
@@ -2903,7 +3358,7 @@ func opAppGlobalGetEx(cx *evalContext) {
cx.stack[last] = isOk
}
-func opAppLocalPut(cx *evalContext) {
+func opAppLocalPut(cx *EvalContext) {
last := len(cx.stack) - 1 // value
prev := last - 1 // state key
pprev := prev - 1 // account
@@ -2916,7 +3371,7 @@ func opAppLocalPut(cx *evalContext) {
return
}
- addr, accountIdx, err := accountReference(cx, cx.stack[pprev])
+ addr, accountIdx, err := cx.accountReference(cx.stack[pprev])
if err == nil {
err = cx.Ledger.SetLocal(addr, key, sv.toTealValue(), accountIdx)
}
@@ -2929,7 +3384,7 @@ func opAppLocalPut(cx *evalContext) {
cx.stack = cx.stack[:pprev]
}
-func opAppGlobalPut(cx *evalContext) {
+func opAppGlobalPut(cx *EvalContext) {
last := len(cx.stack) - 1 // value
prev := last - 1 // state key
@@ -2950,7 +3405,7 @@ func opAppGlobalPut(cx *evalContext) {
cx.stack = cx.stack[:prev]
}
-func opAppLocalDel(cx *evalContext) {
+func opAppLocalDel(cx *EvalContext) {
last := len(cx.stack) - 1 // key
prev := last - 1 // account
@@ -2961,7 +3416,7 @@ func opAppLocalDel(cx *evalContext) {
return
}
- addr, accountIdx, err := accountReference(cx, cx.stack[prev])
+ addr, accountIdx, err := cx.accountReference(cx.stack[prev])
if err == nil {
err = cx.Ledger.DelLocal(addr, key, accountIdx)
}
@@ -2973,7 +3428,7 @@ func opAppLocalDel(cx *evalContext) {
cx.stack = cx.stack[:prev]
}
-func opAppGlobalDel(cx *evalContext) {
+func opAppGlobalDel(cx *EvalContext) {
last := len(cx.stack) - 1 // key
key := string(cx.stack[last].Bytes)
@@ -2998,7 +3453,7 @@ func opAppGlobalDel(cx *evalContext) {
// often called an "index". But it was not a basics.AssetIndex or
// basics.ApplicationIndex.
-func appReference(cx *evalContext, ref uint64, foreign bool) (basics.AppIndex, error) {
+func appReference(cx *EvalContext, ref uint64, foreign bool) (basics.AppIndex, error) {
if cx.version >= directRefEnabledVersion {
if ref == 0 {
return cx.Ledger.ApplicationID(), nil
@@ -3038,7 +3493,7 @@ func appReference(cx *evalContext, ref uint64, foreign bool) (basics.AppIndex, e
return basics.AppIndex(0), fmt.Errorf("invalid App reference %d", ref)
}
-func asaReference(cx *evalContext, ref uint64, foreign bool) (basics.AssetIndex, error) {
+func asaReference(cx *EvalContext, ref uint64, foreign bool) (basics.AssetIndex, error) {
if cx.version >= directRefEnabledVersion {
// In recent versions, accept either kind of ASA reference
if ref < uint64(len(cx.Txn.Txn.ForeignAssets)) {
@@ -3065,7 +3520,7 @@ func asaReference(cx *evalContext, ref uint64, foreign bool) (basics.AssetIndex,
}
-func opAssetHoldingGet(cx *evalContext) {
+func opAssetHoldingGet(cx *EvalContext) {
last := len(cx.stack) - 1 // asset
prev := last - 1 // account
@@ -3081,7 +3536,7 @@ func opAssetHoldingGet(cx *evalContext) {
return
}
- addr, _, err := accountReference(cx, cx.stack[prev])
+ addr, _, err := cx.accountReference(cx.stack[prev])
if err != nil {
cx.err = err
return
@@ -3109,7 +3564,7 @@ func opAssetHoldingGet(cx *evalContext) {
cx.stack[last].Uint = exist
}
-func opAssetParamsGet(cx *evalContext) {
+func opAssetParamsGet(cx *EvalContext) {
last := len(cx.stack) - 1 // asset
if cx.Ledger == nil {
@@ -3146,7 +3601,7 @@ func opAssetParamsGet(cx *evalContext) {
cx.stack = append(cx.stack, stackValue{Uint: exist})
}
-func opAppParamsGet(cx *evalContext) {
+func opAppParamsGet(cx *EvalContext) {
last := len(cx.stack) - 1 // app
if cx.Ledger == nil {
@@ -3172,7 +3627,16 @@ func opAppParamsGet(cx *evalContext) {
if params, creator, err := cx.Ledger.AppParams(app); err == nil {
// params exist, read the value
exist = 1
- value, err = cx.appParamsToValue(&params, creator, fs)
+
+ switch fs.field {
+ case AppCreator:
+ value.Bytes = creator[:]
+ case AppAddress:
+ address := app.Address()
+ value.Bytes = address[:]
+ default:
+ value, err = cx.appParamsToValue(&params, fs)
+ }
if err != nil {
cx.err = err
return
@@ -3183,25 +3647,294 @@ func opAppParamsGet(cx *evalContext) {
cx.stack = append(cx.stack, stackValue{Uint: exist})
}
-func opLog(cx *evalContext) {
+func opLog(cx *EvalContext) {
last := len(cx.stack) - 1
- if cx.logCalls == MaxLogCalls {
+ if len(cx.Logs) == MaxLogCalls {
cx.err = fmt.Errorf("too many log calls in program. up to %d is allowed", MaxLogCalls)
return
}
- cx.logCalls++
log := cx.stack[last]
cx.logSize += len(log.Bytes)
if cx.logSize > MaxLogSize {
cx.err = fmt.Errorf("program logs too large. %d bytes > %d bytes limit", cx.logSize, MaxLogSize)
return
}
- // write log to applyData
- err := cx.Ledger.AppendLog(&cx.Txn.Txn, string(log.Bytes))
+ cx.Logs = append(cx.Logs, string(log.Bytes))
+ cx.stack = cx.stack[:last]
+}
+
+func authorizedSender(cx *EvalContext, addr basics.Address) bool {
+ appAddr, err := cx.getApplicationAddress()
+ if err != nil {
+ return false
+ }
+ authorizer, err := cx.Ledger.Authorizer(addr)
+ if err != nil {
+ return false
+ }
+ return appAddr == authorizer
+}
+
+func opTxBegin(cx *EvalContext) {
+ if cx.subtxn != nil {
+ cx.err = errors.New("itxn_begin without itxn_submit")
+ return
+ }
+ // Start fresh
+ cx.subtxn = &transactions.SignedTxn{}
+ // Fill in defaults.
+ addr, err := cx.getApplicationAddress()
if err != nil {
cx.err = err
return
}
- cx.stack = cx.stack[:last]
+
+ fee := cx.Proto.MinTxnFee
+ if cx.FeeCredit != nil {
+ // Use credit to shrink the fee, but don't change FeeCredit
+ // here, because they might never itxn_submit, or they might
+ // change the fee. Do it in itxn_submit.
+ fee = basics.SubSaturate(fee, *cx.FeeCredit)
+ }
+ cx.subtxn.Txn.Header = transactions.Header{
+ Sender: addr, // Default, to simplify usage
+ Fee: basics.MicroAlgos{Raw: fee},
+ FirstValid: cx.Txn.Txn.FirstValid,
+ LastValid: cx.Txn.Txn.LastValid,
+ }
+}
+
+// availableAccount is used instead of accountReference for more recent opcodes
+// that don't need (or want!) to allow low numbers to represent the account at
+// that index in Accounts array.
+func (cx *EvalContext) availableAccount(sv stackValue) (basics.Address, error) {
+ if sv.argType() != StackBytes || len(sv.Bytes) != crypto.DigestSize {
+ return basics.Address{}, fmt.Errorf("not an address")
+ }
+
+ addr, _, err := cx.accountReference(sv)
+ return addr, err
+}
+
+// availableAsset is used instead of asaReference for more recent opcodes that
+// don't need (or want!) to allow low numbers to represent the asset at that
+// index in ForeignAssets array.
+func (cx *EvalContext) availableAsset(sv stackValue) (basics.AssetIndex, error) {
+ aid, err := sv.uint()
+ if err != nil {
+ return basics.AssetIndex(0), err
+ }
+ // Ensure that aid is in Foreign Assets
+ for _, assetID := range cx.Txn.Txn.ForeignAssets {
+ if assetID == basics.AssetIndex(aid) {
+ return basics.AssetIndex(aid), nil
+ }
+ }
+ return basics.AssetIndex(0), fmt.Errorf("invalid Asset reference %d", aid)
+}
+
+func (cx *EvalContext) stackIntoTxnField(sv stackValue, fs txnFieldSpec, txn *transactions.Transaction) (err error) {
+ switch fs.field {
+ case Type:
+ if sv.Bytes == nil {
+ err = fmt.Errorf("Type arg not a byte array")
+ return
+ }
+ txType, ok := innerTxnTypes[string(sv.Bytes)]
+ if ok {
+ txn.Type = txType
+ } else {
+ err = fmt.Errorf("%s is not a valid Type for itxn_field", sv.Bytes)
+ }
+ case TypeEnum:
+ var i uint64
+ i, err = sv.uint()
+ if err != nil {
+ return
+ }
+ // i != 0 is so that the error reports 0 instead of Unknown
+ if i != 0 && i < uint64(len(TxnTypeNames)) {
+ txType, ok := innerTxnTypes[TxnTypeNames[i]]
+ if ok {
+ txn.Type = txType
+ } else {
+ err = fmt.Errorf("%s is not a valid Type for itxn_field", TxnTypeNames[i])
+ }
+ } else {
+ err = fmt.Errorf("%d is not a valid TypeEnum", i)
+ }
+ case Sender:
+ txn.Sender, err = cx.availableAccount(sv)
+ case Fee:
+ txn.Fee.Raw, err = sv.uint()
+ // FirstValid, LastValid unsettable: no motivation
+ // Note unsettable: would be strange, as this "Note" would not end up "chain-visible"
+ // GenesisID, GenesisHash unsettable: surely makes no sense
+ // Group unsettable: Can't make groups from AVM (yet?)
+ // Lease unsettable: This seems potentially useful.
+ // RekeyTo unsettable: Feels dangerous for first release.
+
+ // KeyReg not allowed yet, so no fields settable
+
+ // Payment
+ case Receiver:
+ txn.Receiver, err = cx.availableAccount(sv)
+ case Amount:
+ txn.Amount.Raw, err = sv.uint()
+ case CloseRemainderTo:
+ txn.CloseRemainderTo, err = cx.availableAccount(sv)
+ // AssetTransfer
+ case XferAsset:
+ txn.XferAsset, err = cx.availableAsset(sv)
+ case AssetAmount:
+ txn.AssetAmount, err = sv.uint()
+ case AssetSender:
+ txn.AssetSender, err = cx.availableAccount(sv)
+ case AssetReceiver:
+ txn.AssetReceiver, err = cx.availableAccount(sv)
+ case AssetCloseTo:
+ txn.AssetCloseTo, err = cx.availableAccount(sv)
+ // AssetConfig
+ case ConfigAsset:
+ txn.ConfigAsset, err = cx.availableAsset(sv)
+ case ConfigAssetTotal:
+ txn.AssetParams.Total, err = sv.uint()
+ case ConfigAssetDecimals:
+ var decimals uint64
+ decimals, err = sv.uint()
+ if err == nil {
+ if decimals > uint64(cx.Proto.MaxAssetDecimals) {
+ err = fmt.Errorf("too many decimals (%d)", decimals)
+ } else {
+ txn.AssetParams.Decimals = uint32(decimals)
+ }
+ }
+ case ConfigAssetDefaultFrozen:
+ txn.AssetParams.DefaultFrozen, err = sv.bool()
+ case ConfigAssetUnitName:
+ txn.AssetParams.UnitName, err = sv.string(cx.Proto.MaxAssetUnitNameBytes)
+ case ConfigAssetName:
+ txn.AssetParams.AssetName, err = sv.string(cx.Proto.MaxAssetNameBytes)
+ case ConfigAssetURL:
+ txn.AssetParams.URL, err = sv.string(cx.Proto.MaxAssetURLBytes)
+ case ConfigAssetMetadataHash:
+ if len(sv.Bytes) != 32 {
+ err = fmt.Errorf("ConfigAssetMetadataHash must be 32 bytes")
+ } else {
+ copy(txn.AssetParams.MetadataHash[:], sv.Bytes)
+ }
+ case ConfigAssetManager:
+ txn.AssetParams.Manager, err = sv.address()
+ case ConfigAssetReserve:
+ txn.AssetParams.Reserve, err = sv.address()
+ case ConfigAssetFreeze:
+ txn.AssetParams.Freeze, err = sv.address()
+ case ConfigAssetClawback:
+ txn.AssetParams.Clawback, err = sv.address()
+ // Freeze
+ case FreezeAsset:
+ txn.FreezeAsset, err = cx.availableAsset(sv)
+ case FreezeAssetAccount:
+ txn.FreezeAccount, err = cx.availableAccount(sv)
+ case FreezeAssetFrozen:
+ txn.AssetFrozen, err = sv.bool()
+
+ // appl needs to wait. Can't call AVM from AVM.
+
+ default:
+ return fmt.Errorf("invalid itxn_field %s", fs.field)
+ }
+ return
+}
+
+func opTxField(cx *EvalContext) {
+ if cx.subtxn == nil {
+ cx.err = errors.New("itxn_field without itxn_begin")
+ return
+ }
+ last := len(cx.stack) - 1
+ field := TxnField(cx.program[cx.pc+1])
+ fs, ok := txnFieldSpecByField[field]
+ if !ok || fs.itxVersion == 0 || fs.itxVersion > cx.version {
+ cx.err = fmt.Errorf("invalid itxn_field field %d", field)
+ }
+ sv := cx.stack[last]
+ cx.err = cx.stackIntoTxnField(sv, fs, &cx.subtxn.Txn)
+ cx.stack = cx.stack[:last] // pop
+}
+
+func opTxSubmit(cx *EvalContext) {
+ if cx.Ledger == nil {
+ cx.err = fmt.Errorf("ledger not available")
+ return
+ }
+
+ if cx.subtxn == nil {
+ cx.err = errors.New("itxn_submit without itxn_begin")
+ return
+ }
+
+ if len(cx.InnerTxns) >= cx.Proto.MaxInnerTransactions {
+ cx.err = errors.New("itxn_submit with MaxInnerTransactions")
+ return
+ }
+
+ // Error out on anything unusual. Allow pay, axfer.
+ switch cx.subtxn.Txn.Type {
+ case protocol.PaymentTx, protocol.AssetTransferTx, protocol.AssetConfigTx, protocol.AssetFreezeTx:
+ // only pay, axfer, acfg, afrz for now
+ default:
+ cx.err = fmt.Errorf("Invalid inner transaction type %#v", cx.subtxn.Txn.Type)
+ return
+ }
+
+ // The goal is to follow the same invariants used by the
+ // transaction pool. Namely that any transaction that makes it
+ // to Perform (which is equivalent to eval.applyTransaction)
+ // is authorized, and WellFormed.
+ if !authorizedSender(cx, cx.subtxn.Txn.Sender) {
+ cx.err = fmt.Errorf("unauthorized")
+ return
+ }
+
+ // Recall that WellFormed does not care about individual
+ // transaction fees because of fee pooling. So we check below.
+ cx.err = cx.subtxn.Txn.WellFormed(*cx.Specials, *cx.Proto)
+ if cx.err != nil {
+ return
+ }
+
+ paid := cx.subtxn.Txn.Fee.Raw
+ if paid >= cx.Proto.MinTxnFee {
+ // Over paying - accumulate into FeeCredit
+ overpaid := paid - cx.Proto.MinTxnFee
+ if cx.FeeCredit == nil {
+ cx.FeeCredit = new(uint64)
+ }
+ *cx.FeeCredit = basics.AddSaturate(*cx.FeeCredit, overpaid)
+ } else {
+ underpaid := cx.Proto.MinTxnFee - paid
+ // Try to pay with FeeCredit, else fail.
+ if cx.FeeCredit != nil && *cx.FeeCredit >= underpaid {
+ *cx.FeeCredit -= underpaid
+ } else {
+ // We allow changing the fee. One pattern might be for an
+ // app to unilaterally set its Fee to 0. The idea would be
+ // that other transactions were supposed to overpay.
+ cx.err = fmt.Errorf("fee too small")
+ return
+ }
+ }
+
+ ad, err := cx.Ledger.Perform(&cx.subtxn.Txn, *cx.Specials)
+ if err != nil {
+ cx.err = err
+ return
+ }
+ cx.InnerTxns = append(cx.InnerTxns, transactions.SignedTxnWithAD{
+ SignedTxn: *cx.subtxn,
+ ApplyData: ad,
+ })
+ cx.subtxn = nil
}
diff --git a/data/transactions/logic/evalAppTxn_test.go b/data/transactions/logic/evalAppTxn_test.go
new file mode 100644
index 000000000..693e1e82e
--- /dev/null
+++ b/data/transactions/logic/evalAppTxn_test.go
@@ -0,0 +1,436 @@
+// Copyright (C) 2019-2021 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
+
+package logic
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/algorand/go-algorand/data/basics"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestActionTypes(t *testing.T) {
+ ep, ledger := makeSampleEnv()
+ testApp(t, "itxn_submit; int 1;", ep, "itxn_submit without itxn_begin")
+ testApp(t, "int pay; itxn_field TypeEnum; itxn_submit; int 1;", ep, "itxn_field without itxn_begin")
+ testApp(t, "itxn_begin; itxn_submit; int 1;", ep, "Invalid inner transaction type")
+ // bad type
+ testApp(t, "itxn_begin; byte \"pya\"; itxn_field Type; itxn_submit; int 1;", ep, "pya is not a valid Type")
+ // mixed up the int form for the byte form
+ testApp(t, obfuscate("itxn_begin; int pay; itxn_field Type; itxn_submit; int 1;"), ep, "Type arg not a byte array")
+ // or vice versa
+ testApp(t, obfuscate("itxn_begin; byte \"pay\"; itxn_field TypeEnum; itxn_submit; int 1;"), ep, "not a uint64")
+
+ // good types, not alllowed yet
+ testApp(t, "itxn_begin; byte \"keyreg\"; itxn_field Type; itxn_submit; int 1;", ep, "keyreg is not a valid Type for itxn_field")
+ testApp(t, "itxn_begin; byte \"appl\"; itxn_field Type; itxn_submit; int 1;", ep, "appl is not a valid Type for itxn_field")
+ // same, as enums
+ testApp(t, "itxn_begin; int keyreg; itxn_field TypeEnum; itxn_submit; int 1;", ep, "keyreg is not a valid Type for itxn_field")
+ testApp(t, "itxn_begin; int appl; itxn_field TypeEnum; itxn_submit; int 1;", ep, "appl is not a valid Type for itxn_field")
+ testApp(t, "itxn_begin; int 42; itxn_field TypeEnum; itxn_submit; int 1;", ep, "42 is not a valid TypeEnum")
+ testApp(t, "itxn_begin; int 0; itxn_field TypeEnum; itxn_submit; int 1;", ep, "0 is not a valid TypeEnum")
+
+ // "insufficient balance" because app account is charged fee
+ // (defaults make these 0 pay|axfer to zero address, from app account)
+ testApp(t, "itxn_begin; byte \"pay\"; itxn_field Type; itxn_submit; int 1;", ep, "insufficient balance")
+ testApp(t, "itxn_begin; byte \"axfer\"; itxn_field Type; itxn_submit; int 1;", ep, "insufficient balance")
+ testApp(t, "itxn_begin; int pay; itxn_field TypeEnum; itxn_submit; int 1;", ep, "insufficient balance")
+ testApp(t, "itxn_begin; int axfer; itxn_field TypeEnum; itxn_submit; int 1;", ep, "insufficient balance")
+
+ testApp(t, "itxn_begin; byte \"acfg\"; itxn_field Type; itxn_submit; int 1;", ep, "insufficient balance")
+ testApp(t, "itxn_begin; byte \"afrz\"; itxn_field Type; itxn_submit; int 1;", ep, "insufficient balance")
+ testApp(t, "itxn_begin; int acfg; itxn_field TypeEnum; itxn_submit; int 1;", ep, "insufficient balance")
+ testApp(t, "itxn_begin; int afrz; itxn_field TypeEnum; itxn_submit; int 1;", ep, "insufficient balance")
+
+ // Establish 888 as the app id, and fund it.
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ ledger.NewAccount(basics.AppIndex(888).Address(), 200000)
+
+ testApp(t, "itxn_begin; byte \"pay\"; itxn_field Type; itxn_submit; int 1;", ep)
+ testApp(t, "itxn_begin; int pay; itxn_field TypeEnum; itxn_submit; int 1;", ep)
+ // Can't submit because we haven't finished setup, but type passes itxn_field
+ testApp(t, "itxn_begin; byte \"axfer\"; itxn_field Type; int 1;", ep)
+ testApp(t, "itxn_begin; int axfer; itxn_field TypeEnum; int 1;", ep)
+ testApp(t, "itxn_begin; byte \"acfg\"; itxn_field Type; int 1;", ep)
+ testApp(t, "itxn_begin; int acfg; itxn_field TypeEnum; int 1;", ep)
+ testApp(t, "itxn_begin; byte \"afrz\"; itxn_field Type; int 1;", ep)
+ testApp(t, "itxn_begin; int afrz; itxn_field TypeEnum; int 1;", ep)
+}
+
+func TestFieldTypes(t *testing.T) {
+ ep, _ := makeSampleEnv()
+ testApp(t, "itxn_begin; byte \"pay\"; itxn_field Sender;", ep, "not an address")
+ testApp(t, obfuscate("itxn_begin; int 7; itxn_field Receiver;"), ep, "not an address")
+ testApp(t, "itxn_begin; byte \"\"; itxn_field CloseRemainderTo;", ep, "not an address")
+ testApp(t, "itxn_begin; byte \"\"; itxn_field AssetSender;", ep, "not an address")
+ // can't really tell if it's an addres, so 32 bytes gets further
+ testApp(t, "itxn_begin; byte \"01234567890123456789012345678901\"; itxn_field AssetReceiver;",
+ ep, "invalid Account reference")
+ // but a b32 string rep is not an account
+ testApp(t, "itxn_begin; byte \"GAYTEMZUGU3DOOBZGAYTEMZUGU3DOOBZGAYTEMZUGU3DOOBZGAYZIZD42E\"; itxn_field AssetCloseTo;",
+ ep, "not an address")
+
+ testApp(t, obfuscate("itxn_begin; byte \"pay\"; itxn_field Fee;"), ep, "not a uint64")
+ testApp(t, obfuscate("itxn_begin; byte 0x01; itxn_field Amount;"), ep, "not a uint64")
+ testApp(t, obfuscate("itxn_begin; byte 0x01; itxn_field XferAsset;"), ep, "not a uint64")
+ testApp(t, obfuscate("itxn_begin; byte 0x01; itxn_field AssetAmount;"), ep, "not a uint64")
+
+}
+
+func TestAppPay(t *testing.T) {
+ pay := `
+ itxn_begin
+ itxn_field Amount
+ itxn_field Receiver
+ itxn_field Sender
+ int pay
+ itxn_field TypeEnum
+ itxn_submit
+ int 1
+`
+
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ testApp(t, "txn Sender; balance; int 0; ==;", ep)
+ testApp(t, "txn Sender; txn Accounts 1; int 100"+pay, ep, "unauthorized")
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100"+pay, ep,
+ "insufficient balance")
+ ledger.NewAccount(ledger.ApplicationID().Address(), 1000000)
+
+ // You might expect this to fail because of min balance issue
+ // (receiving account only gets 100 microalgos). It does not fail at
+ // this level, instead, we must be certain that the existing min
+ // balance check in eval.transaction() properly notices and fails
+ // the transaction later. This fits with the model that we check
+ // min balances once at the end of each "top-level" transaction.
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100"+pay, ep)
+
+ // 100 of 1000000 spent, plus MinTxnFee in our fake protocol is 1001
+ testApp(t, "global CurrentApplicationAddress; balance; int 998899; ==", ep)
+ testApp(t, "txn Receiver; balance; int 100; ==", ep)
+
+ close := `
+ itxn_begin
+ int pay; itxn_field TypeEnum
+ txn Receiver; itxn_field CloseRemainderTo
+ itxn_submit
+ int 1
+`
+ testApp(t, close, ep)
+ testApp(t, "global CurrentApplicationAddress; balance; !", ep)
+ // Receiver got most of the algos (except 1001 for fee)
+ testApp(t, "txn Receiver; balance; int 997998; ==", ep)
+}
+
+func TestAppAssetOptIn(t *testing.T) {
+ ep, ledger := makeSampleEnv()
+ // Establish 888 as the app id, and fund it.
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ ledger.NewAccount(basics.AppIndex(888).Address(), 200000)
+
+ axfer := `
+itxn_begin
+int axfer; itxn_field TypeEnum;
+int 25; itxn_field XferAsset;
+int 2; itxn_field AssetAmount;
+txn Sender; itxn_field AssetReceiver;
+itxn_submit
+int 1
+`
+ testApp(t, axfer, ep, "invalid Asset reference")
+ ep.Txn.Txn.ForeignAssets = append(ep.Txn.Txn.ForeignAssets, 25)
+ testApp(t, axfer, ep, "not opted in") // app account not opted in
+ optin := `
+itxn_begin
+int axfer; itxn_field TypeEnum;
+int 25; itxn_field XferAsset;
+int 0; itxn_field AssetAmount;
+global CurrentApplicationAddress; itxn_field AssetReceiver;
+itxn_submit
+int 1
+`
+ testApp(t, optin, ep, "does not exist")
+ // Asset 25
+ ledger.NewAsset(ep.Txn.Txn.Sender, 25, basics.AssetParams{
+ Total: 10,
+ UnitName: "x",
+ AssetName: "Cross",
+ })
+ testApp(t, optin, ep)
+
+ testApp(t, axfer, ep, "insufficient balance") // opted in, but balance=0
+
+ // Fund the app account with the asset
+ ledger.NewHolding(basics.AppIndex(888).Address(), 25, 5, false)
+ testApp(t, axfer, ep)
+ testApp(t, axfer, ep)
+ testApp(t, axfer, ep, "insufficient balance") // balance = 1, tried to move 2)
+ testApp(t, "global CurrentApplicationAddress; int 25; asset_holding_get AssetBalance; assert; int 1; ==", ep)
+
+ close := `
+itxn_begin
+int axfer; itxn_field TypeEnum;
+int 25; itxn_field XferAsset;
+int 0; itxn_field AssetAmount;
+txn Sender; itxn_field AssetReceiver;
+txn Sender; itxn_field AssetCloseTo;
+itxn_submit
+int 1
+`
+ testApp(t, close, ep)
+ testApp(t, "global CurrentApplicationAddress; int 25; asset_holding_get AssetBalance; !; assert; !", ep)
+}
+
+func TestRekeyPay(t *testing.T) {
+ pay := `
+ itxn_begin
+ itxn_field Amount
+ itxn_field Receiver
+ itxn_field Sender
+ int pay
+ itxn_field TypeEnum
+ itxn_submit
+`
+
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ testApp(t, "txn Sender; balance; int 0; ==;", ep)
+ testApp(t, "txn Sender; txn Accounts 1; int 100"+pay, ep, "unauthorized")
+ ledger.NewAccount(ep.Txn.Txn.Sender, 120+ep.Proto.MinTxnFee)
+ ledger.Rekey(ep.Txn.Txn.Sender, basics.AppIndex(888).Address())
+ testApp(t, "txn Sender; txn Accounts 1; int 100"+pay+"; int 1", ep)
+ // Note that the Sender would fail min balance check if we did it here.
+ // It seems proper to wait until end of txn though.
+ // See explanation in logicLedger's Perform()
+}
+
+func TestDefaultSender(t *testing.T) {
+ pay := `
+ itxn_begin
+ itxn_field Amount
+ itxn_field Receiver
+ int pay
+ itxn_field TypeEnum
+ itxn_submit
+`
+
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ ep.Txn.Txn.Accounts = append(ep.Txn.Txn.Accounts, ledger.ApplicationID().Address())
+ testApp(t, "txn Accounts 1; int 100"+pay, ep, "insufficient balance")
+ ledger.NewAccount(ledger.ApplicationID().Address(), 1000000)
+ testApp(t, "txn Accounts 1; int 100"+pay+"int 1", ep)
+ testApp(t, "global CurrentApplicationAddress; balance; int 998899; ==", ep)
+}
+
+func TestAppAxfer(t *testing.T) {
+ axfer := `
+ itxn_begin
+ int 77
+ itxn_field XferAsset
+ itxn_field AssetAmount
+ itxn_field AssetReceiver
+ itxn_field Sender
+ int axfer
+ itxn_field TypeEnum
+ itxn_submit
+`
+
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ ledger.NewAsset(ep.Txn.Txn.Receiver, 777, basics.AssetParams{}) // not in foreign-assets of sample
+ ledger.NewAsset(ep.Txn.Txn.Receiver, 77, basics.AssetParams{}) // in foreign-assets of sample
+ testApp(t, "txn Sender; int 777; asset_holding_get AssetBalance; assert; int 0; ==;", ep,
+ "invalid Asset reference") // 777 not in foreign-assets
+ testApp(t, "txn Sender; int 77; asset_holding_get AssetBalance; assert; int 0; ==;", ep,
+ "assert failed") // because Sender not opted-in
+ testApp(t, "global CurrentApplicationAddress; int 77; asset_holding_get AssetBalance; assert; int 0; ==;", ep,
+ "assert failed") // app account not opted in
+
+ ledger.NewAccount(ledger.ApplicationID().Address(), 10000) // plenty for fees
+ ledger.NewHolding(ledger.ApplicationID().Address(), 77, 3000, false)
+ testApp(t, "global CurrentApplicationAddress; int 77; asset_holding_get AssetBalance; assert; int 3000; ==;", ep)
+
+ testApp(t, "txn Sender; txn Accounts 1; int 100"+axfer, ep, "unauthorized")
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 0; int 100"+axfer, ep,
+ fmt.Sprintf("Receiver (%s) not opted in", ep.Txn.Txn.Sender)) // txn.Sender (receiver of the axfer) isn't opted in
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100000"+axfer, ep,
+ "insufficient balance")
+
+ // Temporarily remove from ForeignAssets to ensure App Account
+ // doesn't get some sort of free pass to send arbitrary assets.
+ save := ep.Txn.Txn.ForeignAssets
+ ep.Txn.Txn.ForeignAssets = []basics.AssetIndex{6, 10}
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100000"+axfer, ep,
+ "invalid Asset reference 77")
+ ep.Txn.Txn.ForeignAssets = save
+
+ noid := `
+ itxn_begin
+ itxn_field AssetAmount
+ itxn_field AssetReceiver
+ itxn_field Sender
+ int axfer
+ itxn_field TypeEnum
+ itxn_submit
+`
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100"+noid+"int 1", ep,
+ fmt.Sprintf("Sender (%s) not opted in to 0", ledger.ApplicationID().Address()))
+
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100"+axfer+"int 1", ep)
+
+ // 100 of 3000 spent
+ testApp(t, "global CurrentApplicationAddress; int 77; asset_holding_get AssetBalance; assert; int 2900; ==", ep)
+ testApp(t, "txn Accounts 1; int 77; asset_holding_get AssetBalance; assert; int 100; ==", ep)
+}
+
+func TestExtraFields(t *testing.T) {
+ pay := `
+ itxn_begin
+ int 7; itxn_field AssetAmount;
+ itxn_field Amount
+ itxn_field Receiver
+ itxn_field Sender
+ int pay
+ itxn_field TypeEnum
+ itxn_submit
+`
+
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ testApp(t, "txn Sender; balance; int 0; ==;", ep)
+ testApp(t, "txn Sender; txn Accounts 1; int 100"+pay, ep, "unauthorized")
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100"+pay, ep,
+ "non-zero fields for type axfer")
+}
+
+func TestBadField(t *testing.T) {
+ pay := `
+ itxn_begin
+ int 7; itxn_field AssetAmount;
+ itxn_field Amount
+ itxn_field Receiver
+ itxn_field Sender
+ int pay
+ itxn_field TypeEnum
+ txn Receiver
+ itxn_field RekeyTo // NOT ALLOWED
+ itxn_submit
+`
+
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ testApp(t, "global CurrentApplicationAddress; txn Accounts 1; int 100"+pay, ep,
+ "invalid itxn_field RekeyTo")
+}
+
+func TestNumInner(t *testing.T) {
+ pay := `
+ itxn_begin
+ int 1
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Receiver
+ int pay
+ itxn_field TypeEnum
+ itxn_submit
+`
+
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ ledger.NewAccount(ledger.ApplicationID().Address(), 1000000)
+ testApp(t, pay+";int 1", ep)
+ testApp(t, pay+pay+";int 1", ep)
+ testApp(t, pay+pay+pay+";int 1", ep)
+ testApp(t, pay+pay+pay+pay+";int 1", ep)
+ // In the sample proto, MaxInnerTransactions = 4
+ testApp(t, pay+pay+pay+pay+pay+";int 1", ep, "itxn_submit with MaxInnerTransactions")
+}
+
+func TestAssetCreate(t *testing.T) {
+ create := `
+ itxn_begin
+ int acfg
+ itxn_field TypeEnum
+ int 1000000
+ itxn_field ConfigAssetTotal
+ int 3
+ itxn_field ConfigAssetDecimals
+ byte "oz"
+ itxn_field ConfigAssetUnitName
+ byte "Gold"
+ itxn_field ConfigAssetName
+ byte "https://gold.rush/"
+ itxn_field ConfigAssetURL
+ itxn_submit
+ int 1
+`
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ testApp(t, create, ep, "insufficient balance")
+ // Give it enough for fee. Recall that we don't check min balance at this level.
+ ledger.NewAccount(ledger.ApplicationID().Address(), defaultEvalProto().MinTxnFee)
+ testApp(t, create, ep)
+}
+
+func TestAssetFreeze(t *testing.T) {
+ create := `
+ itxn_begin
+ int acfg ; itxn_field TypeEnum
+ int 1000000 ; itxn_field ConfigAssetTotal
+ int 3 ; itxn_field ConfigAssetDecimals
+ byte "oz" ; itxn_field ConfigAssetUnitName
+ byte "Gold" ; itxn_field ConfigAssetName
+ byte "https://gold.rush/" ; itxn_field ConfigAssetURL
+ global CurrentApplicationAddress ; itxn_field ConfigAssetFreeze;
+ itxn_submit
+ itxn CreatedAssetID
+ int 889
+ ==
+`
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ // Give it enough for fees. Recall that we don't check min balance at this level.
+ ledger.NewAccount(ledger.ApplicationID().Address(), 12*defaultEvalProto().MinTxnFee)
+ testApp(t, create, ep)
+
+ freeze := `
+ itxn_begin
+ int afrz ; itxn_field TypeEnum
+ int 889 ; itxn_field FreezeAsset
+ txn ApplicationArgs 0; btoi ; itxn_field FreezeAssetFrozen
+ txn Accounts 1 ; itxn_field FreezeAssetAccount
+ itxn_submit
+ int 1
+`
+ testApp(t, freeze, ep, "invalid Asset reference")
+ ep.Txn.Txn.ForeignAssets = []basics.AssetIndex{basics.AssetIndex(889)}
+ ep.Txn.Txn.ApplicationArgs = [][]byte{{0x01}}
+ testApp(t, freeze, ep, "does not hold Asset")
+ ledger.NewHolding(ep.Txn.Txn.Receiver, 889, 55, false)
+ testApp(t, freeze, ep)
+ holding, err := ledger.AssetHolding(ep.Txn.Txn.Receiver, 889)
+ require.NoError(t, err)
+ require.Equal(t, true, holding.Frozen)
+ ep.Txn.Txn.ApplicationArgs = [][]byte{{0x00}}
+ testApp(t, freeze, ep)
+ holding, err = ledger.AssetHolding(ep.Txn.Txn.Receiver, 889)
+ require.NoError(t, err)
+ require.Equal(t, false, holding.Frozen)
+}
diff --git a/data/transactions/logic/evalCrypto_test.go b/data/transactions/logic/evalCrypto_test.go
new file mode 100644
index 000000000..25a89992a
--- /dev/null
+++ b/data/transactions/logic/evalCrypto_test.go
@@ -0,0 +1,541 @@
+// Copyright (C) 2019-2021 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
+
+package logic
+
+import (
+ "crypto/ecdsa"
+ "crypto/rand"
+ "crypto/sha256"
+ "crypto/sha512"
+ "encoding/hex"
+ "fmt"
+ "math/big"
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "github.com/algorand/go-algorand/crypto"
+ "github.com/algorand/go-algorand/crypto/secp256k1"
+ "github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/transactions"
+ "github.com/algorand/go-algorand/test/partitiontest"
+)
+
+func TestKeccak256(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ t.Parallel()
+ /*
+ pip install sha3
+ import sha3
+ blob=b'fnord'
+ sha3.keccak_256(blob).hexdigest()
+ */
+ progText := `byte 0x666E6F7264
+keccak256
+byte 0xc195eca25a6f4c82bfba0287082ddb0d602ae9230f9cf1f1a40b68f8e2c41567
+==`
+ testAccepts(t, progText, 1)
+}
+
+func TestSHA512_256(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ t.Parallel()
+ /*
+ pip cryptography
+ from cryptography.hazmat.backends import default_backend
+ from cryptography.hazmat.primitives import hashes
+ import base64
+ digest = hashes.Hash(hashes.SHA512_256(), backend=default_backend())
+ digest.update(b'fnord')
+ base64.b16encode(digest.finalize())
+ */
+ progText := `byte 0x666E6F7264
+sha512_256
+
+byte 0x98D2C31612EA500279B6753E5F6E780CA63EBA8274049664DAD66A2565ED1D2A
+==`
+ testAccepts(t, progText, 1)
+}
+
+func TestEd25519verify(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ t.Parallel()
+ var s crypto.Seed
+ crypto.RandBytes(s[:])
+ c := crypto.GenerateSignatureSecrets(s)
+ msg := "62fdfc072182654f163f5f0f9a621d729566c74d0aa413bf009c9800418c19cd"
+ data, err := hex.DecodeString(msg)
+ require.NoError(t, err)
+ pk := basics.Address(c.SignatureVerifier)
+ pkStr := pk.String()
+
+ for v := uint64(1); v <= AssemblerMaxVersion; v++ {
+ t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
+ ops, err := AssembleStringWithVersion(fmt.Sprintf(`arg 0
+arg 1
+addr %s
+ed25519verify`, pkStr), v)
+ require.NoError(t, err)
+ sig := c.Sign(Msg{
+ ProgramHash: crypto.HashObj(Program(ops.Program)),
+ Data: data[:],
+ })
+ var txn transactions.SignedTxn
+ txn.Lsig.Logic = ops.Program
+ txn.Lsig.Args = [][]byte{data[:], sig[:]}
+ sb := strings.Builder{}
+ pass, err := Eval(ops.Program, defaultEvalParams(&sb, &txn))
+ if !pass {
+ t.Log(hex.EncodeToString(ops.Program))
+ t.Log(sb.String())
+ }
+ require.True(t, pass)
+ require.NoError(t, err)
+
+ // short sig will fail
+ txn.Lsig.Args[1] = sig[1:]
+ pass, err = Eval(ops.Program, defaultEvalParams(nil, &txn))
+ require.False(t, pass)
+ require.Error(t, err)
+ isNotPanic(t, err)
+
+ // flip a bit and it should not pass
+ msg1 := "52fdfc072182654f163f5f0f9a621d729566c74d0aa413bf009c9800418c19cd"
+ data1, err := hex.DecodeString(msg1)
+ require.NoError(t, err)
+ txn.Lsig.Args = [][]byte{data1, sig[:]}
+ sb1 := strings.Builder{}
+ pass1, err := Eval(ops.Program, defaultEvalParams(&sb1, &txn))
+ require.False(t, pass1)
+ require.NoError(t, err)
+ isNotPanic(t, err)
+ })
+ }
+}
+
+// bitIntFillBytes is a replacement for big.Int.FillBytes from future Go
+func bitIntFillBytes(b *big.Int, buf []byte) []byte {
+ for i := range buf {
+ buf[i] = 0
+ }
+ bytes := b.Bytes()
+ if len(bytes) > len(buf) {
+ panic(fmt.Sprintf("bitIntFillBytes: has %d but got %d buffer", len(bytes), len(buf)))
+ }
+ copy(buf[len(buf)-len(bytes):], bytes)
+ return buf
+}
+
+func keyToByte(tb testing.TB, b *big.Int) []byte {
+ k := make([]byte, 32)
+ require.NotPanics(tb, func() {
+ k = bitIntFillBytes(b, k)
+ })
+ return k
+}
+
+func TestLeadingZeros(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ b := big.NewInt(0x100)
+ r, err := leadingZeros(1, b)
+ require.Error(t, err)
+ require.Nil(t, r)
+
+ b = big.NewInt(100)
+ r, err = leadingZeros(1, b)
+ require.NoError(t, err)
+ require.Equal(t, []byte{100}, r)
+
+ b = big.NewInt(100)
+ r, err = leadingZeros(2, b)
+ require.NoError(t, err)
+ require.Equal(t, []byte{0, 100}, r)
+
+ v32, err := hex.DecodeString("71a5910445820f57989c027bdf9391c80097874d249e0f38bf90834fdec2877f")
+ require.NoError(t, err)
+ b = new(big.Int).SetBytes(v32)
+ r, err = leadingZeros(32, b)
+ require.NoError(t, err)
+ require.Equal(t, v32, r)
+
+ v31 := v32[1:]
+ b = new(big.Int).SetBytes(v31)
+ r, err = leadingZeros(32, b)
+ require.NoError(t, err)
+ v31z := append([]byte{0}, v31...)
+ require.Equal(t, v31z, r)
+
+ require.Equal(t, v31z, keyToByte(t, b))
+}
+
+func TestEcdsa(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ key, err := ecdsa.GenerateKey(secp256k1.S256(), rand.Reader)
+ require.NoError(t, err)
+ pk := secp256k1.CompressPubkey(key.PublicKey.X, key.PublicKey.Y)
+ sk := keyToByte(t, key.D)
+ x := keyToByte(t, key.PublicKey.X)
+ y := keyToByte(t, key.PublicKey.Y)
+
+ // ecdsa decompress tests
+ source := `
+byte 0x%s
+ecdsa_pk_decompress Secp256k1
+store 0
+byte 0x%s
+==
+load 0
+byte 0x%s
+==
+&&`
+ pkTampered1 := make([]byte, len(pk))
+ copy(pkTampered1, pk)
+ pkTampered1[0] = 0
+ pkTampered2 := make([]byte, len(pk))
+ copy(pkTampered2, pk[1:])
+
+ var decompressTests = []struct {
+ key []byte
+ pass bool
+ }{
+ {pk, true},
+ {pkTampered1, false},
+ {pkTampered2, false},
+ }
+ for _, test := range decompressTests {
+ t.Run(fmt.Sprintf("decompress/pass=%v", test.pass), func(t *testing.T) {
+ src := fmt.Sprintf(source, hex.EncodeToString(test.key), hex.EncodeToString(x), hex.EncodeToString(y))
+ if test.pass {
+ testAccepts(t, src, 5)
+ } else {
+ testPanics(t, src, 5)
+ }
+ })
+ }
+
+ // ecdsa verify tests
+ source = `
+byte "%s"
+sha512_256
+byte 0x%s
+byte 0x%s
+byte 0x%s
+byte 0x%s
+ecdsa_verify Secp256k1
+`
+ data := []byte("testdata")
+ msg := sha512.Sum512_256(data)
+
+ sign, err := secp256k1.Sign(msg[:], sk)
+ require.NoError(t, err)
+ r := sign[:32]
+ s := sign[32:64]
+ v := int(sign[64])
+
+ rTampered := make([]byte, len(r))
+ copy(rTampered, pk)
+ rTampered[0] = 0
+
+ var verifyTests = []struct {
+ data string
+ r []byte
+ pass bool
+ }{
+ {"testdata", r, true},
+ {"testdata", rTampered, false},
+ {"testdata1", r, false},
+ }
+ for _, test := range verifyTests {
+ t.Run(fmt.Sprintf("verify/pass=%v", test.pass), func(t *testing.T) {
+ src := fmt.Sprintf(source, test.data, hex.EncodeToString(test.r), hex.EncodeToString(s), hex.EncodeToString(x), hex.EncodeToString(y))
+ if test.pass {
+ testAccepts(t, src, 5)
+ } else {
+ testRejects(t, src, 5)
+ }
+ })
+ }
+
+ // ecdsa recover tests
+ source = `
+byte 0x%s
+int %d
+byte 0x%s
+byte 0x%s
+ecdsa_pk_recover Secp256k1
+dup2
+store 0
+byte 0x%s
+==
+load 0
+byte 0x%s
+==
+&&
+store 1
+concat // X + Y
+byte 0x04
+swap
+concat // 0x04 + X + Y
+byte 0x%s
+==
+load 1
+&&`
+ var recoverTests = []struct {
+ v int
+ checker func(t *testing.T, program string, introduced uint64)
+ }{
+ {v, testAccepts},
+ {v ^ 1, testRejects},
+ {3, func(t *testing.T, program string, introduced uint64) {
+ testPanics(t, program, introduced)
+ }},
+ }
+ pkExpanded := secp256k1.S256().Marshal(key.PublicKey.X, key.PublicKey.Y)
+
+ for i, test := range recoverTests {
+ t.Run(fmt.Sprintf("recover/%d", i), func(t *testing.T) {
+ src := fmt.Sprintf(source, hex.EncodeToString(msg[:]), test.v, hex.EncodeToString(r), hex.EncodeToString(s), hex.EncodeToString(x), hex.EncodeToString(y), hex.EncodeToString(pkExpanded))
+ test.checker(t, src, 5)
+ })
+ }
+
+ // sample sequencing: decompress + verify
+ source = fmt.Sprintf(`#pragma version 5
+byte "testdata"
+sha512_256
+byte 0x%s
+byte 0x%s
+byte 0x%s
+ecdsa_pk_decompress Secp256k1
+ecdsa_verify Secp256k1`, hex.EncodeToString(r), hex.EncodeToString(s), hex.EncodeToString(pk))
+ ops := testProg(t, source, 5)
+ var txn transactions.SignedTxn
+ txn.Lsig.Logic = ops.Program
+ pass, err := Eval(ops.Program, defaultEvalParamsWithVersion(nil, &txn, 5))
+ require.NoError(t, err)
+ require.True(t, pass)
+}
+
+// test compatibility with ethereum signatures
+func TestEcdsaEthAddress(t *testing.T) {
+ /*
+ pip install eth-keys pycryptodome
+ from eth_keys import keys
+ pk = keys.PrivateKey(b"\xb2\\}\xb3\x1f\xee\xd9\x12''\xbf\t9\xdcv\x9a\x96VK-\xe4\xc4rm\x03[6\xec\xf1\xe5\xb3d")
+ msg=b"hello from ethereum"
+ print("msg: '{}'".format(msg.decode()))
+ signature = pk.sign_msg(msg)
+ print("v:", signature.v)
+ print("r:", signature.r.to_bytes(32, byteorder="big").hex())
+ print("s:", signature.s.to_bytes(32, byteorder="big").hex())
+ print("addr:", pk.public_key.to_address())
+ */
+ progText := `byte "hello from ethereum" // msg
+keccak256
+int 0 // v
+byte 0x745e8f55ac6189ee89ed707c36694868e3903988fbf776c8096c45da2e60c638 // r
+byte 0x30c8e4a9b5d2eb53ddc6294587dd00bed8afe2c45dd72f6b4cf752e46d5ba681 // s
+ecdsa_pk_recover Secp256k1
+concat // convert public key X and Y to ethereum addr
+keccak256
+substring 12 32
+byte 0x5ce9454909639d2d17a3f753ce7d93fa0b9ab12e // addr
+==`
+ testAccepts(t, progText, 5)
+}
+
+func BenchmarkHash(b *testing.B) {
+ for _, hash := range []string{"sha256", "keccak256", "sha512_256"} {
+ b.Run(hash+"-small", func(b *testing.B) { // hash 32 bytes
+ benchmarkOperation(b, "int 32; bzero", hash, "pop; int 1")
+ })
+ b.Run(hash+"-med", func(b *testing.B) { // hash 128 bytes
+ benchmarkOperation(b, "int 32; bzero",
+ "dup; concat; dup; concat;"+hash, "pop; int 1")
+ })
+ b.Run(hash+"-big", func(b *testing.B) { // hash 512 bytes
+ benchmarkOperation(b, "int 32; bzero",
+ "dup; concat; dup; concat; dup; concat; dup; concat;"+hash, "pop; int 1")
+ })
+ }
+}
+
+func BenchmarkSha256Raw(b *testing.B) {
+ addr, _ := basics.UnmarshalChecksumAddress("OC6IROKUJ7YCU5NV76AZJEDKYQG33V2CJ7HAPVQ4ENTAGMLIOINSQ6EKGE")
+ a := addr[:]
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ t := sha256.Sum256(a)
+ a = t[:]
+ }
+}
+
+func BenchmarkEd25519Verifyx1(b *testing.B) {
+ //benchmark setup
+ var data [][32]byte
+ var programs [][]byte
+ var signatures []crypto.Signature
+
+ for i := 0; i < b.N; i++ {
+ var buffer [32]byte //generate data to be signed
+ crypto.RandBytes(buffer[:])
+ data = append(data, buffer)
+
+ var s crypto.Seed //generate programs and signatures
+ crypto.RandBytes(s[:])
+ secret := crypto.GenerateSignatureSecrets(s)
+ pk := basics.Address(secret.SignatureVerifier)
+ pkStr := pk.String()
+ ops, err := AssembleStringWithVersion(fmt.Sprintf(`arg 0
+arg 1
+addr %s
+ed25519verify`, pkStr), AssemblerMaxVersion)
+ require.NoError(b, err)
+ programs = append(programs, ops.Program)
+ sig := secret.Sign(Msg{
+ ProgramHash: crypto.HashObj(Program(ops.Program)),
+ Data: buffer[:],
+ })
+ signatures = append(signatures, sig)
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ var txn transactions.SignedTxn
+ txn.Lsig.Logic = programs[i]
+ txn.Lsig.Args = [][]byte{data[i][:], signatures[i][:]}
+ sb := strings.Builder{}
+ ep := defaultEvalParams(&sb, &txn)
+ pass, err := Eval(programs[i], ep)
+ if !pass {
+ b.Log(hex.EncodeToString(programs[i]))
+ b.Log(sb.String())
+ }
+ if err != nil {
+ require.NoError(b, err)
+ }
+ if !pass {
+ require.True(b, pass)
+ }
+ }
+}
+
+type benchmarkEcdsaData struct {
+ x []byte
+ y []byte
+ pk []byte
+ msg [32]byte
+ r []byte
+ s []byte
+ v int
+ programs []byte
+}
+
+func benchmarkEcdsaGenData(b *testing.B) (data []benchmarkEcdsaData) {
+ data = make([]benchmarkEcdsaData, b.N)
+ for i := 0; i < b.N; i++ {
+ key, err := ecdsa.GenerateKey(secp256k1.S256(), rand.Reader)
+ require.NoError(b, err)
+ sk := keyToByte(b, key.D)
+ data[i].x = keyToByte(b, key.PublicKey.X)
+ data[i].y = keyToByte(b, key.PublicKey.Y)
+ data[i].pk = secp256k1.CompressPubkey(key.PublicKey.X, key.PublicKey.Y)
+
+ d := []byte("testdata")
+ data[i].msg = sha512.Sum512_256(d)
+
+ sign, err := secp256k1.Sign(data[i].msg[:], sk)
+ require.NoError(b, err)
+ data[i].r = sign[:32]
+ data[i].s = sign[32:64]
+ data[i].v = int(sign[64])
+ }
+ return data
+}
+
+func benchmarkEcdsa(b *testing.B, source string) {
+ data := benchmarkEcdsaGenData(b)
+ ops, err := AssembleStringWithVersion(source, 5)
+ require.NoError(b, err)
+ for i := 0; i < b.N; i++ {
+ data[i].programs = ops.Program
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ var txn transactions.SignedTxn
+ txn.Lsig.Logic = data[i].programs
+ txn.Lsig.Args = [][]byte{data[i].msg[:], data[i].r, data[i].s, data[i].x, data[i].y, data[i].pk, {uint8(data[i].v)}}
+ sb := strings.Builder{}
+ ep := defaultEvalParams(&sb, &txn)
+ pass, err := Eval(data[i].programs, ep)
+ if !pass {
+ b.Log(hex.EncodeToString(data[i].programs))
+ b.Log(sb.String())
+ }
+ if err != nil {
+ require.NoError(b, err)
+ }
+ if !pass {
+ require.True(b, pass)
+ }
+ }
+}
+
+func BenchmarkEcdsa(b *testing.B) {
+ b.Run("ecdsa_verify", func(b *testing.B) {
+ source := `#pragma version 5
+arg 0
+arg 1
+arg 2
+arg 3
+arg 4
+ecdsa_verify Secp256k1`
+ benchmarkEcdsa(b, source)
+ })
+ b.Run("ecdsa_pk_decompress", func(b *testing.B) {
+ source := `#pragma version 5
+arg 5
+ecdsa_pk_decompress Secp256k1
+pop
+pop
+int 1`
+ benchmarkEcdsa(b, source)
+ })
+
+ b.Run("ecdsa_pk_recover", func(b *testing.B) {
+ source := `#pragma version 5
+arg 0
+arg 6
+btoi
+arg 1
+arg 2
+ecdsa_pk_recover Secp256k1
+pop
+pop
+int 1`
+ benchmarkEcdsa(b, source)
+ })
+}
diff --git a/data/transactions/logic/evalStateful_test.go b/data/transactions/logic/evalStateful_test.go
index f782fcce9..f270bd541 100644
--- a/data/transactions/logic/evalStateful_test.go
+++ b/data/transactions/logic/evalStateful_test.go
@@ -19,50 +19,18 @@ package logic
import (
"encoding/hex"
"fmt"
- "math/rand"
"strings"
"testing"
"github.com/stretchr/testify/require"
- "github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
+ "github.com/algorand/go-algorand/data/transactions/logictest"
"github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/test/partitiontest"
)
-type balanceRecord struct {
- addr basics.Address
- balance uint64
- locals map[basics.AppIndex]basics.TealKeyValue
- holdings map[basics.AssetIndex]basics.AssetHolding
- mods map[basics.AppIndex]map[string]basics.ValueDelta
-}
-
-// In our test ledger, we don't store the creatables with their
-// creators, so we need to carry the creator around with them.
-type appParams struct {
- basics.AppParams
- Creator basics.Address
-}
-
-type asaParams struct {
- basics.AssetParams
- Creator basics.Address
-}
-
-type testLedger struct {
- balances map[basics.Address]balanceRecord
- applications map[basics.AppIndex]appParams
- assets map[basics.AssetIndex]asaParams
- trackedCreatables map[int]basics.CreatableIndex
- appID basics.AppIndex
- creatorAddr basics.Address
- mods map[basics.AppIndex]map[string]basics.ValueDelta
- logs []basics.LogItem
-}
-
func makeApp(li uint64, lb uint64, gi uint64, gb uint64) basics.AppParams {
return basics.AppParams{
ApprovalProgram: []byte{},
@@ -76,412 +44,24 @@ func makeApp(li uint64, lb uint64, gi uint64, gb uint64) basics.AppParams {
}
}
-func makeBalanceRecord(addr basics.Address, balance uint64) balanceRecord {
- br := balanceRecord{
- addr: addr,
- balance: balance,
- locals: make(map[basics.AppIndex]basics.TealKeyValue),
- holdings: make(map[basics.AssetIndex]basics.AssetHolding),
- mods: make(map[basics.AppIndex]map[string]basics.ValueDelta),
- }
- return br
+func makeSampleEnv() (EvalParams, *logictest.Ledger) {
+ return makeSampleEnvWithVersion(LogicVersion)
}
-func makeSampleEnv() (EvalParams, *testLedger) {
+func makeSampleEnvWithVersion(version uint64) (EvalParams, *logictest.Ledger) {
txn := makeSampleTxn()
- ep := defaultEvalParams(nil, &txn)
+ ep := defaultEvalParamsWithVersion(nil, &txn, version)
ep.TxnGroup = makeSampleTxnGroup(txn)
- ledger := makeTestLedger(map[basics.Address]uint64{})
+ ledger := logictest.MakeLedger(map[basics.Address]uint64{})
ep.Ledger = ledger
return ep, ledger
}
-func makeTestLedger(balances map[basics.Address]uint64) *testLedger {
- l := new(testLedger)
- l.balances = make(map[basics.Address]balanceRecord)
- for addr, balance := range balances {
- l.newAccount(addr, balance)
- }
- l.applications = make(map[basics.AppIndex]appParams)
- l.assets = make(map[basics.AssetIndex]asaParams)
- l.trackedCreatables = make(map[int]basics.CreatableIndex)
- l.mods = make(map[basics.AppIndex]map[string]basics.ValueDelta)
- return l
-}
-
-func (l *testLedger) reset() {
- l.mods = make(map[basics.AppIndex]map[string]basics.ValueDelta)
- for addr, br := range l.balances {
- br.mods = make(map[basics.AppIndex]map[string]basics.ValueDelta)
- l.balances[addr] = br
- }
-}
-
-func (l *testLedger) newAccount(addr basics.Address, balance uint64) {
- l.balances[addr] = makeBalanceRecord(addr, balance)
-}
-
-func (l *testLedger) newApp(creator basics.Address, appID basics.AppIndex, params basics.AppParams) {
- l.appID = appID
- params = params.Clone()
- if params.GlobalState == nil {
- params.GlobalState = make(basics.TealKeyValue)
- }
- l.applications[appID] = appParams{
- Creator: creator,
- AppParams: params.Clone(),
- }
- br, ok := l.balances[creator]
- if !ok {
- br = makeBalanceRecord(creator, 0)
- }
- br.locals[appID] = make(map[string]basics.TealValue)
- l.balances[creator] = br
-}
-
-func (l *testLedger) newAsset(creator basics.Address, assetID basics.AssetIndex, params basics.AssetParams) {
- l.assets[assetID] = asaParams{
- Creator: creator,
- AssetParams: params,
- }
- br, ok := l.balances[creator]
- if !ok {
- br = makeBalanceRecord(creator, 0)
- }
- br.holdings[assetID] = basics.AssetHolding{Amount: params.Total, Frozen: params.DefaultFrozen}
- l.balances[creator] = br
-}
-
-func (l *testLedger) setHolding(addr basics.Address, assetID uint64, amount uint64, frozen bool) {
- br, ok := l.balances[addr]
- if !ok {
- br = makeBalanceRecord(addr, 0)
- }
- br.holdings[basics.AssetIndex(assetID)] = basics.AssetHolding{Amount: amount, Frozen: frozen}
- l.balances[addr] = br
-}
-
-func (l *testLedger) Round() basics.Round {
- return basics.Round(rand.Uint32() + 1)
-}
-
-func (l *testLedger) LatestTimestamp() int64 {
- return int64(rand.Uint32() + 1)
-}
-
-func (l *testLedger) Balance(addr basics.Address) (amount basics.MicroAlgos, err error) {
- if l.balances == nil {
- err = fmt.Errorf("empty ledger")
- return
- }
- br, ok := l.balances[addr]
- if !ok {
- err = fmt.Errorf("no such address")
- return
- }
- return basics.MicroAlgos{Raw: br.balance}, nil
-}
-
-func (l *testLedger) MinBalance(addr basics.Address, proto *config.ConsensusParams) (amount basics.MicroAlgos, err error) {
- if l.balances == nil {
- err = fmt.Errorf("empty ledger")
- return
- }
- br, ok := l.balances[addr]
- if !ok {
- err = fmt.Errorf("no such address")
- return
- }
-
- var min uint64
-
- // First, base MinBalance
- min = proto.MinBalance
-
- // MinBalance for each Asset
- assetCost := basics.MulSaturate(proto.MinBalance, uint64(len(br.holdings)))
- min = basics.AddSaturate(min, assetCost)
-
- // Base MinBalance + GlobalStateSchema.MinBalance + ExtraProgramPages MinBalance for each created application
- for _, params := range l.applications {
- if params.Creator == addr {
- min = basics.AddSaturate(min, proto.AppFlatParamsMinBalance)
- min = basics.AddSaturate(min, params.GlobalStateSchema.MinBalance(proto).Raw)
- min = basics.AddSaturate(min, basics.MulSaturate(proto.AppFlatParamsMinBalance, uint64(params.ExtraProgramPages)))
- }
- }
-
- // Base MinBalance + LocalStateSchema.MinBalance for each opted in application
- for idx := range br.locals {
- min = basics.AddSaturate(min, proto.AppFlatParamsMinBalance)
- min = basics.AddSaturate(min, l.applications[idx].LocalStateSchema.MinBalance(proto).Raw)
- }
-
- return basics.MicroAlgos{Raw: min}, nil
-}
-
-func (l *testLedger) GetGlobal(appIdx basics.AppIndex, key string) (basics.TealValue, bool, error) {
- if appIdx == basics.AppIndex(0) {
- appIdx = l.appID
- }
- params, ok := l.applications[appIdx]
- if !ok {
- return basics.TealValue{}, false, fmt.Errorf("no such app")
- }
-
- // return most recent value if available
- tkvm, ok := l.mods[appIdx]
- if ok {
- val, ok := tkvm[key]
- if ok {
- tv, ok := val.ToTealValue()
- return tv, ok, nil
- }
- }
-
- // otherwise return original one
- val, ok := params.GlobalState[key]
- return val, ok, nil
-}
-
-func (l *testLedger) SetGlobal(key string, value basics.TealValue) error {
- appIdx := l.appID
- params, ok := l.applications[appIdx]
- if !ok {
- return fmt.Errorf("no such app")
- }
-
- // if writing the same value, return
- // this simulates real ledger behavior for tests
- val, ok := params.GlobalState[key]
- if ok && val == value {
- return nil
- }
-
- // write to deltas
- _, ok = l.mods[appIdx]
- if !ok {
- l.mods[appIdx] = make(map[string]basics.ValueDelta)
- }
- l.mods[appIdx][key] = value.ToValueDelta()
- return nil
-}
-
-func (l *testLedger) DelGlobal(key string) error {
- appIdx := l.appID
- params, ok := l.applications[appIdx]
- if !ok {
- return fmt.Errorf("no such app")
- }
-
- exist := false
- if _, ok := params.GlobalState[key]; ok {
- exist = true
- }
-
- _, ok = l.mods[appIdx]
- if !ok && !exist {
- // nothing to delete
- return nil
- }
- if !ok {
- l.mods[appIdx] = make(map[string]basics.ValueDelta)
- }
- _, ok = l.mods[appIdx][key]
- if ok || exist {
- l.mods[appIdx][key] = basics.ValueDelta{Action: basics.DeleteAction}
- }
- return nil
-}
-
-func (l *testLedger) GetLocal(addr basics.Address, appIdx basics.AppIndex, key string, accountIdx uint64) (basics.TealValue, bool, error) {
- if appIdx == 0 {
- appIdx = l.appID
- }
- br, ok := l.balances[addr]
- if !ok {
- return basics.TealValue{}, false, fmt.Errorf("no such address")
- }
- tkvd, ok := br.locals[appIdx]
- if !ok {
- return basics.TealValue{}, false, fmt.Errorf("no app for account")
- }
-
- // check deltas first
- tkvm, ok := br.mods[appIdx]
- if ok {
- val, ok := tkvm[key]
- if ok {
- tv, ok := val.ToTealValue()
- return tv, ok, nil
- }
- }
-
- val, ok := tkvd[key]
- return val, ok, nil
-}
-
-func (l *testLedger) SetLocal(addr basics.Address, key string, value basics.TealValue, accountIdx uint64) error {
- appIdx := l.appID
-
- br, ok := l.balances[addr]
- if !ok {
- return fmt.Errorf("no such address")
- }
- tkv, ok := br.locals[appIdx]
- if !ok {
- return fmt.Errorf("no app for account")
- }
-
- // if writing the same value, return
- // this simulates real ledger behavior for tests
- val, ok := tkv[key]
- if ok && val == value {
- return nil
- }
-
- // write to deltas
- _, ok = br.mods[appIdx]
- if !ok {
- br.mods[appIdx] = make(map[string]basics.ValueDelta)
- }
- br.mods[appIdx][key] = value.ToValueDelta()
- return nil
-}
-
-func (l *testLedger) DelLocal(addr basics.Address, key string, accountIdx uint64) error {
- appIdx := l.appID
-
- br, ok := l.balances[addr]
- if !ok {
- return fmt.Errorf("no such address")
- }
- tkv, ok := br.locals[appIdx]
- if !ok {
- return fmt.Errorf("no app for account")
- }
- exist := false
- if _, ok := tkv[key]; ok {
- exist = true
- }
-
- _, ok = br.mods[appIdx]
- if !ok && !exist {
- // nothing to delete
- return nil
- }
- if !ok {
- br.mods[appIdx] = make(map[string]basics.ValueDelta)
- }
- _, ok = br.mods[appIdx][key]
- if ok || exist {
- br.mods[appIdx][key] = basics.ValueDelta{Action: basics.DeleteAction}
- }
- return nil
-}
-
-func (l *testLedger) OptedIn(addr basics.Address, appIdx basics.AppIndex) (bool, error) {
- if appIdx == 0 {
- appIdx = l.appID
- }
- br, ok := l.balances[addr]
- if !ok {
- return false, fmt.Errorf("no such address")
- }
- _, ok = br.locals[appIdx]
- return ok, nil
-}
-
-func (l *testLedger) setTrackedCreatable(groupIdx int, cl basics.CreatableLocator) {
- l.trackedCreatables[groupIdx] = cl.Index
-}
-
-func (l *testLedger) GetCreatableID(groupIdx int) basics.CreatableIndex {
- return l.trackedCreatables[groupIdx]
-}
-
-func (l *testLedger) AssetHolding(addr basics.Address, assetID basics.AssetIndex) (basics.AssetHolding, error) {
- if br, ok := l.balances[addr]; ok {
- if asset, ok := br.holdings[assetID]; ok {
- return asset, nil
- }
- return basics.AssetHolding{}, fmt.Errorf("No asset for account")
- }
- return basics.AssetHolding{}, fmt.Errorf("no such address")
-}
-
-func (l *testLedger) AssetParams(assetID basics.AssetIndex) (basics.AssetParams, basics.Address, error) {
- if asset, ok := l.assets[assetID]; ok {
- return asset.AssetParams, asset.Creator, nil
- }
- return basics.AssetParams{}, basics.Address{}, fmt.Errorf("no such asset")
-}
-
-func (l *testLedger) AppParams(appID basics.AppIndex) (basics.AppParams, basics.Address, error) {
- if app, ok := l.applications[appID]; ok {
- return app.AppParams, app.Creator, nil
- }
- return basics.AppParams{}, basics.Address{}, fmt.Errorf("no such app")
-}
-
-func (l *testLedger) ApplicationID() basics.AppIndex {
- return l.appID
-}
-
-func (l *testLedger) CreatorAddress() basics.Address {
- return l.creatorAddr
-}
-
-func (l *testLedger) LocalSchema() basics.StateSchema {
- return basics.StateSchema{
- NumUint: 100,
- NumByteSlice: 100,
- }
-}
-
-func (l *testLedger) GlobalSchema() basics.StateSchema {
- return basics.StateSchema{
- NumUint: 100,
- NumByteSlice: 100,
- }
-}
-
-func (l *testLedger) GetDelta(txn *transactions.Transaction) (evalDelta basics.EvalDelta, err error) {
- if tkv, ok := l.mods[l.appID]; ok {
- evalDelta.GlobalDelta = tkv
- }
- if len(txn.Accounts) > 0 {
- accounts := make(map[basics.Address]int)
- accounts[txn.Sender] = 0
- for idx, addr := range txn.Accounts {
- accounts[addr] = idx + 1
- }
- evalDelta.LocalDeltas = make(map[uint64]basics.StateDelta)
- for addr, br := range l.balances {
- if idx, ok := accounts[addr]; ok {
- if delta, ok := br.mods[l.appID]; ok {
- evalDelta.LocalDeltas[uint64(idx)] = delta
- }
- }
- }
- }
- evalDelta.Logs = l.logs
- return
-}
-
-func (l *testLedger) AppendLog(txn *transactions.Transaction, value string) error {
-
- appIdx, err := txn.IndexByAppID(l.appID)
- if err != nil {
- return err
- }
- _, ok := l.applications[l.appID]
- if !ok {
- return fmt.Errorf("no such app")
- }
-
- l.logs = append(l.logs, basics.LogItem{ID: appIdx, Message: value})
- return nil
+func makeOldAndNewEnv(version uint64) (EvalParams, EvalParams, *logictest.Ledger) {
+ new, sharedLedger := makeSampleEnv()
+ old, _ := makeSampleEnvWithVersion(version)
+ old.Ledger = sharedLedger
+ return old, new, sharedLedger
}
func TestEvalModes(t *testing.T) {
@@ -651,14 +231,14 @@ log
Clawback: txn.Txn.Receiver,
}
algoValue := basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
)
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
- ledger.newAsset(txn.Txn.Sender, 5, params)
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
+ ledger.NewAsset(txn.Txn.Sender, 5, params)
for mode, test := range tests {
t.Run(fmt.Sprintf("opcodes_mode=%d", mode), func(t *testing.T) {
@@ -775,7 +355,7 @@ func TestBalance(t *testing.T) {
ep, ledger := makeSampleEnv()
text := "int 2; balance; int 177; =="
- ledger.newAccount(ep.Txn.Txn.Receiver, 177)
+ ledger.NewAccount(ep.Txn.Txn.Receiver, 177)
testApp(t, text, ep, "invalid Account reference")
text = `int 1; balance; int 177; ==`
@@ -787,17 +367,18 @@ func TestBalance(t *testing.T) {
// but legal after that
testApp(t, text, ep)
- text = "int 0; balance; int 13; =="
+ text = "int 0; balance; int 13; ==; assert; int 1"
var addr basics.Address
copy(addr[:], []byte("aoeuiaoeuiaoeuiaoeuiaoeuiaoeui02"))
- ledger.newAccount(addr, 13)
- testApp(t, text, ep, "failed to fetch balance")
+ ledger.NewAccount(addr, 13)
+ testApp(t, text, ep, "assert failed")
- ledger.newAccount(ep.Txn.Txn.Sender, 13)
+ ledger.NewAccount(ep.Txn.Txn.Sender, 13)
testApp(t, text, ep)
}
-func testApp(t *testing.T, program string, ep EvalParams, problems ...string) basics.EvalDelta {
+func testApp(t *testing.T, program string, ep EvalParams, problems ...string) transactions.EvalDelta {
+ t.Helper()
ops := testProg(t, program, ep.Proto.LogicSigVersion)
err := CheckStateful(ops.Program, ep)
require.NoError(t, err)
@@ -833,7 +414,7 @@ func testApp(t *testing.T, program string, ep EvalParams, problems ...string) ba
require.Empty(t, delta.Logs)
return delta
}
- return basics.EvalDelta{}
+ return transactions.EvalDelta{}
}
func TestMinBalance(t *testing.T) {
@@ -843,23 +424,23 @@ func TestMinBalance(t *testing.T) {
ep, ledger := makeSampleEnv()
- ledger.newAccount(ep.Txn.Txn.Sender, 234)
- ledger.newAccount(ep.Txn.Txn.Receiver, 123)
+ ledger.NewAccount(ep.Txn.Txn.Sender, 234)
+ ledger.NewAccount(ep.Txn.Txn.Receiver, 123)
testApp(t, "int 0; min_balance; int 1001; ==", ep)
// Sender makes an asset, min balance goes up
- ledger.newAsset(ep.Txn.Txn.Sender, 7, basics.AssetParams{Total: 1000})
+ ledger.NewAsset(ep.Txn.Txn.Sender, 7, basics.AssetParams{Total: 1000})
testApp(t, "int 0; min_balance; int 2002; ==", ep)
schemas := makeApp(1, 2, 3, 4)
- ledger.newApp(ep.Txn.Txn.Sender, 77, schemas)
+ ledger.NewApp(ep.Txn.Txn.Sender, 77, schemas)
// create + optin + 10 schema base + 4 ints + 6 bytes (local
- // and global count b/c newApp opts the creator in)
+ // and global count b/c NewApp opts the creator in)
minb := 2*1002 + 10*1003 + 4*1004 + 6*1005
testApp(t, fmt.Sprintf("int 0; min_balance; int %d; ==", 2002+minb), ep)
// request extra program pages, min balance increase
- app := ledger.applications[77]
- app.ExtraProgramPages = 2
- ledger.applications[77] = app
+ withepp := makeApp(1, 2, 3, 4)
+ withepp.ExtraProgramPages = 2
+ ledger.NewApp(ep.Txn.Txn.Sender, 77, withepp)
minb += 2 * 1002
testApp(t, fmt.Sprintf("int 0; min_balance; int %d; ==", 2002+minb), ep)
@@ -869,7 +450,7 @@ func TestMinBalance(t *testing.T) {
testProg(t, "txn Accounts 1; min_balance; int 1001; ==", directRefEnabledVersion)
testApp(t, "txn Accounts 1; min_balance; int 1001; ==", ep) // 1 == Accounts[0]
// Receiver opts in
- ledger.setHolding(ep.Txn.Txn.Receiver, 7, 1, true)
+ ledger.NewHolding(ep.Txn.Txn.Receiver, 7, 1, true)
testApp(t, "int 1; min_balance; int 2002; ==", ep) // 1 == Accounts[0]
testApp(t, "int 2; min_balance; int 1001; ==", ep, "invalid Account reference 2")
@@ -891,7 +472,7 @@ func TestAppCheckOptedIn(t *testing.T) {
pre.TxnGroup = txgroup
testApp(t, "int 2; int 100; app_opted_in; int 1; ==", now, "ledger not available")
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Receiver: 1,
txn.Txn.Sender: 1,
@@ -910,7 +491,7 @@ func TestAppCheckOptedIn(t *testing.T) {
testApp(t, "int 0; int 100; app_opted_in; int 0; ==", now)
// Receiver opted in
- ledger.newApp(txn.Txn.Receiver, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Receiver, 100, basics.AppParams{})
testApp(t, "int 1; int 100; app_opted_in; int 1; ==", now)
testApp(t, "int 1; int 2; app_opted_in; int 1; ==", now)
testApp(t, "int 1; int 2; app_opted_in; int 0; ==", pre) // in pre, int 2 is an actual app id
@@ -919,7 +500,7 @@ func TestAppCheckOptedIn(t *testing.T) {
expect{3, "app_opted_in arg 0 wanted type uint64..."})
// Sender opted in
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
testApp(t, "int 0; int 100; app_opted_in; int 1; ==", now)
}
@@ -942,24 +523,8 @@ exit:
int 1
==`
- txn := makeSampleTxn()
- txgroup := makeSampleTxnGroup(txn)
- now := defaultEvalParams(nil, nil)
- now.Txn = &txn
- now.TxnGroup = txgroup
- pre := defaultEvalParamsWithVersion(nil, nil, directRefEnabledVersion-1)
- pre.Txn = &txn
- pre.TxnGroup = txgroup
-
- testApp(t, text, now, "ledger not available")
-
- ledger := makeTestLedger(
- map[basics.Address]uint64{
- txn.Txn.Receiver: 1,
- },
- )
- now.Ledger = ledger
- pre.Ledger = ledger
+ pre, now, ledger := makeOldAndNewEnv(directRefEnabledVersion - 1)
+ ledger.NewAccount(now.Txn.Txn.Receiver, 1)
testApp(t, text, now, "invalid Account reference")
text = `int 1 // account idx
@@ -978,11 +543,11 @@ int 1`
testApp(t, text, now, "no app for account")
// Make a different app (not 100)
- ledger.newApp(txn.Txn.Receiver, 9999, basics.AppParams{})
+ ledger.NewApp(now.Txn.Txn.Receiver, 9999, basics.AppParams{})
testApp(t, text, now, "no app for account")
// create the app and check the value from ApplicationArgs[0] (protocol.PaymentTx) does not exist
- ledger.newApp(txn.Txn.Receiver, 100, basics.AppParams{})
+ ledger.NewApp(now.Txn.Txn.Receiver, 100, basics.AppParams{})
testApp(t, text, now)
text = `int 1 // account idx
@@ -994,7 +559,7 @@ err
exist:
byte 0x414c474f
==`
- ledger.balances[txn.Txn.Receiver].locals[100][string(protocol.PaymentTx)] = basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"}
+ ledger.NewLocal(now.Txn.Txn.Receiver, 100, string(protocol.PaymentTx), basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"})
testApp(t, text, now)
testApp(t, strings.Replace(text, "int 1 // account idx", "byte \"aoeuiaoeuiaoeuiaoeuiaoeuiaoeui01\"", -1), now)
@@ -1004,7 +569,7 @@ byte 0x414c474f
// Next we're testing if the use of the current app's id works
// as a direct reference. The error is because the sender
// account is not opted into 123.
- ledger.appID = basics.AppIndex(123)
+ ledger.NewApp(now.Txn.Txn.RekeyTo, 123, basics.AppParams{})
testApp(t, strings.Replace(text, "int 100 // app id", "int 123", -1), now, "no app for account")
testApp(t, strings.Replace(text, "int 100 // app id", "int 2", -1), pre, "no app for account")
testApp(t, strings.Replace(text, "int 100 // app id", "int 9", -1), now, "invalid App reference 9")
@@ -1012,7 +577,7 @@ byte 0x414c474f
"no such address")
// check special case account idx == 0 => sender
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(now.Txn.Txn.Sender, 100, basics.AppParams{})
text = `int 0 // account idx
int 100 // app id
txn ApplicationArgs 0
@@ -1023,15 +588,15 @@ exist:
byte 0x414c474f
==`
- ledger.balances[txn.Txn.Sender].locals[100][string(protocol.PaymentTx)] = basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"}
+ ledger.NewLocal(now.Txn.Txn.Sender, 100, string(protocol.PaymentTx), basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"})
testApp(t, text, now)
testApp(t, strings.Replace(text, "int 0 // account idx", "byte \"aoeuiaoeuiaoeuiaoeuiaoeuiaoeui00\"", -1), now)
testApp(t, strings.Replace(text, "int 0 // account idx", "byte \"aoeuiaoeuiaoeuiaoeuiaoeuiaoeui02\"", -1), now,
"invalid Account reference")
// check reading state of other app
- ledger.newApp(txn.Txn.Sender, 56, basics.AppParams{})
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(now.Txn.Txn.Sender, 56, basics.AppParams{})
+ ledger.NewApp(now.Txn.Txn.Sender, 100, basics.AppParams{})
text = `int 0 // account idx
int 56 // app id
txn ApplicationArgs 0
@@ -1042,7 +607,7 @@ exist:
byte 0x414c474f
==`
- ledger.balances[txn.Txn.Sender].locals[56][string(protocol.PaymentTx)] = basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"}
+ ledger.NewLocal(now.Txn.Txn.Sender, 56, string(protocol.PaymentTx), basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"})
testApp(t, text, now)
// check app_local_get
@@ -1052,7 +617,7 @@ app_local_get
byte 0x414c474f
==`
- ledger.balances[txn.Txn.Sender].locals[100][string(protocol.PaymentTx)] = basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"}
+ ledger.NewLocal(now.Txn.Txn.Sender, 100, string(protocol.PaymentTx), basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"})
testApp(t, text, now)
testApp(t, strings.Replace(text, "int 0 // account idx", "byte \"aoeuiaoeuiaoeuiaoeuiaoeuiaoeui00\"", -1), now)
testProg(t, strings.Replace(text, "int 0 // account idx", "byte \"aoeuiaoeuiaoeuiaoeuiaoeuiaoeui00\"", -1), directRefEnabledVersion-1,
@@ -1068,7 +633,7 @@ app_local_get
int 0
==`
- ledger.balances[txn.Txn.Sender].locals[100][string(protocol.PaymentTx)] = basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"}
+ ledger.NewLocal(now.Txn.Txn.Sender, 100, string(protocol.PaymentTx), basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"})
testApp(t, text, now)
}
@@ -1100,35 +665,19 @@ byte 0x414c474f
==
&&
`
- txn := makeSampleTxn()
- txgroup := makeSampleTxnGroup(txn)
- now := defaultEvalParams(nil, nil)
- now.Txn = &txn
- now.TxnGroup = txgroup
- pre := defaultEvalParamsWithVersion(nil, nil, directRefEnabledVersion-1)
- pre.Txn = &txn
- pre.TxnGroup = txgroup
-
- testApp(t, text, now, "ledger not available")
-
- ledger := makeTestLedger(
- map[basics.Address]uint64{
- txn.Txn.Sender: 1,
- },
- )
- now.Ledger = ledger
- pre.Ledger = ledger
+ pre, now, ledger := makeOldAndNewEnv(directRefEnabledVersion - 1)
+ ledger.NewAccount(now.Txn.Txn.Sender, 1)
now.Txn.Txn.ApplicationID = 100
now.Txn.Txn.ForeignApps = []basics.AppIndex{now.Txn.Txn.ApplicationID}
testApp(t, text, now, "no such app")
// create the app and check the value from ApplicationArgs[0] (protocol.PaymentTx) does not exist
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(now.Txn.Txn.Sender, 100, basics.AppParams{})
testApp(t, text, now, "err opcode")
- ledger.applications[100].GlobalState[string(protocol.PaymentTx)] = basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"}
+ ledger.NewGlobal(100, string(protocol.PaymentTx), basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"})
testApp(t, text, now)
@@ -1143,7 +692,7 @@ byte 0x414c474f
// check app_global_get default value
text = "byte 0x414c474f55; app_global_get; int 0; =="
- ledger.balances[txn.Txn.Sender].locals[100][string(protocol.PaymentTx)] = basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"}
+ ledger.NewLocal(now.Txn.Txn.Sender, 100, string(protocol.PaymentTx), basics.TealValue{Type: basics.TealBytesType, Bytes: "ALGO"})
testApp(t, text, now)
text = `
@@ -1167,7 +716,7 @@ int 4141
testApp(t, text, now)
// Direct reference to the current app also works
- ledger.appID = basics.AppIndex(100)
+ ledger.NewApp(now.Txn.Txn.Receiver, 100, basics.AppParams{})
now.Txn.Txn.ForeignApps = []basics.AppIndex{}
testApp(t, strings.Replace(text, "int 1 // ForeignApps index", "int 100", -1), now)
testApp(t, strings.Replace(text, "int 1 // ForeignApps index", "global CurrentApplicationID", -1), now)
@@ -1315,7 +864,7 @@ func testAssetsByVersion(t *testing.T, assetsTestProgram string, version uint64)
pre := defaultEvalParamsWithVersion(nil, &txn, directRefEnabledVersion-1)
require.GreaterOrEqual(t, version, uint64(directRefEnabledVersion))
now := defaultEvalParamsWithVersion(nil, &txn, version)
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
@@ -1357,8 +906,8 @@ func testAssetsByVersion(t *testing.T, assetsTestProgram string, version uint64)
Clawback: txn.Txn.Receiver,
}
- ledger.newAsset(txn.Txn.Sender, 55, params)
- ledger.setHolding(txn.Txn.Sender, 55, 123, true)
+ ledger.NewAsset(txn.Txn.Sender, 55, params)
+ ledger.NewHolding(txn.Txn.Sender, 55, 123, true)
// For consistency you can now use an indirect ref in holding_get
// (recall ForeignAssets[0] = 55, which has balance 123)
testApp(t, "int 0; int 0; asset_holding_get AssetBalance; int 1; ==; assert; int 123; ==", now)
@@ -1398,7 +947,7 @@ err
ok:
intc_2 // 1
`
- ledger.setHolding(txn.Txn.Sender, 55, 123, false)
+ ledger.NewHolding(txn.Txn.Sender, 55, 123, false)
testApp(t, source, now)
// check holdings invalid offsets
@@ -1424,7 +973,7 @@ ok:
intc_1
`
params.DefaultFrozen = true
- ledger.newAsset(txn.Txn.Sender, 55, params)
+ ledger.NewAsset(txn.Txn.Sender, 55, params)
testApp(t, source, now)
// check holdings invalid offsets
ops = testProg(t, source, version)
@@ -1450,7 +999,7 @@ ok:
intc_1
`
params.URL = ""
- ledger.newAsset(txn.Txn.Sender, 55, params)
+ ledger.NewAsset(txn.Txn.Sender, 55, params)
testApp(t, source, now)
source = `intcblock 1 9
@@ -1468,7 +1017,7 @@ ok:
intc_0
`
params.URL = "foobarbaz"
- ledger.newAsset(txn.Txn.Sender, 77, params)
+ ledger.NewAsset(txn.Txn.Sender, 77, params)
testApp(t, source, now)
source = `intcblock 0 1
@@ -1485,15 +1034,16 @@ ok:
intc_1
`
params.URL = ""
- ledger.newAsset(txn.Txn.Sender, 55, params)
+ ledger.NewAsset(txn.Txn.Sender, 55, params)
testApp(t, source, now, "cannot compare ([]byte to uint64)")
}
func TestAppParams(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
ep, ledger := makeSampleEnv()
- ledger.newAccount(ep.Txn.Txn.Sender, 1)
- ledger.newApp(ep.Txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewAccount(ep.Txn.Txn.Sender, 1)
+ ledger.NewApp(ep.Txn.Txn.Sender, 100, basics.AppParams{})
/* app id is in ForeignApps, but does not exist */
source := "int 56; app_params_get AppExtraProgramPages; int 0; ==; assert; int 0; =="
@@ -1548,35 +1098,34 @@ bytec_0 // key "ALGO"
app_local_del
intc_1
`
- type test struct {
+ type cmdtest struct {
source string
accNumOffset int
}
- tests := map[string]test{
+ tests := map[string]cmdtest{
"read": {sourceRead, 20},
"write": {sourceWrite, 13},
"delete": {sourceDelete, 12},
}
- for name, test := range tests {
+ for name, cmdtest := range tests {
t.Run(fmt.Sprintf("test=%s", name), func(t *testing.T) {
- source := test.source
- firstCmdOffset := test.accNumOffset
+ source := cmdtest.source
+ firstCmdOffset := cmdtest.accNumOffset
- ops, err := AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops := testProg(t, source, AssemblerMaxVersion)
txn := makeSampleTxn()
ep := defaultEvalParams(nil, nil)
ep.Txn = &txn
ep.Txn.Txn.ApplicationID = 100
- err = CheckStateful(ops.Program, ep)
+ err := CheckStateful(ops.Program, ep)
require.NoError(t, err)
_, err = EvalStateful(ops.Program, ep)
require.Error(t, err)
require.Contains(t, err.Error(), "ledger not available")
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
@@ -1595,7 +1144,7 @@ intc_1
require.Error(t, err)
require.Contains(t, err.Error(), "no app for account")
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
if name == "read" {
_, err = EvalStateful(ops.Program, ep)
@@ -1603,10 +1152,10 @@ intc_1
require.Contains(t, err.Error(), "err opcode") // no such key
}
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
- ledger.balances[txn.Txn.Sender].locals[100]["ALGOA"] = basics.TealValue{Type: basics.TealUintType, Uint: 1}
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", basics.TealValue{Type: basics.TealUintType, Uint: 0x77})
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGOA", basics.TealValue{Type: basics.TealUintType, Uint: 1})
- ledger.reset()
+ ledger.Reset()
pass, err := EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -1631,13 +1180,13 @@ func TestAppLocalStateReadWrite(t *testing.T) {
txn := makeSampleTxn()
txn.Txn.ApplicationID = 100
ep.Txn = &txn
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
)
ep.Ledger = ledger
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
// write int and bytes values
source := `int 0 // account
@@ -1704,15 +1253,14 @@ exist:
int 0x77
==
`
- ledger.reset()
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGO")
+ ledger.Reset()
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGO")
algoValue := basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
err = CheckStateful(ops.Program, ep)
require.NoError(t, err)
pass, err = EvalStateful(ops.Program, ep)
@@ -1744,12 +1292,11 @@ err
exist2:
==
`
- ledger.reset()
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
+ ledger.Reset()
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
pass, err = EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -1765,12 +1312,11 @@ int 0x78 // value
app_local_put
int 1
`
- ledger.reset()
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
+ ledger.Reset()
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
pass, err = EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -1798,12 +1344,11 @@ exist:
int 0x78
==
`
- ledger.reset()
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
+ ledger.Reset()
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
pass, err = EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -1829,12 +1374,11 @@ byte 0x414c474f // key "ALGO"
int 0x78 // value
app_local_put
`
- ledger.reset()
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
+ ledger.Reset()
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
pass, err = EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -1866,15 +1410,14 @@ int 0x79 // value
app_local_put
int 1
`
- ledger.reset()
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
+ ledger.Reset()
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
- ledger.balances[txn.Txn.Receiver] = makeBalanceRecord(txn.Txn.Receiver, 500)
- ledger.balances[txn.Txn.Receiver].locals[100] = make(basics.TealKeyValue)
+ ledger.NewAccount(ep.Txn.Txn.Receiver, 500)
+ ledger.NewLocals(txn.Txn.Receiver, 100)
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
err = CheckStateful(ops.Program, ep)
require.NoError(t, err)
pass, err = EvalStateful(ops.Program, ep)
@@ -1946,7 +1489,7 @@ int 1
require.Error(t, err)
require.Contains(t, err.Error(), "ledger not available")
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
@@ -1958,7 +1501,7 @@ int 1
require.Error(t, err)
require.Contains(t, err.Error(), "no such app")
- ledger.newApp(txn.Txn.Sender, 100, makeApp(0, 0, 1, 0))
+ ledger.NewApp(txn.Txn.Sender, 100, makeApp(0, 0, 1, 0))
// a special test for read
if name == "read" {
@@ -1966,9 +1509,9 @@ int 1
require.Error(t, err)
require.Contains(t, err.Error(), "err opcode") // no such key
}
- ledger.applications[100].GlobalState["ALGO"] = basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
+ ledger.NewGlobal(100, "ALGO", basics.TealValue{Type: basics.TealUintType, Uint: 0x77})
- ledger.reset()
+ ledger.Reset()
pass, err := EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -2049,13 +1592,13 @@ int 0x77
txn.Txn.ApplicationID = 100
txn.Txn.ForeignApps = []basics.AppIndex{txn.Txn.ApplicationID}
ep.Txn = &txn
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
)
ep.Ledger = ledger
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
ops, err := AssembleStringWithVersion(source, AssemblerMaxVersion)
require.NoError(t, err)
@@ -2087,15 +1630,14 @@ app_global_get
int 0x77
==
`
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- delete(ledger.applications[100].GlobalState, "ALGO")
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NoGlobal(100, "ALGO")
algoValue := basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.NewGlobal(100, "ALGO", algoValue)
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
pass, err = EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -2121,12 +1663,11 @@ app_global_get
int 0x77
==
`
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NewGlobal(100, "ALGO", algoValue)
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
pass, err = EvalStateful(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
@@ -2167,12 +1708,11 @@ byte 0x414c474f
==
&&
`
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NewGlobal(100, "ALGO", algoValue)
- ops, err = AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
+ ops = testProg(t, source, AssemblerMaxVersion)
sb := strings.Builder{}
ep.Trace = &sb
err = CheckStateful(ops.Program, ep)
@@ -2224,22 +1764,22 @@ byte "myval"
txn.Txn.ApplicationID = 100
txn.Txn.ForeignApps = []basics.AppIndex{txn.Txn.ApplicationID, 101}
ep.Txn = &txn
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
)
ep.Ledger = ledger
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
delta := testApp(t, source, ep, "no such app")
require.Empty(t, delta.GlobalDelta)
require.Empty(t, delta.LocalDeltas)
- ledger.newApp(txn.Txn.Receiver, 101, basics.AppParams{})
- ledger.newApp(txn.Txn.Receiver, 100, basics.AppParams{}) // this keeps current app id = 100
+ ledger.NewApp(txn.Txn.Receiver, 101, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Receiver, 100, basics.AppParams{}) // this keeps current app id = 100
algoValue := basics.TealValue{Type: basics.TealBytesType, Bytes: "myval"}
- ledger.applications[101].GlobalState["mykey"] = algoValue
+ ledger.NewGlobal(101, "mykey", algoValue)
delta = testApp(t, source, ep)
require.Empty(t, delta.GlobalDelta)
@@ -2270,13 +1810,13 @@ int 7
txn := makeSampleTxn()
txn.Txn.ApplicationID = 100
ep.Txn = &txn
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
)
ep.Ledger = ledger
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
delta := testApp(t, source, ep)
require.Empty(t, delta.LocalDeltas)
@@ -2317,24 +1857,24 @@ int 1
txn := makeSampleTxn()
txn.Txn.ApplicationID = 100
ep.Txn = &txn
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
)
ep.Ledger = ledger
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
delta := testApp(t, source, ep)
require.Len(t, delta.GlobalDelta, 2)
require.Empty(t, delta.LocalDeltas)
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- delete(ledger.applications[100].GlobalState, "ALGO")
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NoGlobal(100, "ALGO")
algoValue := basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.NewGlobal(100, "ALGO", algoValue)
// check delete existing
source = `byte 0x414c474f // key "ALGO"
@@ -2353,11 +1893,11 @@ app_global_get_ex
require.Equal(t, "", vd.Bytes)
require.Equal(t, 0, len(delta.LocalDeltas))
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- delete(ledger.applications[100].GlobalState, "ALGO")
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NoGlobal(100, "ALGO")
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.NewGlobal(100, "ALGO", algoValue)
// check delete and write non-existing
source = `byte 0x414c474f41 // key "ALGOA"
@@ -2378,11 +1918,11 @@ app_global_put
require.Equal(t, "", vd.Bytes)
require.Empty(t, delta.LocalDeltas)
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- delete(ledger.applications[100].GlobalState, "ALGO")
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NoGlobal(100, "ALGO")
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.NewGlobal(100, "ALGO", algoValue)
// check delete and write existing
source = `byte 0x414c474f // key "ALGO"
@@ -2398,11 +1938,12 @@ int 1
require.Equal(t, basics.SetUintAction, vd.Action)
require.Empty(t, delta.LocalDeltas)
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- delete(ledger.applications[100].GlobalState, "ALGO")
+ ledger.Reset()
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NoGlobal(100, "ALGO")
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.NewGlobal(100, "ALGO", algoValue)
// check delete,write,delete existing
source = `byte 0x414c474f // key "ALGO"
@@ -2420,11 +1961,12 @@ int 1
require.Equal(t, basics.DeleteAction, vd.Action)
require.Empty(t, delta.LocalDeltas)
- ledger.reset()
- delete(ledger.applications[100].GlobalState, "ALGOA")
- delete(ledger.applications[100].GlobalState, "ALGO")
+ ledger.Reset()
+ ledger.Reset()
+ ledger.NoGlobal(100, "ALGOA")
+ ledger.NoGlobal(100, "ALGO")
- ledger.applications[100].GlobalState["ALGO"] = algoValue
+ ledger.NewGlobal(100, "ALGO", algoValue)
// check delete, write, delete non-existing
source = `byte 0x414c474f41 // key "ALGOA"
@@ -2482,15 +2024,15 @@ int 1
txn := makeSampleTxn()
txn.Txn.ApplicationID = 100
ep.Txn = &txn
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
)
ep.Ledger = ledger
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
- ledger.balances[txn.Txn.Receiver] = makeBalanceRecord(txn.Txn.Receiver, 1)
- ledger.balances[txn.Txn.Receiver].locals[100] = make(basics.TealKeyValue)
+ ledger.NewApp(txn.Txn.Sender, 100, basics.AppParams{})
+ ledger.NewAccount(txn.Txn.Receiver, 1)
+ ledger.NewLocals(txn.Txn.Receiver, 100)
sb := strings.Builder{}
ep.Trace = &sb
@@ -2501,7 +2043,7 @@ int 1
require.Equal(t, 0, len(delta.GlobalDelta))
require.Equal(t, 2, len(delta.LocalDeltas))
- ledger.reset()
+ ledger.Reset()
// test that app_local_put and _app_local_del can use byte addresses
testApp(t, strings.Replace(source, "int 0 // sender", "byte \"aoeuiaoeuiaoeuiaoeuiaoeuiaoeui00\"", -1), ep)
// But won't compile in old teal
@@ -2513,14 +2055,14 @@ int 1
require.Equal(t, 0, len(delta.GlobalDelta))
require.Equal(t, 2, len(delta.LocalDeltas))
- ledger.reset()
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGO")
- delete(ledger.balances[txn.Txn.Receiver].locals[100], "ALGOA")
- delete(ledger.balances[txn.Txn.Receiver].locals[100], "ALGO")
+ ledger.Reset()
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGO")
+ ledger.NoLocal(txn.Txn.Receiver, 100, "ALGOA")
+ ledger.NoLocal(txn.Txn.Receiver, 100, "ALGO")
algoValue := basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
// check delete existing
source = `int 0 // account
@@ -2543,11 +2085,11 @@ app_local_get_ex
require.Equal(t, uint64(0), vd.Uint)
require.Equal(t, "", vd.Bytes)
- ledger.reset()
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGO")
+ ledger.Reset()
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGO")
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
// check delete and write non-existing
source = `int 0 // account
@@ -2573,11 +2115,11 @@ app_local_put
require.Equal(t, uint64(0x78), vd.Uint)
require.Equal(t, "", vd.Bytes)
- ledger.reset()
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGO")
+ ledger.Reset()
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGO")
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
// check delete and write existing
source = `int 0 // account
@@ -2599,11 +2141,11 @@ int 1
require.Equal(t, uint64(0x78), vd.Uint)
require.Equal(t, "", vd.Bytes)
- ledger.reset()
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGO")
+ ledger.Reset()
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGO")
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
// check delete,write,delete existing
source = `int 0 // account
@@ -2628,11 +2170,11 @@ int 1
require.Equal(t, uint64(0), vd.Uint)
require.Equal(t, "", vd.Bytes)
- ledger.reset()
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGOA")
- delete(ledger.balances[txn.Txn.Sender].locals[100], "ALGO")
+ ledger.Reset()
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGOA")
+ ledger.NoLocal(txn.Txn.Sender, 100, "ALGO")
- ledger.balances[txn.Txn.Sender].locals[100]["ALGO"] = algoValue
+ ledger.NewLocal(txn.Txn.Sender, 100, "ALGO", algoValue)
// check delete, write, delete non-existing
source = `int 0 // account
@@ -2694,7 +2236,7 @@ func TestEnumFieldErrors(t *testing.T) {
require.Contains(t, err.Error(), "MinTxnFee expected field type is []byte but got uint64")
txn := makeSampleTxn()
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
@@ -2711,7 +2253,7 @@ func TestEnumFieldErrors(t *testing.T) {
Freeze: txn.Txn.Receiver,
Clawback: txn.Txn.Receiver,
}
- ledger.newAsset(txn.Txn.Sender, 55, params)
+ ledger.NewAsset(txn.Txn.Sender, 55, params)
ep.Txn = &txn
ep.Ledger = ledger
@@ -2779,7 +2321,7 @@ func TestReturnTypes(t *testing.T) {
[]byte("aoeu2"),
[]byte("aoeu3"),
}
- ledger := makeTestLedger(
+ ledger := logictest.MakeLedger(
map[basics.Address]uint64{
txn.Txn.Sender: 1,
},
@@ -2796,15 +2338,16 @@ func TestReturnTypes(t *testing.T) {
Freeze: txn.Txn.Receiver,
Clawback: txn.Txn.Receiver,
}
- ledger.newAsset(txn.Txn.Sender, 1, params)
- ledger.newApp(txn.Txn.Sender, 1, basics.AppParams{})
- ledger.setTrackedCreatable(0, basics.CreatableLocator{Index: 1})
- ledger.balances[txn.Txn.Receiver] = makeBalanceRecord(txn.Txn.Receiver, 1)
- ledger.balances[txn.Txn.Receiver].locals[1] = make(basics.TealKeyValue)
+ ledger.NewAsset(txn.Txn.Sender, 1, params)
+ ledger.NewApp(txn.Txn.Sender, 1, basics.AppParams{})
+ ledger.SetTrackedCreatable(0, basics.CreatableLocator{Index: 1})
+ ledger.NewAccount(txn.Txn.Receiver, 1000000)
+ ledger.NewLocals(txn.Txn.Receiver, 1)
key, err := hex.DecodeString("33343536")
require.NoError(t, err)
algoValue := basics.TealValue{Type: basics.TealUintType, Uint: 0x77}
- ledger.balances[txn.Txn.Receiver].locals[1][string(key)] = algoValue
+ ledger.NewLocal(txn.Txn.Receiver, 1, string(key), algoValue)
+ ledger.NewAccount(basics.AppIndex(1).Address(), 1000000)
ep.Ledger = ledger
@@ -2834,7 +2377,6 @@ func TestReturnTypes(t *testing.T) {
"bytec_2": "bytecblock 0x32 0x33 0x34; bytec_2",
"bytec_3": "bytecblock 0x32 0x33 0x34 0x35; bytec_3",
"substring": "substring 0 2",
- "ed25519verify": "pop; pop; pop; int 1", // ignore
"asset_params_get": "asset_params_get AssetTotal",
"asset_holding_get": "asset_holding_get AssetBalance",
"gtxns": "gtxns Sender",
@@ -2843,13 +2385,28 @@ func TestReturnTypes(t *testing.T) {
"pushbytes": `pushbytes "jojogoodgorilla"`,
"app_params_get": "app_params_get AppGlobalNumUint",
"extract": "extract 0 2",
+ "txnas": "txnas ApplicationArgs",
+ "gtxnas": "gtxnas 0 ApplicationArgs",
+ "gtxnsas": "pop; pop; int 0; int 0; gtxnsas ApplicationArgs",
+ "args": "args",
+ "itxn": "itxn_begin; int pay; itxn_field TypeEnum; itxn_submit; itxn CreatedAssetID",
+ // This next one is a cop out. Can't use itxna Logs until we have inner appl
+ "itxna": "itxn_begin; int pay; itxn_field TypeEnum; itxn_submit; itxn NumLogs",
+ }
+
+ // these require special input data and tested separately
+ skipCmd := map[string]bool{
+ "ed25519verify": true,
+ "ecdsa_verify": true,
+ "ecdsa_pk_recover": true,
+ "ecdsa_pk_decompress": true,
}
byName := OpsByName[LogicVersion]
for _, m := range []runMode{runModeSignature, runModeApplication} {
t.Run(fmt.Sprintf("m=%s", m.String()), func(t *testing.T) {
for name, spec := range byName {
- if len(spec.Returns) == 0 || (m&spec.Modes) == 0 {
+ if len(spec.Returns) == 0 || (m&spec.Modes) == 0 || skipCmd[name] {
continue
}
var sb strings.Builder
@@ -2865,7 +2422,10 @@ func TestReturnTypes(t *testing.T) {
source := sb.String()
ops := testProg(t, source, AssemblerMaxVersion)
- var cx evalContext
+ var trace strings.Builder
+ ep.Trace = &trace
+
+ var cx EvalContext
cx.EvalParams = ep
cx.runModeFlags = m
@@ -2874,7 +2434,7 @@ func TestReturnTypes(t *testing.T) {
require.Equal(
t,
len(spec.Returns), len(cx.stack),
- fmt.Sprintf("%s expected to return %d values but stack has %d", spec.Name, len(spec.Returns), len(cx.stack)),
+ fmt.Sprintf("\n%s%s expected to return %d values but stack has %d", trace.String(), spec.Name, len(spec.Returns), len(cx.stack)),
)
for i := 0; i < len(spec.Returns); i++ {
sp := len(cx.stack) - 1 - i
@@ -2910,7 +2470,7 @@ func TestCurrentApplicationID(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
ep, ledger := makeSampleEnv()
- ledger.appID = basics.AppIndex(42)
+ ledger.NewApp(ep.Txn.Txn.Receiver, 42, basics.AppParams{})
source := "global CurrentApplicationID; int 42; =="
testApp(t, source, ep)
}
@@ -2925,54 +2485,10 @@ func TestAppLoop(t *testing.T) {
// Double until > 10. Should be 16
testApp(t, stateful+"int 1; loop: int 2; *; dup; int 10; <; bnz loop; int 16; ==", ep)
- testApp(t, stateful+"int 1; loop: int 2; *; dup; int 10; <; bnz loop; int 16; ==", ep)
-
// Infinite loop because multiply by one instead of two
testApp(t, stateful+"int 1; loop:; int 1; *; dup; int 10; <; bnz loop; int 16; ==", ep, "dynamic cost")
}
-func TestWriteLogs(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- t.Parallel()
-
- ep := defaultEvalParams(nil, nil)
- txn := makeSampleTxn()
- txn.Txn.ApplicationID = 100
- ep.Txn = &txn
- ledger := makeTestLedger(
- map[basics.Address]uint64{
- txn.Txn.Sender: 1,
- },
- )
- ep.Ledger = ledger
- ledger.newApp(txn.Txn.Sender, 100, basics.AppParams{})
-
- // write int and bytes values
- source := `int 1
-loop: byte "a"
-log
-int 1
-+
-dup
-int 30
-<
-bnz loop
-`
- ops, err := AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(t, err)
- err = CheckStateful(ops.Program, ep)
- require.NoError(t, err)
- pass, err := EvalStateful(ops.Program, ep)
- require.NoError(t, err)
- require.True(t, pass)
- delta, err := ledger.GetDelta(&ep.Txn.Txn)
- require.NoError(t, err)
- require.Empty(t, 0, delta.GlobalDelta)
- require.Empty(t, delta.LocalDeltas)
- require.Len(t, delta.Logs, 29)
-}
-
func TestPooledAppCallsVerifyOp(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
@@ -2998,3 +2514,19 @@ func TestPooledAppCallsVerifyOp(t *testing.T) {
*ep.PooledApplicationBudget = uint64(ep.Proto.MaxAppProgramCost * 3)
testApp(t, source, ep)
}
+
+func TestAppAddress(t *testing.T) {
+ ep, ledger := makeSampleEnv()
+ ledger.NewApp(ep.Txn.Txn.Receiver, 888, basics.AppParams{})
+ source := fmt.Sprintf("global CurrentApplicationAddress; addr %s; ==;", basics.AppIndex(888).Address())
+ testApp(t, source, ep)
+
+ source = fmt.Sprintf("int 0; app_params_get AppAddress; assert; addr %s; ==;", basics.AppIndex(888).Address())
+ testApp(t, source, ep)
+
+ // To document easy construction:
+ // python -c 'import algosdk.encoding as e; print(e.encode_address(e.checksum(b"appID"+(888).to_bytes(8, "big"))))'
+ a := "U7C5FUHZM5PL5EIS2KHHLL456GS66DZBEEKL2UBQLMKH2X5X5I643ZIM6U"
+ source = fmt.Sprintf("int 0; app_params_get AppAddress; assert; addr %s; ==;", a)
+ testApp(t, source, ep)
+}
diff --git a/data/transactions/logic/eval_test.go b/data/transactions/logic/eval_test.go
index 9a16c0016..3e1fe56af 100644
--- a/data/transactions/logic/eval_test.go
+++ b/data/transactions/logic/eval_test.go
@@ -17,7 +17,6 @@
package logic
import (
- "crypto/sha256"
"encoding/base64"
"encoding/binary"
"encoding/hex"
@@ -33,6 +32,7 @@ import (
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/bookkeeping"
"github.com/algorand/go-algorand/data/transactions"
+ "github.com/algorand/go-algorand/data/transactions/logictest"
"github.com/algorand/go-algorand/logging"
"github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/test/partitiontest"
@@ -44,10 +44,6 @@ func defaultEvalProto() config.ConsensusParams {
return defaultEvalProtoWithVersion(LogicVersion)
}
-func defaultEvalProtoV1() config.ConsensusParams {
- return defaultEvalProtoWithVersion(1)
-}
-
func defaultEvalProtoWithVersion(version uint64) config.ConsensusParams {
return config.ConsensusParams{
LogicSigVersion: version,
@@ -59,11 +55,24 @@ func defaultEvalProtoWithVersion(version uint64) config.ConsensusParams {
// These must be identical to keep an old backward compat test working
MinTxnFee: 1001,
MinBalance: 1001,
+ // Our sample txn is 42-1066 (and that's used as default in itxn_begin)
+ MaxTxnLife: 1500,
// Strange choices below so that we test against conflating them
AppFlatParamsMinBalance: 1002,
SchemaMinBalancePerEntry: 1003,
SchemaUintMinBalance: 1004,
SchemaBytesMinBalance: 1005,
+
+ MaxInnerTransactions: 4,
+
+ // With the addition of itxn_field, itxn_submit, which rely on
+ // machinery outside logic package for validity checking, we
+ // need a more realistic set of consensus paramaters.
+ Asset: true,
+ MaxAssetNameBytes: 12,
+ MaxAssetUnitNameBytes: 6,
+ MaxAssetURLBytes: 32,
+ MaxAssetDecimals: 4,
}
}
@@ -88,14 +97,14 @@ func defaultEvalParamsWithVersion(sb *strings.Builder, txn *transactions.SignedT
if txn != nil {
pt = txn
} else {
- var at transactions.SignedTxn
- pt = &at
+ pt = &transactions.SignedTxn{}
}
ep := EvalParams{}
ep.Proto = &proto
ep.Txn = pt
ep.PastSideEffects = MakePastSideEffects(5)
+ ep.Specials = &transactions.SpecialAddresses{}
if sb != nil { // have to do this since go's nil semantics: https://golang.org/doc/faq#nil_error
ep.Trace = sb
}
@@ -499,35 +508,14 @@ func TestMulOverflow(t *testing.T) {
testPanics(t, "int 0x111111111; int 0x222222222; *; pop; int 1", 1)
}
-func TestMulwImpl(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- t.Parallel()
- high, low, err := opMulwImpl(1, 2)
- require.NoError(t, err)
- require.Equal(t, uint64(0), high)
- require.Equal(t, uint64(2), low)
-
- high, low, err = opMulwImpl(0x111111111, 0x222222222)
- require.NoError(t, err)
- require.Equal(t, uint64(2), high)
- require.Equal(t, uint64(0x468acf130eca8642), low)
-
- high, low, err = opMulwImpl(1, 0)
- require.NoError(t, err)
- require.Equal(t, uint64(0), high)
- require.Equal(t, uint64(0), low)
-
- high, low, err = opMulwImpl((1<<64)-1, (1<<64)-1)
- require.NoError(t, err)
- require.Equal(t, uint64(0xfffffffffffffffe), high)
- require.Equal(t, uint64(1), low)
-}
-
func TestMulw(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
+ testAccepts(t, "int 1; int 2; mulw; int 2; ==; assert; int 0; ==", 3)
+ testAccepts(t, "int 0x111111111; int 0x222222222; mulw; int 0x468acf130eca8642; ==; assert; int 2; ==", 3)
+ testAccepts(t, "int 1; int 0; mulw; int 0; ==; assert; int 0; ==", 3)
+ testAccepts(t, "int 0xFFFFFFFFFFFFFFFF; int 0xFFFFFFFFFFFFFFFF; mulw; int 1; ==; assert; int 0xFFFFFFFFFFFFFFFe; ==", 3)
testAccepts(t, `
int 0x111111111
int 0x222222222
@@ -546,31 +534,15 @@ int 1 // ret 1
`, 1)
}
-func TestAddwImpl(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- t.Parallel()
- carry, sum := opAddwImpl(1, 2)
- require.Equal(t, uint64(0), carry)
- require.Equal(t, uint64(3), sum)
-
- carry, sum = opAddwImpl(0xFFFFFFFFFFFFFFFD, 0x45)
- require.Equal(t, uint64(1), carry)
- require.Equal(t, uint64(0x42), sum)
-
- carry, sum = opAddwImpl(0, 0)
- require.Equal(t, uint64(0), carry)
- require.Equal(t, uint64(0), sum)
-
- carry, sum = opAddwImpl((1<<64)-1, (1<<64)-1)
- require.Equal(t, uint64(1), carry)
- require.Equal(t, uint64((1<<64)-2), sum)
-}
-
func TestAddw(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
+ testAccepts(t, "int 1; int 2; addw; int 3; ==; assert; int 0; ==", 3)
+ testAccepts(t, "int 0xFFFFFFFFFFFFFFFD; int 0x45; addw; int 0x42; ==; assert; int 1; ==", 3)
+ testAccepts(t, "int 0; int 0; addw; int 0; ==; assert; int 0; ==", 3)
+ testAccepts(t, "int 0xFFFFFFFFFFFFFFFF; dup; addw; int 0xFFFFFFFFFFFFFFFe; ==; assert; int 1; ==", 3)
+
testAccepts(t, `
int 0xFFFFFFFFFFFFFFFF
int 0x43
@@ -695,6 +667,35 @@ int 1
}
}
+func TestMulDiv(t *testing.T) {
+ // Demonstrate a "function" that expects three u64s on stack,
+ // and calculates B*C/A. (Following opcode documentation
+ // convention, C is top-of-stack, B is below it, and A is
+ // below B.
+
+ muldiv := `
+muldiv:
+mulw // multiply B*C. puts TWO u64s on stack
+int 0 // high word of C as a double-word
+dig 3 // pull C to TOS
+divmodw
+pop // pop unneeded remainder low word
+pop // pop unneeded remainder high word
+swap
+int 0
+==
+assert // ensure high word of quotient was 0
+swap // bring C to surface
+pop // in order to get rid of it
+retsub
+`
+ testAccepts(t, "int 5; int 8; int 10; callsub muldiv; int 16; ==; return;"+muldiv, 4)
+
+ testRejects(t, "int 5; int 8; int 10; callsub muldiv; int 15; ==; return;"+muldiv, 4)
+
+ testAccepts(t, "int 500000000000; int 80000000000; int 100000000000; callsub muldiv; int 16000000000; ==; return;"+muldiv, 4)
+}
+
func TestDivZero(t *testing.T) {
partitiontest.PartitionTest(t)
@@ -905,18 +906,11 @@ func TestArg(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops := testProg(t, `arg 0
-arg 1
-==
-arg 2
-arg 3
-!=
-&&
-arg 4
-len
-int 9
-<
-&&`, v)
+ source := "arg 0; arg 1; ==; arg 2; arg 3; !=; &&; arg 4; len; int 9; <; &&;"
+ if v >= 5 {
+ source += "int 0; args; int 1; args; ==; assert; int 2; args; int 3; args; !=; assert"
+ }
+ ops := testProg(t, source, v)
err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(t, err)
var txn transactions.SignedTxn
@@ -994,7 +988,15 @@ const globalV4TestProgram = globalV3TestProgram + `
`
const globalV5TestProgram = globalV4TestProgram + `
-// No new globals in v5
+global CurrentApplicationAddress
+len
+int 32
+==
+&&
+global GroupID
+byte 0x0706000000000000000000000000000000000000000000000000000000000000
+==
+&&
`
func TestGlobal(t *testing.T) {
@@ -1023,18 +1025,18 @@ func TestGlobal(t *testing.T) {
EvalStateful, CheckStateful,
},
5: {
- CreatorAddress, globalV5TestProgram,
+ GroupID, globalV5TestProgram,
EvalStateful, CheckStateful,
},
}
// tests keys are versions so they must be in a range 1..AssemblerMaxVersion plus zero version
require.LessOrEqual(t, len(tests), AssemblerMaxVersion+1)
- ledger := makeTestLedger(nil)
- ledger.appID = 42
+
+ ledger := logictest.MakeLedger(nil)
addr, err := basics.UnmarshalChecksumAddress(testAddr)
require.NoError(t, err)
- ledger.creatorAddr = addr
- for v := uint64(0); v <= AssemblerMaxVersion; v++ {
+ ledger.NewApp(addr, basics.AppIndex(42), basics.AppParams{})
+ for v := uint64(1); v <= AssemblerMaxVersion; v++ {
_, ok := tests[v]
require.True(t, ok)
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
@@ -1052,12 +1054,10 @@ func TestGlobal(t *testing.T) {
require.NoError(t, err)
var txn transactions.SignedTxn
txn.Lsig.Logic = ops.Program
+ txn.Txn.Group = crypto.Digest{0x07, 0x06}
txgroup := make([]transactions.SignedTxn, 1)
txgroup[0] = txn
sb := strings.Builder{}
- block := bookkeeping.Block{}
- block.BlockHeader.Round = 999999
- block.BlockHeader.TimeStamp = 2069
proto := config.ConsensusParams{
MinTxnFee: 123,
MinBalance: 1000000,
@@ -1116,9 +1116,8 @@ txn TypeEnum
int %s
==
&&`, symbol, string(tt))
- ops, err := AssembleStringWithVersion(text, v)
- require.NoError(t, err)
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ ops := testProg(t, text, v)
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(t, err)
var txn transactions.SignedTxn
txn.Txn.Type = tt
@@ -1420,6 +1419,26 @@ assert
int 1
`
+const testTxnProgramTextV5 = testTxnProgramTextV4 + `
+txn Nonparticipation
+pop
+int 1
+==
+assert
+txn ConfigAssetMetadataHash
+int 2
+txnas ApplicationArgs
+==
+assert
+txn Sender
+int 0
+args
+==
+assert
+
+int 1
+`
+
func makeSampleTxn() transactions.SignedTxn {
var txn transactions.SignedTxn
copy(txn.Txn.Sender[:], []byte("aoeuiaoeuiaoeuiaoeuiaoeuiaoeui00"))
@@ -1438,6 +1457,7 @@ func makeSampleTxn() transactions.SignedTxn {
txn.Txn.VoteFirst = 1317
txn.Txn.VoteLast = 17776
txn.Txn.VoteKeyDilution = 1
+ txn.Txn.Nonparticipation = false
txn.Txn.Type = protocol.PaymentTx
txn.Txn.AssetAmount = 1234
txn.Txn.AssetSender = txn.Txn.Receiver
@@ -1504,8 +1524,9 @@ func TestTxn(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
- for _, txnField := range TxnFieldNames {
- if !strings.Contains(testTxnProgramTextV4, txnField) {
+ for i, txnField := range TxnFieldNames {
+ fs := txnFieldSpecByField[TxnField(i)]
+ if !fs.effects && !strings.Contains(testTxnProgramTextV5, txnField) {
if txnField != FirstValidTime.String() {
t.Errorf("TestTxn missing field %v", txnField)
}
@@ -1517,6 +1538,7 @@ func TestTxn(t *testing.T) {
2: testTxnProgramTextV2,
3: testTxnProgramTextV3,
4: testTxnProgramTextV4,
+ 5: testTxnProgramTextV5,
}
clearOps := testProg(t, "int 1", 1)
@@ -1553,7 +1575,7 @@ func TestTxn(t *testing.T) {
}
sb := strings.Builder{}
ep := defaultEvalParams(&sb, &txn)
- ep.Ledger = makeTestLedger(nil)
+ ep.Ledger = logictest.MakeLedger(nil)
ep.GroupIndex = 3
pass, err := Eval(ops.Program, ep)
if !pass {
@@ -1609,10 +1631,9 @@ fail:
int 0
return
`
- ops, err := AssembleStringWithVersion(cachedTxnProg, 2)
- require.NoError(t, err)
+ ops := testProg(t, cachedTxnProg, 2)
sb := strings.Builder{}
- err = Check(ops.Program, defaultEvalParams(&sb, nil))
+ err := Check(ops.Program, defaultEvalParams(&sb, nil))
if err != nil {
t.Log(hex.EncodeToString(ops.Program))
t.Log(sb.String())
@@ -1657,10 +1678,8 @@ int 100
targetTxn.Txn.Type = protocol.AssetConfigTx
txgroup[0] = targetTxn
sb := strings.Builder{}
- ledger := makeTestLedger(nil)
- ledger.setTrackedCreatable(0, basics.CreatableLocator{
- Index: 100,
- })
+ ledger := logictest.MakeLedger(nil)
+ ledger.SetTrackedCreatable(0, basics.CreatableLocator{Index: 100})
ep := defaultEvalParams(&sb, &txn)
ep.Ledger = ledger
ep.TxnGroup = txgroup
@@ -1701,8 +1720,7 @@ int 0
ep.TxnGroup[0].Txn.Type = protocol.AssetConfigTx
// should fail when no creatable was created
- var nilIndex basics.CreatableIndex
- ledger.trackedCreatables[0] = nilIndex
+ ledger.SetTrackedCreatable(0, basics.CreatableLocator{})
_, err = EvalStateful(ops.Program, ep)
require.Error(t, err)
require.Contains(t, err.Error(), "the txn did not create anything")
@@ -1782,7 +1800,7 @@ int 1
==
&&
`
- gtxnText := gtxnTextV2 + ` gtxn 0 ExtraProgramPages
+ gtxnTextV4 := gtxnTextV2 + ` gtxn 0 ExtraProgramPages
int 0
==
&&
@@ -1792,10 +1810,24 @@ int 2
&&
`
+ gtxnTextV5 := gtxnTextV4 + `int 0
+gtxnas 0 Accounts
+gtxn 0 Sender
+==
+&&
+int 0
+int 0
+gtxnsas Accounts
+gtxn 0 Sender
+==
+&&
+`
+
tests := map[uint64]string{
1: gtxnTextV1,
2: gtxnTextV2,
- 4: gtxnText,
+ 4: gtxnTextV4,
+ 5: gtxnTextV5,
}
for v, source := range tests {
@@ -2028,6 +2060,85 @@ global ZeroAddress
require.True(t, pass)
}
+func TestTxnas(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ t.Parallel()
+
+ source := `int 1
+txnas Accounts
+int 0
+txnas ApplicationArgs
+==
+`
+ ops := testProg(t, source, AssemblerMaxVersion)
+ var txn transactions.SignedTxn
+ txn.Txn.Accounts = make([]basics.Address, 1)
+ txn.Txn.Accounts[0] = txn.Txn.Sender
+ txn.Txn.ApplicationArgs = make([][]byte, 1)
+ txn.Txn.ApplicationArgs[0] = []byte(protocol.PaymentTx)
+ txgroup := make([]transactions.SignedTxn, 1)
+ txgroup[0] = txn
+ ep := defaultEvalParams(nil, &txn)
+ ep.TxnGroup = txgroup
+ _, err := Eval(ops.Program, ep)
+ require.NoError(t, err)
+
+ // check special case: Account 0 == Sender
+ // even without any additional context
+ source = `int 0
+txnas Accounts
+txn Sender
+==
+`
+ ops2 := testProg(t, source, AssemblerMaxVersion)
+ var txn2 transactions.SignedTxn
+ copy(txn2.Txn.Sender[:], []byte("aoeuiaoeuiaoeuiaoeuiaoeuiaoeui00"))
+ ep2 := defaultEvalParams(nil, &txn2)
+ pass, err := Eval(ops2.Program, ep2)
+ require.NoError(t, err)
+ require.True(t, pass)
+
+ // check gtxnas
+ source = `int 1
+gtxnas 0 Accounts
+txna ApplicationArgs 0
+==`
+ ops = testProg(t, source, AssemblerMaxVersion)
+ require.NoError(t, err)
+ _, err = Eval(ops.Program, ep)
+ require.NoError(t, err)
+
+ // check special case: Account 0 == Sender
+ // even without any additional context
+ source = `int 0
+gtxnas 0 Accounts
+txn Sender
+==
+ `
+ ops3 := testProg(t, source, AssemblerMaxVersion)
+ var txn3 transactions.SignedTxn
+ copy(txn2.Txn.Sender[:], []byte("aoeuiaoeuiaoeuiaoeuiaoeuiaoeui00"))
+ txgroup3 := make([]transactions.SignedTxn, 1)
+ txgroup3[0] = txn3
+ ep3 := defaultEvalParams(nil, &txn3)
+ ep3.TxnGroup = txgroup3
+ pass, err = Eval(ops3.Program, ep3)
+ require.NoError(t, err)
+ require.True(t, pass)
+
+ // check gtxnsas
+ source = `int 0
+int 1
+gtxnsas Accounts
+txna ApplicationArgs 0
+==`
+ ops = testProg(t, source, AssemblerMaxVersion)
+ require.NoError(t, err)
+ _, err = Eval(ops.Program, ep)
+ require.NoError(t, err)
+}
+
func TestBitOps(t *testing.T) {
partitiontest.PartitionTest(t)
@@ -2143,6 +2254,7 @@ len`, 2)
}
func TestExtractOp(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testAccepts(t, "byte 0x123456789abc; extract 1 2; byte 0x3456; ==", 5)
testAccepts(t, "byte 0x123456789abc; extract 0 6; byte 0x123456789abc; ==", 5)
@@ -2152,13 +2264,17 @@ func TestExtractOp(t *testing.T) {
testAccepts(t, "byte 0x123456789abc; int 5; int 1; extract3; byte 0xbc; ==", 5)
- testAccepts(t, "byte 0x123456789abcdef0; int 1; extract16bits; int 0x3456; ==", 5)
- testAccepts(t, "byte 0x123456789abcdef0; int 1; extract32bits; int 0x3456789a; ==", 5)
- testAccepts(t, "byte 0x123456789abcdef0; int 0; extract64bits; int 0x123456789abcdef0; ==", 5)
- testAccepts(t, "byte 0x123456789abcdef0; int 0; extract64bits; int 0x123456789abcdef; !=", 5)
+ testAccepts(t, "byte 0x123456789abcdef0; int 1; extract_uint16; int 0x3456; ==", 5)
+ testAccepts(t, "byte 0x123456789abcdef0; int 1; extract_uint32; int 0x3456789a; ==", 5)
+ testAccepts(t, "byte 0x123456789abcdef0; int 0; extract_uint64; int 0x123456789abcdef0; ==", 5)
+ testAccepts(t, "byte 0x123456789abcdef0; int 0; extract_uint64; int 0x123456789abcdef; !=", 5)
+
+ testAccepts(t, `byte "hello"; extract 5 0; byte ""; ==`, 5)
+ testAccepts(t, `byte "hello"; int 5; int 0; extract3; byte ""; ==`, 5)
}
func TestExtractFlop(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
// fails in compiler
testProg(t, `byte 0xf000000000000000
@@ -2196,17 +2312,17 @@ func TestExtractFlop(t *testing.T) {
err = testPanics(t, `byte 0xf000000000000000
int 55
- extract16bits`, 5)
+ extract_uint16`, 5)
require.Contains(t, err.Error(), "extract range beyond length of string")
err = testPanics(t, `byte 0xf000000000000000
int 9
- extract32bits`, 5)
+ extract_uint32`, 5)
require.Contains(t, err.Error(), "extract range beyond length of string")
err = testPanics(t, `byte 0xf000000000000000
int 1
- extract64bits`, 5)
+ extract_uint64`, 5)
require.Contains(t, err.Error(), "extract range beyond length of string")
}
@@ -2214,6 +2330,8 @@ func TestLoadStore(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
+ testAccepts(t, "load 3; int 0; ==;", 1)
+
testAccepts(t, `int 37
int 37
store 1
@@ -2231,6 +2349,35 @@ load 1
&&`, 1)
}
+func TestLoadStoreStack(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ t.Parallel()
+ testAccepts(t, "int 3; loads; int 0; ==;", 5)
+ testAccepts(t, `int 37
+int 1
+int 37
+stores
+int 42
+byte 0xabbacafe
+stores
+int 37
+==
+int 0
+swap
+stores
+int 42
+loads
+byte 0xabbacafe
+==
+int 0
+loads
+int 1
+loads
++
+&&`, 5)
+}
+
func TestLoadStore2(t *testing.T) {
partitiontest.PartitionTest(t)
@@ -2355,7 +2502,7 @@ int 1`,
Proto: &proto,
Txn: &txgroup[j],
TxnGroup: txgroup,
- GroupIndex: j,
+ GroupIndex: uint64(j),
PastSideEffects: pastSideEffects,
}
}
@@ -2429,7 +2576,7 @@ int 1`,
Proto: &proto,
Txn: &txgroup[j],
TxnGroup: txgroup,
- GroupIndex: j,
+ GroupIndex: uint64(j),
PastSideEffects: pastSideEffects,
}
}
@@ -2502,7 +2649,7 @@ byte "txn 2"
Proto: &proto,
Txn: &txgroup[j],
TxnGroup: txgroup,
- GroupIndex: j,
+ GroupIndex: uint64(j),
PastSideEffects: pastSideEffects,
}
}
@@ -2582,44 +2729,6 @@ func TestCompares(t *testing.T) {
testAccepts(t, testCompareProgramText, 1)
}
-func TestKeccak256(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- t.Parallel()
- /*
- pip install sha3
- import sha3
- blob=b'fnord'
- sha3.keccak_256(blob).hexdigest()
- */
- progText := `byte 0x666E6F7264
-keccak256
-byte 0xc195eca25a6f4c82bfba0287082ddb0d602ae9230f9cf1f1a40b68f8e2c41567
-==`
- testAccepts(t, progText, 1)
-}
-
-func TestSHA512_256(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- t.Parallel()
- /*
- pip cryptography
- from cryptography.hazmat.backends import default_backend
- from cryptography.hazmat.primitives import hashes
- import base64
- digest = hashes.Hash(hashes.SHA512_256(), backend=default_backend())
- digest.update(b'fnord')
- base64.b16encode(digest.finalize())
- */
- progText := `byte 0x666E6F7264
-sha512_256
-
-byte 0x98D2C31612EA500279B6753E5F6E780CA63EBA8274049664DAD66A2565ED1D2A
-==`
- testAccepts(t, progText, 1)
-}
-
func TestSlowLogic(t *testing.T) {
partitiontest.PartitionTest(t)
@@ -2684,10 +2793,9 @@ func TestStackUnderflow(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(`int 1`, v)
+ ops := testProg(t, `int 1`, v)
ops.Program = append(ops.Program, 0x08) // +
- require.NoError(t, err)
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(t, err)
sb := strings.Builder{}
pass, err := Eval(ops.Program, defaultEvalParams(&sb, nil))
@@ -2707,10 +2815,9 @@ func TestWrongStackTypeRuntime(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(`int 1`, v)
- require.NoError(t, err)
+ ops := testProg(t, `int 1`, v)
ops.Program = append(ops.Program, 0x01, 0x15) // sha256, len
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(t, err)
sb := strings.Builder{}
pass, err := Eval(ops.Program, defaultEvalParams(&sb, nil))
@@ -2730,11 +2837,9 @@ func TestEqMismatch(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(`byte 0x1234
-int 1`, v)
- require.NoError(t, err)
+ ops := testProg(t, `byte 0x1234; int 1`, v)
ops.Program = append(ops.Program, 0x12) // ==
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(t, err) // TODO: Check should know the type stack was wrong
sb := strings.Builder{}
pass, err := Eval(ops.Program, defaultEvalParams(&sb, nil))
@@ -2754,11 +2859,9 @@ func TestNeqMismatch(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(`byte 0x1234
-int 1`, v)
- require.NoError(t, err)
+ ops := testProg(t, `byte 0x1234; int 1`, v)
ops.Program = append(ops.Program, 0x13) // !=
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(t, err) // TODO: Check should know the type stack was wrong
sb := strings.Builder{}
pass, err := Eval(ops.Program, defaultEvalParams(&sb, nil))
@@ -2778,11 +2881,9 @@ func TestWrongStackTypeRuntime2(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(`byte 0x1234
-int 1`, v)
- require.NoError(t, err)
+ ops := testProg(t, `byte 0x1234; int 1`, v)
ops.Program = append(ops.Program, 0x08) // +
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(t, err)
sb := strings.Builder{}
pass, _ := Eval(ops.Program, defaultEvalParams(&sb, nil))
@@ -2802,15 +2903,14 @@ func TestIllegalOp(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(`int 1`, v)
- require.NoError(t, err)
+ ops := testProg(t, `int 1`, v)
for opcode, spec := range opsByOpcode[v] {
if spec.op == nil {
ops.Program = append(ops.Program, byte(opcode))
break
}
}
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.Error(t, err)
sb := strings.Builder{}
pass, err := Eval(ops.Program, defaultEvalParams(&sb, nil))
@@ -2830,15 +2930,14 @@ func TestShortProgram(t *testing.T) {
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(`int 1
+ ops := testProg(t, `int 1
bnz done
done:
int 1
`, v)
- require.NoError(t, err)
// cut two last bytes - intc_1 and last byte of bnz
ops.Program = ops.Program[:len(ops.Program)-2]
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.Error(t, err)
sb := strings.Builder{}
pass, err := Eval(ops.Program, defaultEvalParams(&sb, nil))
@@ -2928,10 +3027,10 @@ func TestShortBytecblock2(t *testing.T) {
const panicString = "out of memory, buffer overrun, stack overflow, divide by zero, halt and catch fire"
-func opPanic(cx *evalContext) {
+func opPanic(cx *EvalContext) {
panic(panicString)
}
-func checkPanic(cx *evalContext) error {
+func checkPanic(cx *EvalContext) error {
panic(panicString)
}
@@ -3470,20 +3569,9 @@ func evalLoop(b *testing.B, runs int, program []byte) {
}
func benchmarkBasicProgram(b *testing.B, source string) {
- ops, err := AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(b, err)
- err = Check(ops.Program, defaultEvalParams(nil, nil))
- require.NoError(b, err)
- evalLoop(b, b.N, ops.Program)
-}
-
-func benchmarkExpensiveProgram(b *testing.B, source string) {
- ops, err := AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(b, err)
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ ops := testProg(b, source, AssemblerMaxVersion)
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(b, err)
- _, err = Eval(ops.Program, defaultEvalParams(nil, nil))
- require.Error(b, err) // excessive cost
evalLoop(b, b.N, ops.Program)
}
@@ -3498,9 +3586,8 @@ func benchmarkOperation(b *testing.B, prefix string, operation string, suffix st
inst := strings.Count(operation, ";") + strings.Count(operation, "\n")
source := prefix + ";" + strings.Repeat(operation+";", 2000) + ";" + suffix
source = strings.ReplaceAll(source, ";", "\n")
- ops, err := AssembleStringWithVersion(source, AssemblerMaxVersion)
- require.NoError(b, err)
- err = Check(ops.Program, defaultEvalParams(nil, nil))
+ ops := testProg(b, source, AssemblerMaxVersion)
+ err := Check(ops.Program, defaultEvalParams(nil, nil))
require.NoError(b, err)
evalLoop(b, runs, ops.Program)
b.ReportMetric(float64(inst)*15.0, "waste/op")
@@ -3511,8 +3598,10 @@ func BenchmarkUintMath(b *testing.B) {
{"pop1", "", "int 1234576; pop", "int 1"},
{"pop", "", "int 1234576; int 6712; pop; pop", "int 1"},
{"add", "", "int 1234576; int 6712; +; pop", "int 1"},
+ {"addw", "", "int 21276237623; int 32387238723; addw; pop; pop", "int 1"},
{"sub", "", "int 1234576; int 2; -; pop", "int 1"},
{"mul", "", "int 212; int 323; *; pop", "int 1"},
+ {"mulw", "", "int 21276237623; int 32387238723; mulw; pop; pop", "int 1"},
{"div", "", "int 736247364; int 892; /; pop", "int 1"},
{"divmodw", "", "int 736247364; int 892; int 126712; int 71672; divmodw; pop; pop; pop; pop", "int 1"},
{"sqrt", "", "int 736247364; sqrt; pop", "int 1"},
@@ -3602,22 +3691,6 @@ func BenchmarkBigMath(b *testing.B) {
}
}
-func BenchmarkHash(b *testing.B) {
- for _, hash := range []string{"sha256", "keccak256", "sha512_256"} {
- b.Run(hash+"-small", func(b *testing.B) { // hash 32 bytes
- benchmarkOperation(b, "int 32; bzero", hash, "pop; int 1")
- })
- b.Run(hash+"-med", func(b *testing.B) { // hash 128 bytes
- benchmarkOperation(b, "int 32; bzero",
- "dup; concat; dup; concat;"+hash, "pop; int 1")
- })
- b.Run(hash+"-big", func(b *testing.B) { // hash 512 bytes
- benchmarkOperation(b, "int 32; bzero",
- "dup; concat; dup; concat; dup; concat; dup; concat;"+hash, "pop; int 1")
- })
- }
-}
-
func BenchmarkAddx64(b *testing.B) {
progs := [][]string{
{"add long stack", addBenchmarkSource},
@@ -3634,123 +3707,6 @@ func BenchmarkNopPassx1(b *testing.B) {
benchmarkBasicProgram(b, "int 1")
}
-func BenchmarkSha256Raw(b *testing.B) {
- addr, _ := basics.UnmarshalChecksumAddress("OC6IROKUJ7YCU5NV76AZJEDKYQG33V2CJ7HAPVQ4ENTAGMLIOINSQ6EKGE")
- a := addr[:]
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- t := sha256.Sum256(a)
- a = t[:]
- }
-}
-
-func TestEd25519verify(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- t.Parallel()
- var s crypto.Seed
- crypto.RandBytes(s[:])
- c := crypto.GenerateSignatureSecrets(s)
- msg := "62fdfc072182654f163f5f0f9a621d729566c74d0aa413bf009c9800418c19cd"
- data, err := hex.DecodeString(msg)
- require.NoError(t, err)
- pk := basics.Address(c.SignatureVerifier)
- pkStr := pk.String()
-
- for v := uint64(1); v <= AssemblerMaxVersion; v++ {
- t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- ops, err := AssembleStringWithVersion(fmt.Sprintf(`arg 0
-arg 1
-addr %s
-ed25519verify`, pkStr), v)
- require.NoError(t, err)
- sig := c.Sign(Msg{
- ProgramHash: crypto.HashObj(Program(ops.Program)),
- Data: data[:],
- })
- var txn transactions.SignedTxn
- txn.Lsig.Logic = ops.Program
- txn.Lsig.Args = [][]byte{data[:], sig[:]}
- sb := strings.Builder{}
- pass, err := Eval(ops.Program, defaultEvalParams(&sb, &txn))
- if !pass {
- t.Log(hex.EncodeToString(ops.Program))
- t.Log(sb.String())
- }
- require.True(t, pass)
- require.NoError(t, err)
-
- // short sig will fail
- txn.Lsig.Args[1] = sig[1:]
- pass, err = Eval(ops.Program, defaultEvalParams(nil, &txn))
- require.False(t, pass)
- require.Error(t, err)
- isNotPanic(t, err)
-
- // flip a bit and it should not pass
- msg1 := "52fdfc072182654f163f5f0f9a621d729566c74d0aa413bf009c9800418c19cd"
- data1, err := hex.DecodeString(msg1)
- require.NoError(t, err)
- txn.Lsig.Args = [][]byte{data1, sig[:]}
- sb1 := strings.Builder{}
- pass1, err := Eval(ops.Program, defaultEvalParams(&sb1, &txn))
- require.False(t, pass1)
- require.NoError(t, err)
- isNotPanic(t, err)
- })
- }
-}
-
-func BenchmarkEd25519Verifyx1(b *testing.B) {
- //benchmark setup
- var data [][32]byte
- var programs [][]byte
- var signatures []crypto.Signature
-
- for i := 0; i < b.N; i++ {
- var buffer [32]byte //generate data to be signed
- crypto.RandBytes(buffer[:])
- data = append(data, buffer)
-
- var s crypto.Seed //generate programs and signatures
- crypto.RandBytes(s[:])
- secret := crypto.GenerateSignatureSecrets(s)
- pk := basics.Address(secret.SignatureVerifier)
- pkStr := pk.String()
- ops, err := AssembleStringWithVersion(fmt.Sprintf(`arg 0
-arg 1
-addr %s
-ed25519verify`, pkStr), AssemblerMaxVersion)
- require.NoError(b, err)
- programs = append(programs, ops.Program)
- sig := secret.Sign(Msg{
- ProgramHash: crypto.HashObj(Program(ops.Program)),
- Data: buffer[:],
- })
- signatures = append(signatures, sig)
- }
-
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- var txn transactions.SignedTxn
- txn.Lsig.Logic = programs[i]
- txn.Lsig.Args = [][]byte{data[i][:], signatures[i][:]}
- sb := strings.Builder{}
- ep := defaultEvalParams(&sb, &txn)
- pass, err := Eval(programs[i], ep)
- if !pass {
- b.Log(hex.EncodeToString(programs[i]))
- b.Log(sb.String())
- }
- if err != nil {
- require.NoError(b, err)
- }
- if !pass {
- require.True(b, pass)
- }
- }
-}
-
func BenchmarkCheckx5(b *testing.B) {
sourcePrograms := []string{
tlhcProgramText,
@@ -4234,6 +4190,7 @@ func testEvaluation(t *testing.T, program string, introduced uint64, tester eval
var outer error
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
+ t.Helper()
if v < introduced {
testProg(t, obfuscate(program), v, expect{0, "...was introduced..."})
return
@@ -4275,17 +4232,20 @@ func testEvaluation(t *testing.T, program string, introduced uint64, tester eval
}
func testAccepts(t *testing.T, program string, introduced uint64) {
+ t.Helper()
testEvaluation(t, program, introduced, func(pass bool, err error) bool {
return pass && err == nil
})
}
func testRejects(t *testing.T, program string, introduced uint64) {
+ t.Helper()
testEvaluation(t, program, introduced, func(pass bool, err error) bool {
// Returned False, but didn't panic
return !pass && err == nil
})
}
func testPanics(t *testing.T, program string, introduced uint64) error {
+ t.Helper()
return testEvaluation(t, program, introduced, func(pass bool, err error) bool {
// TEAL panic! not just reject at exit
return !pass && err != nil
@@ -4314,6 +4274,7 @@ func TestBits(t *testing.T) {
testPanics(t, "int 1; int 64; getbit; int 0; ==", 3)
testAccepts(t, "int 0; int 3; int 1; setbit; int 8; ==", 3)
+ testPanics(t, "int 0; int 3; int 2; setbit; pop; int 1", 3)
testAccepts(t, "int 8; int 3; getbit; int 1; ==", 3)
testAccepts(t, "int 15; int 3; int 0; setbit; int 7; ==", 3)
@@ -4355,6 +4316,7 @@ func TestBytes(t *testing.T) {
testPanics(t, `byte "john"; int 4; getbyte; int 1; ==`, 3) // past end
testAccepts(t, `byte "john"; int 2; int 105; setbyte; byte "join"; ==`, 3)
+ testPanics(t, `byte "john"; int 2; int 256; setbyte; pop; int 1;`, 3)
testPanics(t, `global ZeroAddress; dup; concat; int 64; int 7; setbyte; int 1; return`, 3)
testAccepts(t, `global ZeroAddress; dup; concat; int 63; int 7; setbyte; int 1; return`, 3)
@@ -4368,6 +4330,7 @@ func TestBytes(t *testing.T) {
}
func TestMethod(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
// Although 'method' is new around the time of v5, it is a
// pseudo-op, so it's ok to use it earlier, as it compiles to
@@ -4404,6 +4367,7 @@ func TestDig(t *testing.T) {
}
func TestCover(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testAccepts(t, "int 4; int 3; int 2; int 1; cover 0; int 1; ==; return", 5)
testAccepts(t, "int 4; int 3; int 2; int 1; cover 1; int 2; ==; return", 5)
@@ -4414,6 +4378,7 @@ func TestCover(t *testing.T) {
}
func TestUncover(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
testAccepts(t, "int 4; int 3; int 2; int 1; uncover 0; int 1; ==; return", 5)
testAccepts(t, "int 4; int 3; int 2; int 1; uncover 2; int 3; ==; return", 5)
@@ -4555,17 +4520,21 @@ func TestShifts(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
+ testAccepts(t, "int 1; int 0; shl; int 1; ==", 4)
testAccepts(t, "int 1; int 1; shl; int 2; ==", 4)
testAccepts(t, "int 1; int 2; shl; int 4; ==", 4)
testAccepts(t, "int 3; int 2; shl; int 12; ==", 4)
testAccepts(t, "int 2; int 63; shl; int 0; ==", 4)
+ testAccepts(t, "int 3; int 0; shr; int 3; ==", 4)
testAccepts(t, "int 1; int 1; shr; int 0; ==", 4)
testAccepts(t, "int 1; int 2; shr; int 0; ==", 4)
testAccepts(t, "int 3; int 1; shr; int 1; ==", 4)
testAccepts(t, "int 96; int 3; shr; int 12; ==", 4)
testAccepts(t, "int 8756675; int 63; shr; int 0; ==", 4)
+ testPanics(t, "int 8756675; int 64; shr; int 0; ==", 4)
+ testPanics(t, "int 8756675; int 64; shl; int 0; ==", 4)
}
func TestSqrt(t *testing.T) {
@@ -4605,6 +4574,10 @@ func TestExp(t *testing.T) {
testAccepts(t, "int 3; int 1; exp; int 3; ==", 4)
testAccepts(t, "int 96; int 3; exp; int 884736; ==", 4)
testPanics(t, "int 96; int 15; exp; int 884736; >", 4)
+
+ // These seem the same but check different code paths
+ testPanics(t, "int 2; int 64; exp; pop; int 1", 4)
+ testPanics(t, "int 4; int 32; exp; pop; int 1", 4)
}
func TestExpw(t *testing.T) {
@@ -4621,6 +4594,10 @@ func TestExpw(t *testing.T) {
testPanics(t, "int 64; int 22; expw; pop; pop; int 1", 4) // (2^6)^22 = 2^132
testAccepts(t, "int 97; int 15; expw; int 10271255586529954209; ==; assert; int 34328615749; ==;", 4)
+
+ testPanics(t, "int 2; int 128; expw; pop; pop; int 1", 4) // 2^128 is too big
+ // looks the same, but different code path
+ testPanics(t, "int 4; int 64; expw; pop; pop; int 1", 4) // 2^128 is too big
}
func TestBitLen(t *testing.T) {
@@ -4685,6 +4662,8 @@ func TestBytesCompare(t *testing.T) {
testAccepts(t, "byte 0x10; byte 0x10; b<; !", 4)
testAccepts(t, "byte 0x10; byte 0x10; b<=", 4)
+ testAccepts(t, "byte 0x10; int 64; bzero; b>", 4)
+ testPanics(t, "byte 0x10; int 65; bzero; b>", 4)
testAccepts(t, "byte 0x11; byte 0x10; b>", 4)
testAccepts(t, "byte 0x11; byte 0x0010; b>", 4)
@@ -4695,6 +4674,8 @@ func TestBytesCompare(t *testing.T) {
testAccepts(t, "byte 0x11; byte 0x11; b==", 4)
testAccepts(t, "byte 0x0011; byte 0x11; b==", 4)
testAccepts(t, "byte 0x11; byte 0x00000000000011; b==", 4)
+ testAccepts(t, "byte 0x00; int 64; bzero; b==", 4)
+ testPanics(t, "byte 0x00; int 65; bzero; b==", 4)
testAccepts(t, "byte 0x11; byte 0x00; b!=", 4)
testAccepts(t, "byte 0x0011; byte 0x1100; b!=", 4)
@@ -4726,6 +4707,9 @@ func TestBytesBits(t *testing.T) {
testAccepts(t, "int 3; bzero; byte 0x000000; ==", 4)
testAccepts(t, "int 33; bzero; byte 0x000000000000000000000000000000000000000000000000000000000000000000; ==", 4)
+
+ testAccepts(t, "int 4096; bzero; len; int 4096; ==", 4)
+ testPanics(t, "int 4097; bzero; len; int 4097; ==", 4)
}
func TestBytesConversions(t *testing.T) {
@@ -4745,8 +4729,8 @@ func TestLog(t *testing.T) {
Type: protocol.ApplicationCallTx,
},
}
- ledger := makeTestLedger(nil)
- ledger.newApp(txn.Txn.Receiver, 0, basics.AppParams{})
+ ledger := logictest.MakeLedger(nil)
+ ledger.NewApp(txn.Txn.Receiver, 0, basics.AppParams{})
sb := strings.Builder{}
ep := defaultEvalParams(&sb, &txn)
ep.Proto = &proto
@@ -4764,7 +4748,7 @@ func TestLog(t *testing.T) {
loglen: 2,
},
{
- source: fmt.Sprintf(`%s int 1`, strings.Repeat(`byte "a logging message"; log;`, config.MaxLogCalls)),
+ source: fmt.Sprintf(`%s int 1`, strings.Repeat(`byte "a logging message"; log;`, MaxLogCalls)),
loglen: MaxLogCalls,
},
{
@@ -4777,24 +4761,22 @@ func TestLog(t *testing.T) {
},
}
- //track expected number of logs in ep.Ledger
- count := 0
+ //track expected number of logs in cx.Logs
for i, s := range testCases {
ops := testProg(t, s.source, AssemblerMaxVersion)
err := CheckStateful(ops.Program, ep)
require.NoError(t, err, s)
- pass, err := EvalStateful(ops.Program, ep)
+ pass, cx, err := EvalStatefulCx(ops.Program, ep)
require.NoError(t, err)
require.True(t, pass)
- count += s.loglen
- require.Equal(t, len(ledger.logs), count)
+ require.Len(t, cx.Logs, s.loglen)
if i == len(testCases)-1 {
- require.Equal(t, strings.Repeat("a", MaxLogSize), ledger.logs[count-1].Message)
+ require.Equal(t, strings.Repeat("a", MaxLogSize), cx.Logs[0])
} else {
- for _, l := range ledger.logs[count-s.loglen:] {
- require.Equal(t, "a logging message", l.Message)
+ for _, l := range cx.Logs {
+ require.Equal(t, "a logging message", l)
}
}
}
@@ -4816,7 +4798,7 @@ func TestLog(t *testing.T) {
runMode: runModeApplication,
},
{
- source: fmt.Sprintf(`%s; int 1`, strings.Repeat(`byte "a"; log;`, config.MaxLogCalls+1)),
+ source: fmt.Sprintf(`%s; int 1`, strings.Repeat(`byte "a"; log;`, MaxLogCalls+1)),
errContains: "too many log calls",
runMode: runModeApplication,
},
diff --git a/data/transactions/logic/fields.go b/data/transactions/logic/fields.go
index bc242859e..32d29fd85 100644
--- a/data/transactions/logic/fields.go
+++ b/data/transactions/logic/fields.go
@@ -23,7 +23,7 @@ import (
"github.com/algorand/go-algorand/protocol"
)
-//go:generate stringer -type=TxnField,GlobalField,AssetParamsField,AppParamsField,AssetHoldingField,OnCompletionConstType -output=fields_string.go
+//go:generate stringer -type=TxnField,GlobalField,AssetParamsField,AppParamsField,AssetHoldingField,OnCompletionConstType,EcdsaCurve -output=fields_string.go
// TxnField is an enum type for `txn` and `gtxn`
type TxnField int
@@ -146,6 +146,21 @@ const (
// ExtraProgramPages AppParams.ExtraProgramPages
ExtraProgramPages
+ // Nonparticipation Transaction.Nonparticipation
+ Nonparticipation
+
+ // Logs Transaction.ApplyData.EvalDelta.Logs
+ Logs
+
+ // NumLogs len(Logs)
+ NumLogs
+
+ // CreatedAssetID Transaction.ApplyData.EvalDelta.ConfigAsset
+ CreatedAssetID
+
+ // CreatedApplicationID Transaction.ApplyData.EvalDelta.ApplicationID
+ CreatedApplicationID
+
invalidTxnField // fence for some setup that loops from Sender..invalidTxnField
)
@@ -169,88 +184,106 @@ func (s tfNameSpecMap) getExtraFor(name string) (extra string) {
}
type txnFieldSpec struct {
- field TxnField
- ftype StackType
- version uint64
+ field TxnField
+ ftype StackType
+ version uint64 // When this field become available to txn/gtxn. 0=always
+ itxVersion uint64 // When this field become available to itxn_field. 0=never
+ effects bool // Is this a field on the "effects"? That is, something in ApplyData
}
var txnFieldSpecs = []txnFieldSpec{
- {Sender, StackBytes, 0},
- {Fee, StackUint64, 0},
- {FirstValid, StackUint64, 0},
- {FirstValidTime, StackUint64, 0},
- {LastValid, StackUint64, 0},
- {Note, StackBytes, 0},
- {Lease, StackBytes, 0},
- {Receiver, StackBytes, 0},
- {Amount, StackUint64, 0},
- {CloseRemainderTo, StackBytes, 0},
- {VotePK, StackBytes, 0},
- {SelectionPK, StackBytes, 0},
- {VoteFirst, StackUint64, 0},
- {VoteLast, StackUint64, 0},
- {VoteKeyDilution, StackUint64, 0},
- {Type, StackBytes, 0},
- {TypeEnum, StackUint64, 0},
- {XferAsset, StackUint64, 0},
- {AssetAmount, StackUint64, 0},
- {AssetSender, StackBytes, 0},
- {AssetReceiver, StackBytes, 0},
- {AssetCloseTo, StackBytes, 0},
- {GroupIndex, StackUint64, 0},
- {TxID, StackBytes, 0},
- {ApplicationID, StackUint64, 2},
- {OnCompletion, StackUint64, 2},
- {ApplicationArgs, StackBytes, 2},
- {NumAppArgs, StackUint64, 2},
- {Accounts, StackBytes, 2},
- {NumAccounts, StackUint64, 2},
- {ApprovalProgram, StackBytes, 2},
- {ClearStateProgram, StackBytes, 2},
- {RekeyTo, StackBytes, 2},
- {ConfigAsset, StackUint64, 2},
- {ConfigAssetTotal, StackUint64, 2},
- {ConfigAssetDecimals, StackUint64, 2},
- {ConfigAssetDefaultFrozen, StackUint64, 2},
- {ConfigAssetUnitName, StackBytes, 2},
- {ConfigAssetName, StackBytes, 2},
- {ConfigAssetURL, StackBytes, 2},
- {ConfigAssetMetadataHash, StackBytes, 2},
- {ConfigAssetManager, StackBytes, 2},
- {ConfigAssetReserve, StackBytes, 2},
- {ConfigAssetFreeze, StackBytes, 2},
- {ConfigAssetClawback, StackBytes, 2},
- {FreezeAsset, StackUint64, 2},
- {FreezeAssetAccount, StackBytes, 2},
- {FreezeAssetFrozen, StackUint64, 2},
- {Assets, StackUint64, 3},
- {NumAssets, StackUint64, 3},
- {Applications, StackUint64, 3},
- {NumApplications, StackUint64, 3},
- {GlobalNumUint, StackUint64, 3},
- {GlobalNumByteSlice, StackUint64, 3},
- {LocalNumUint, StackUint64, 3},
- {LocalNumByteSlice, StackUint64, 3},
- {ExtraProgramPages, StackUint64, 4},
+ {Sender, StackBytes, 0, 5, false},
+ {Fee, StackUint64, 0, 5, false},
+ {FirstValid, StackUint64, 0, 0, false},
+ {FirstValidTime, StackUint64, 0, 0, false},
+ {LastValid, StackUint64, 0, 0, false},
+ {Note, StackBytes, 0, 0, false},
+ {Lease, StackBytes, 0, 0, false},
+ {Receiver, StackBytes, 0, 5, false},
+ {Amount, StackUint64, 0, 5, false},
+ {CloseRemainderTo, StackBytes, 0, 5, false},
+ {VotePK, StackBytes, 0, 0, false},
+ {SelectionPK, StackBytes, 0, 0, false},
+ {VoteFirst, StackUint64, 0, 0, false},
+ {VoteLast, StackUint64, 0, 0, false},
+ {VoteKeyDilution, StackUint64, 0, 0, false},
+ {Type, StackBytes, 0, 5, false},
+ {TypeEnum, StackUint64, 0, 5, false},
+ {XferAsset, StackUint64, 0, 5, false},
+ {AssetAmount, StackUint64, 0, 5, false},
+ {AssetSender, StackBytes, 0, 5, false},
+ {AssetReceiver, StackBytes, 0, 5, false},
+ {AssetCloseTo, StackBytes, 0, 5, false},
+ {GroupIndex, StackUint64, 0, 0, false},
+ {TxID, StackBytes, 0, 0, false},
+ {ApplicationID, StackUint64, 2, 0, false},
+ {OnCompletion, StackUint64, 2, 0, false},
+ {ApplicationArgs, StackBytes, 2, 0, false},
+ {NumAppArgs, StackUint64, 2, 0, false},
+ {Accounts, StackBytes, 2, 0, false},
+ {NumAccounts, StackUint64, 2, 0, false},
+ {ApprovalProgram, StackBytes, 2, 0, false},
+ {ClearStateProgram, StackBytes, 2, 0, false},
+ {RekeyTo, StackBytes, 2, 0, false},
+ {ConfigAsset, StackUint64, 2, 5, false},
+ {ConfigAssetTotal, StackUint64, 2, 5, false},
+ {ConfigAssetDecimals, StackUint64, 2, 5, false},
+ {ConfigAssetDefaultFrozen, StackUint64, 2, 5, false},
+ {ConfigAssetUnitName, StackBytes, 2, 5, false},
+ {ConfigAssetName, StackBytes, 2, 5, false},
+ {ConfigAssetURL, StackBytes, 2, 5, false},
+ {ConfigAssetMetadataHash, StackBytes, 2, 5, false},
+ {ConfigAssetManager, StackBytes, 2, 5, false},
+ {ConfigAssetReserve, StackBytes, 2, 5, false},
+ {ConfigAssetFreeze, StackBytes, 2, 5, false},
+ {ConfigAssetClawback, StackBytes, 2, 5, false},
+ {FreezeAsset, StackUint64, 2, 5, false},
+ {FreezeAssetAccount, StackBytes, 2, 5, false},
+ {FreezeAssetFrozen, StackUint64, 2, 5, false},
+ {Assets, StackUint64, 3, 0, false},
+ {NumAssets, StackUint64, 3, 0, false},
+ {Applications, StackUint64, 3, 0, false},
+ {NumApplications, StackUint64, 3, 0, false},
+ {GlobalNumUint, StackUint64, 3, 0, false},
+ {GlobalNumByteSlice, StackUint64, 3, 0, false},
+ {LocalNumUint, StackUint64, 3, 0, false},
+ {LocalNumByteSlice, StackUint64, 3, 0, false},
+ {ExtraProgramPages, StackUint64, 4, 0, false},
+ {Nonparticipation, StackUint64, 5, 0, false},
+
+ {Logs, StackBytes, 5, 5, true},
+ {NumLogs, StackUint64, 5, 5, true},
+ {CreatedAssetID, StackUint64, 5, 5, true},
+ {CreatedApplicationID, StackUint64, 5, 5, true},
}
// TxnaFieldNames are arguments to the 'txna' opcode
// It is a subset of txn transaction fields so initialized here in-place
-var TxnaFieldNames = []string{ApplicationArgs.String(), Accounts.String(), Assets.String(), Applications.String()}
+var TxnaFieldNames = []string{ApplicationArgs.String(), Accounts.String(), Assets.String(), Applications.String(), Logs.String()}
-// TxnaFieldTypes is StackBytes or StackUint64 parallel to TxnFieldNames
+// TxnaFieldTypes is StackBytes or StackUint64 parallel to TxnaFieldNames
var TxnaFieldTypes = []StackType{
txnaFieldSpecByField[ApplicationArgs].ftype,
txnaFieldSpecByField[Accounts].ftype,
txnaFieldSpecByField[Assets].ftype,
txnaFieldSpecByField[Applications].ftype,
+ txnaFieldSpecByField[Logs].ftype,
}
var txnaFieldSpecByField = map[TxnField]txnFieldSpec{
- ApplicationArgs: {ApplicationArgs, StackBytes, 2},
- Accounts: {Accounts, StackBytes, 2},
- Assets: {Assets, StackUint64, 3},
- Applications: {Applications, StackUint64, 3},
+ ApplicationArgs: {ApplicationArgs, StackBytes, 2, 0, false},
+ Accounts: {Accounts, StackBytes, 2, 0, false},
+ Assets: {Assets, StackUint64, 3, 0, false},
+ Applications: {Applications, StackUint64, 3, 0, false},
+
+ Logs: {Logs, StackBytes, 5, 5, true},
+}
+
+var innerTxnTypes = map[string]protocol.TxType{
+ string(protocol.PaymentTx): protocol.PaymentTx,
+ string(protocol.AssetTransferTx): protocol.AssetTransferTx,
+ string(protocol.AssetConfigTx): protocol.AssetConfigTx,
+ string(protocol.AssetFreezeTx): protocol.AssetFreezeTx,
}
// TxnTypeNames is the values of Txn.Type in enum order
@@ -327,6 +360,13 @@ const (
// CreatorAddress [32]byte
CreatorAddress
+ // v5
+
+ // CurrentApplicationAddress [32]byte
+ CurrentApplicationAddress
+ // GroupID [32]byte
+ GroupID
+
invalidGlobalField
)
@@ -354,6 +394,8 @@ var globalFieldSpecs = []globalFieldSpec{
{LatestTimestamp, StackUint64, runModeApplication, 2},
{CurrentApplicationID, StackUint64, runModeApplication, 2},
{CreatorAddress, StackBytes, runModeApplication, 3},
+ {CurrentApplicationAddress, StackBytes, runModeApplication, 5},
+ {GroupID, StackBytes, modeAny, 5},
}
// GlobalFieldSpecByField maps GlobalField to spec
@@ -370,6 +412,41 @@ func (s gfNameSpecMap) getExtraFor(name string) (extra string) {
return
}
+// EcdsaCurve is an enum for `ecdsa_` opcodes
+type EcdsaCurve int
+
+const (
+ // Secp256k1 curve for bitcoin/ethereum
+ Secp256k1 EcdsaCurve = iota
+ invalidEcdsaCurve
+)
+
+// EcdsaCurveNames are arguments to the 'ecdsa_' opcode
+var EcdsaCurveNames []string
+
+type ecdsaCurveSpec struct {
+ field EcdsaCurve
+ version uint64
+}
+
+var ecdsaCurveSpecs = []ecdsaCurveSpec{
+ {Secp256k1, 5},
+}
+
+var ecdsaCurveSpecByField map[EcdsaCurve]ecdsaCurveSpec
+var ecdsaCurveSpecByName ecDsaCurveNameSpecMap
+
+// simple interface used by doc generator for fields versioning
+type ecDsaCurveNameSpecMap map[string]ecdsaCurveSpec
+
+func (s ecDsaCurveNameSpecMap) getExtraFor(name string) (extra string) {
+ // Uses 5 here because ecdsa fields were introduced in 5
+ if s[name].version > 5 {
+ extra = fmt.Sprintf("LogicSigVersion >= %d.", s[name].version)
+ }
+ return
+}
+
// AssetHoldingField is an enum for `asset_holding_get` opcode
type AssetHoldingField int
@@ -508,6 +585,9 @@ const (
// AppCreator is not *in* the Params, but it is uniquely determined.
AppCreator
+ // AppAddress is also not *in* the Params, but can be derived
+ AppAddress
+
invalidAppParamsField
)
@@ -532,6 +612,7 @@ var appParamsFieldSpecs = []appParamsFieldSpec{
{AppLocalNumByteSlice, StackUint64, 5},
{AppExtraProgramPages, StackUint64, 5},
{AppCreator, StackBytes, 5},
+ {AppAddress, StackBytes, 5},
}
var appParamsFieldSpecByField map[AppParamsField]appParamsFieldSpec
@@ -541,7 +622,7 @@ var appParamsFieldSpecByName appNameSpecMap
type appNameSpecMap map[string]appParamsFieldSpec
func (s appNameSpecMap) getExtraFor(name string) (extra string) {
- // Uses 2 here because app fields were introduced in 5
+ // Uses 5 here because app fields were introduced in 5
if s[name].version > 5 {
extra = fmt.Sprintf("LogicSigVersion >= %d.", s[name].version)
}
@@ -582,6 +663,20 @@ func init() {
globalFieldSpecByName[gfn] = globalFieldSpecByField[GlobalField(i)]
}
+ EcdsaCurveNames = make([]string, int(invalidEcdsaCurve))
+ for i := Secp256k1; i < invalidEcdsaCurve; i++ {
+ EcdsaCurveNames[int(i)] = i.String()
+ }
+ ecdsaCurveSpecByField = make(map[EcdsaCurve]ecdsaCurveSpec, len(EcdsaCurveNames))
+ for _, s := range ecdsaCurveSpecs {
+ ecdsaCurveSpecByField[s.field] = s
+ }
+
+ ecdsaCurveSpecByName = make(ecDsaCurveNameSpecMap, len(EcdsaCurveNames))
+ for i, ahfn := range EcdsaCurveNames {
+ ecdsaCurveSpecByName[ahfn] = ecdsaCurveSpecByField[EcdsaCurve(i)]
+ }
+
AssetHoldingFieldNames = make([]string, int(invalidAssetHoldingField))
for i := AssetBalance; i < invalidAssetHoldingField; i++ {
AssetHoldingFieldNames[int(i)] = i.String()
diff --git a/data/transactions/logic/fields_string.go b/data/transactions/logic/fields_string.go
index c3fa22576..82abacb94 100644
--- a/data/transactions/logic/fields_string.go
+++ b/data/transactions/logic/fields_string.go
@@ -1,4 +1,4 @@
-// Code generated by "stringer -type=TxnField,GlobalField,AssetParamsField,AppParamsField,AssetHoldingField,OnCompletionConstType -output=fields_string.go"; DO NOT EDIT.
+// Code generated by "stringer -type=TxnField,GlobalField,AssetParamsField,AppParamsField,AssetHoldingField,OnCompletionConstType,EcdsaCurve -output=fields_string.go"; DO NOT EDIT.
package logic
@@ -65,12 +65,17 @@ func _() {
_ = x[LocalNumUint-54]
_ = x[LocalNumByteSlice-55]
_ = x[ExtraProgramPages-56]
- _ = x[invalidTxnField-57]
+ _ = x[Nonparticipation-57]
+ _ = x[Logs-58]
+ _ = x[NumLogs-59]
+ _ = x[CreatedAssetID-60]
+ _ = x[CreatedApplicationID-61]
+ _ = x[invalidTxnField-62]
}
-const _TxnField_name = "SenderFeeFirstValidFirstValidTimeLastValidNoteLeaseReceiverAmountCloseRemainderToVotePKSelectionPKVoteFirstVoteLastVoteKeyDilutionTypeTypeEnumXferAssetAssetAmountAssetSenderAssetReceiverAssetCloseToGroupIndexTxIDApplicationIDOnCompletionApplicationArgsNumAppArgsAccountsNumAccountsApprovalProgramClearStateProgramRekeyToConfigAssetConfigAssetTotalConfigAssetDecimalsConfigAssetDefaultFrozenConfigAssetUnitNameConfigAssetNameConfigAssetURLConfigAssetMetadataHashConfigAssetManagerConfigAssetReserveConfigAssetFreezeConfigAssetClawbackFreezeAssetFreezeAssetAccountFreezeAssetFrozenAssetsNumAssetsApplicationsNumApplicationsGlobalNumUintGlobalNumByteSliceLocalNumUintLocalNumByteSliceExtraProgramPagesinvalidTxnField"
+const _TxnField_name = "SenderFeeFirstValidFirstValidTimeLastValidNoteLeaseReceiverAmountCloseRemainderToVotePKSelectionPKVoteFirstVoteLastVoteKeyDilutionTypeTypeEnumXferAssetAssetAmountAssetSenderAssetReceiverAssetCloseToGroupIndexTxIDApplicationIDOnCompletionApplicationArgsNumAppArgsAccountsNumAccountsApprovalProgramClearStateProgramRekeyToConfigAssetConfigAssetTotalConfigAssetDecimalsConfigAssetDefaultFrozenConfigAssetUnitNameConfigAssetNameConfigAssetURLConfigAssetMetadataHashConfigAssetManagerConfigAssetReserveConfigAssetFreezeConfigAssetClawbackFreezeAssetFreezeAssetAccountFreezeAssetFrozenAssetsNumAssetsApplicationsNumApplicationsGlobalNumUintGlobalNumByteSliceLocalNumUintLocalNumByteSliceExtraProgramPagesNonparticipationLogsNumLogsCreatedAssetIDCreatedApplicationIDinvalidTxnField"
-var _TxnField_index = [...]uint16{0, 6, 9, 19, 33, 42, 46, 51, 59, 65, 81, 87, 98, 107, 115, 130, 134, 142, 151, 162, 173, 186, 198, 208, 212, 225, 237, 252, 262, 270, 281, 296, 313, 320, 331, 347, 366, 390, 409, 424, 438, 461, 479, 497, 514, 533, 544, 562, 579, 585, 594, 606, 621, 634, 652, 664, 681, 698, 713}
+var _TxnField_index = [...]uint16{0, 6, 9, 19, 33, 42, 46, 51, 59, 65, 81, 87, 98, 107, 115, 130, 134, 142, 151, 162, 173, 186, 198, 208, 212, 225, 237, 252, 262, 270, 281, 296, 313, 320, 331, 347, 366, 390, 409, 424, 438, 461, 479, 497, 514, 533, 544, 562, 579, 585, 594, 606, 621, 634, 652, 664, 681, 698, 714, 718, 725, 739, 759, 774}
func (i TxnField) String() string {
if i < 0 || i >= TxnField(len(_TxnField_index)-1) {
@@ -92,12 +97,14 @@ func _() {
_ = x[LatestTimestamp-7]
_ = x[CurrentApplicationID-8]
_ = x[CreatorAddress-9]
- _ = x[invalidGlobalField-10]
+ _ = x[CurrentApplicationAddress-10]
+ _ = x[GroupID-11]
+ _ = x[invalidGlobalField-12]
}
-const _GlobalField_name = "MinTxnFeeMinBalanceMaxTxnLifeZeroAddressGroupSizeLogicSigVersionRoundLatestTimestampCurrentApplicationIDCreatorAddressinvalidGlobalField"
+const _GlobalField_name = "MinTxnFeeMinBalanceMaxTxnLifeZeroAddressGroupSizeLogicSigVersionRoundLatestTimestampCurrentApplicationIDCreatorAddressCurrentApplicationAddressGroupIDinvalidGlobalField"
-var _GlobalField_index = [...]uint8{0, 9, 19, 29, 40, 49, 64, 69, 84, 104, 118, 136}
+var _GlobalField_index = [...]uint8{0, 9, 19, 29, 40, 49, 64, 69, 84, 104, 118, 143, 150, 168}
func (i GlobalField) String() string {
if i >= GlobalField(len(_GlobalField_index)-1) {
@@ -146,12 +153,13 @@ func _() {
_ = x[AppLocalNumByteSlice-5]
_ = x[AppExtraProgramPages-6]
_ = x[AppCreator-7]
- _ = x[invalidAppParamsField-8]
+ _ = x[AppAddress-8]
+ _ = x[invalidAppParamsField-9]
}
-const _AppParamsField_name = "AppApprovalProgramAppClearStateProgramAppGlobalNumUintAppGlobalNumByteSliceAppLocalNumUintAppLocalNumByteSliceAppExtraProgramPagesAppCreatorinvalidAppParamsField"
+const _AppParamsField_name = "AppApprovalProgramAppClearStateProgramAppGlobalNumUintAppGlobalNumByteSliceAppLocalNumUintAppLocalNumByteSliceAppExtraProgramPagesAppCreatorAppAddressinvalidAppParamsField"
-var _AppParamsField_index = [...]uint8{0, 18, 38, 54, 75, 90, 110, 130, 140, 161}
+var _AppParamsField_index = [...]uint8{0, 18, 38, 54, 75, 90, 110, 130, 140, 150, 171}
func (i AppParamsField) String() string {
if i < 0 || i >= AppParamsField(len(_AppParamsField_index)-1) {
@@ -201,3 +209,21 @@ func (i OnCompletionConstType) String() string {
}
return _OnCompletionConstType_name[_OnCompletionConstType_index[i]:_OnCompletionConstType_index[i+1]]
}
+func _() {
+ // An "invalid array index" compiler error signifies that the constant values have changed.
+ // Re-run the stringer command to generate them again.
+ var x [1]struct{}
+ _ = x[Secp256k1-0]
+ _ = x[invalidEcdsaCurve-1]
+}
+
+const _EcdsaCurve_name = "Secp256k1invalidEcdsaCurve"
+
+var _EcdsaCurve_index = [...]uint8{0, 9, 26}
+
+func (i EcdsaCurve) String() string {
+ if i < 0 || i >= EcdsaCurve(len(_EcdsaCurve_index)-1) {
+ return "EcdsaCurve(" + strconv.FormatInt(int64(i), 10) + ")"
+ }
+ return _EcdsaCurve_name[_EcdsaCurve_index[i]:_EcdsaCurve_index[i+1]]
+}
diff --git a/data/transactions/logic/fields_test.go b/data/transactions/logic/fields_test.go
index e88f3820f..4a62d31cf 100644
--- a/data/transactions/logic/fields_test.go
+++ b/data/transactions/logic/fields_test.go
@@ -23,10 +23,12 @@ import (
"github.com/stretchr/testify/require"
"github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/transactions/logictest"
"github.com/algorand/go-algorand/test/partitiontest"
)
func TestArrayFields(t *testing.T) {
+ partitiontest.PartitionTest(t)
require.Equal(t, len(TxnaFieldNames), len(TxnaFieldTypes))
require.Equal(t, len(txnaFieldSpecByField), len(TxnaFieldTypes))
}
@@ -45,7 +47,7 @@ func TestGlobalFieldsVersions(t *testing.T) {
}
require.Greater(t, len(fields), 1)
- ledger := makeTestLedger(nil)
+ ledger := logictest.MakeLedger(nil)
for _, field := range fields {
text := fmt.Sprintf("global %s", field.field.String())
// check assembler fails if version before introduction
@@ -109,7 +111,7 @@ func TestTxnFieldVersions(t *testing.T) {
}
txnaVersion := uint64(appsEnabledVersion)
- ledger := makeTestLedger(nil)
+ ledger := logictest.MakeLedger(nil)
txn := makeSampleTxn()
// We'll reject too early if we have a nonzero RekeyTo, because that
// field must be zero for every txn in the group if this is an old
diff --git a/data/transactions/logic/opcodes.go b/data/transactions/logic/opcodes.go
index 2ab59ed9c..d45dd25fb 100644
--- a/data/transactions/logic/opcodes.go
+++ b/data/transactions/logic/opcodes.go
@@ -77,6 +77,12 @@ func varies(checker opCheckFunc, name string, kind immKind) opDetails {
return opDetails{1, 0, checker, []immediate{{name, kind}}, nil}
}
+func costlyImm(cost int, names ...string) opDetails {
+ opd := immediates(names...)
+ opd.Cost = cost
+ return opd
+}
+
// immType describes the immediate arguments to an opcode
type immKind byte
@@ -115,7 +121,6 @@ var byteInt = StackTypes{StackBytes, StackUint64}
var byteIntInt = StackTypes{StackBytes, StackUint64, StackUint64}
var oneInt = StackTypes{StackUint64}
var twoInts = StackTypes{StackUint64, StackUint64}
-var threeInts = StackTypes{StackUint64, StackUint64, StackUint64}
var oneAny = StackTypes{StackAny}
var twoAny = StackTypes{StackAny, StackAny}
var anyInt = StackTypes{StackAny, StackUint64}
@@ -143,6 +148,11 @@ var OpSpecs = []OpSpec{
{0x04, "ed25519verify", opEd25519verify, asmDefault, disDefault, threeBytes, oneInt, 1, runModeSignature, costly(1900)},
{0x04, "ed25519verify", opEd25519verify, asmDefault, disDefault, threeBytes, oneInt, 5, modeAny, costly(1900)},
+
+ {0x05, "ecdsa_verify", opEcdsaVerify, assembleEcdsa, disEcdsa, threeBytes.plus(twoBytes), oneInt, 5, modeAny, costlyImm(1700, "v")},
+ {0x06, "ecdsa_pk_decompress", opEcdsaPkDecompress, assembleEcdsa, disEcdsa, oneBytes, twoBytes, 5, modeAny, costlyImm(650, "v")},
+ {0x07, "ecdsa_pk_recover", opEcdsaPkRecover, assembleEcdsa, disEcdsa, oneBytes.plus(oneInt).plus(twoBytes), twoBytes, 5, modeAny, costlyImm(2000, "v")},
+
{0x08, "+", opPlus, asmDefault, disDefault, twoInts, oneInt, 1, modeAny, opDefault},
{0x09, "-", opMinus, asmDefault, disDefault, twoInts, oneInt, 1, modeAny, opDefault},
{0x0a, "/", opDiv, asmDefault, disDefault, twoInts, oneInt, 1, modeAny, opDefault},
@@ -207,6 +217,10 @@ var OpSpecs = []OpSpec{
{0x3c, "gaid", opGaid, asmDefault, disDefault, nil, oneInt, 4, runModeApplication, immediates("t")},
{0x3d, "gaids", opGaids, asmDefault, disDefault, oneInt, oneInt, 4, runModeApplication, opDefault},
+ // Like load/store, but scratch slot taken from TOS instead of immediate
+ {0x3e, "loads", opLoads, asmDefault, disDefault, oneInt, oneAny, 5, modeAny, opDefault},
+ {0x3f, "stores", opStores, asmDefault, disDefault, oneInt.plus(oneAny), nil, 5, modeAny, opDefault},
+
{0x40, "bnz", opBnz, assembleBranch, disBranch, oneInt, nil, 1, modeAny, opBranch},
{0x41, "bz", opBz, assembleBranch, disBranch, oneInt, nil, 2, modeAny, opBranch},
{0x42, "b", opB, assembleBranch, disBranch, nil, nil, 2, modeAny, opBranch},
@@ -232,9 +246,9 @@ var OpSpecs = []OpSpec{
{0x56, "setbyte", opSetByte, asmDefault, disDefault, byteIntInt, oneBytes, 3, modeAny, opDefault},
{0x57, "extract", opExtract, asmDefault, disDefault, oneBytes, oneBytes, 5, modeAny, immediates("s", "l")},
{0x58, "extract3", opExtract3, asmDefault, disDefault, byteIntInt, oneBytes, 5, modeAny, opDefault},
- {0x59, "extract16bits", opExtract16Bits, asmDefault, disDefault, byteInt, oneInt, 5, modeAny, opDefault},
- {0x5a, "extract32bits", opExtract32Bits, asmDefault, disDefault, byteInt, oneInt, 5, modeAny, opDefault},
- {0x5b, "extract64bits", opExtract64Bits, asmDefault, disDefault, byteInt, oneInt, 5, modeAny, opDefault},
+ {0x59, "extract_uint16", opExtract16Bits, asmDefault, disDefault, byteInt, oneInt, 5, modeAny, opDefault},
+ {0x5a, "extract_uint32", opExtract32Bits, asmDefault, disDefault, byteInt, oneInt, 5, modeAny, opDefault},
+ {0x5b, "extract_uint64", opExtract64Bits, asmDefault, disDefault, byteInt, oneInt, 5, modeAny, opDefault},
{0x60, "balance", opBalance, asmDefault, disDefault, oneInt, oneInt, 2, runModeApplication, opDefault},
{0x60, "balance", opBalance, asmDefault, disDefault, oneAny, oneInt, directRefEnabledVersion, runModeApplication, opDefault},
@@ -296,8 +310,19 @@ var OpSpecs = []OpSpec{
{0xae, "b~", opBytesBitNot, asmDefault, disDefault, oneBytes, oneBytes, 4, modeAny, costly(4)},
{0xaf, "bzero", opBytesZero, asmDefault, disDefault, oneInt, oneBytes, 4, modeAny, opDefault},
- // ABI support opcodes.
+ // AVM "effects"
{0xb0, "log", opLog, asmDefault, disDefault, oneBytes, nil, 5, runModeApplication, opDefault},
+ {0xb1, "itxn_begin", opTxBegin, asmDefault, disDefault, nil, nil, 5, runModeApplication, opDefault},
+ {0xb2, "itxn_field", opTxField, asmTxField, disTxField, oneAny, nil, 5, runModeApplication, stacky(typeTxField, "f")},
+ {0xb3, "itxn_submit", opTxSubmit, asmDefault, disDefault, nil, nil, 5, runModeApplication, opDefault},
+ {0xb4, "itxn", opItxn, asmItxn, disTxn, nil, oneAny, 5, runModeApplication, immediates("f")},
+ {0xb5, "itxna", opItxna, asmItxna, disTxna, nil, oneAny, 5, runModeApplication, immediates("f", "i")},
+
+ // Dynamic indexing
+ {0xc0, "txnas", opTxnas, assembleTxnas, disTxn, oneInt, oneAny, 5, modeAny, immediates("f")},
+ {0xc1, "gtxnas", opGtxnas, assembleGtxnas, disGtxn, oneInt, oneAny, 5, modeAny, immediates("t", "f")},
+ {0xc2, "gtxnsas", opGtxnsas, assembleGtxnsas, disTxn, twoInts, oneAny, 5, modeAny, immediates("f")},
+ {0xc3, "args", opArgs, asmDefault, disDefault, oneInt, oneBytes, 5, runModeSignature, opDefault},
}
type sortByOpcode []OpSpec
diff --git a/data/transactions/logic/opcodes_test.go b/data/transactions/logic/opcodes_test.go
index c894e1247..b5e762785 100644
--- a/data/transactions/logic/opcodes_test.go
+++ b/data/transactions/logic/opcodes_test.go
@@ -81,7 +81,8 @@ func TestOpcodesByVersionReordered(t *testing.T) {
}
func TestOpcodesByVersion(t *testing.T) {
- partitiontest.PartitionTest(t)
+ // partitiontest.PartitionTest(t)
+ // has partitioning in the TestOpcodesByVersionReordered()
// Make a copy of the OpSpecs to check if OpcodesByVersion will change it
OpSpecs2 := make([]OpSpec, len(OpSpecs))
diff --git a/data/transactions/logictest/ledger.go b/data/transactions/logictest/ledger.go
new file mode 100644
index 000000000..5d75b210f
--- /dev/null
+++ b/data/transactions/logictest/ledger.go
@@ -0,0 +1,783 @@
+// Copyright (C) 2019-2021 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
+
+package logictest
+
+import (
+ "fmt"
+ "math/rand"
+
+ "github.com/algorand/go-algorand/config"
+ "github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/transactions"
+ "github.com/algorand/go-algorand/protocol"
+)
+
+type balanceRecord struct {
+ addr basics.Address
+ auth basics.Address
+ balance uint64
+ locals map[basics.AppIndex]basics.TealKeyValue
+ holdings map[basics.AssetIndex]basics.AssetHolding
+ mods map[basics.AppIndex]map[string]basics.ValueDelta
+}
+
+func makeBalanceRecord(addr basics.Address, balance uint64) balanceRecord {
+ br := balanceRecord{
+ addr: addr,
+ balance: balance,
+ locals: make(map[basics.AppIndex]basics.TealKeyValue),
+ holdings: make(map[basics.AssetIndex]basics.AssetHolding),
+ mods: make(map[basics.AppIndex]map[string]basics.ValueDelta),
+ }
+ return br
+}
+
+// In our test ledger, we don't store the creatables with their
+// creators, so we need to carry the creator around with them.
+type appParams struct {
+ basics.AppParams
+ Creator basics.Address
+}
+
+type asaParams struct {
+ basics.AssetParams
+ Creator basics.Address
+}
+
+// Ledger is a convenient mock ledger that is used by
+// data/transactions/logic It is in its own package so that it can be
+// used by people developing teal code that need a fast testing setup,
+// rather than running against a real network. It also might be
+// expanded to support the Balances interface so that we have fewer
+// mocks doing similar things. By putting it here, it is publicly
+// exported, but will not be imported by non-test code, so won't bloat
+// binary.
+type Ledger struct {
+ balances map[basics.Address]balanceRecord
+ applications map[basics.AppIndex]appParams
+ assets map[basics.AssetIndex]asaParams
+ trackedCreatables map[int]basics.CreatableIndex
+ appID basics.AppIndex
+ mods map[basics.AppIndex]map[string]basics.ValueDelta
+ rnd basics.Round
+}
+
+// MakeLedger constructs a Ledger with the given balances.
+func MakeLedger(balances map[basics.Address]uint64) *Ledger {
+ l := new(Ledger)
+ l.balances = make(map[basics.Address]balanceRecord)
+ for addr, balance := range balances {
+ l.NewAccount(addr, balance)
+ }
+ l.applications = make(map[basics.AppIndex]appParams)
+ l.assets = make(map[basics.AssetIndex]asaParams)
+ l.trackedCreatables = make(map[int]basics.CreatableIndex)
+ l.mods = make(map[basics.AppIndex]map[string]basics.ValueDelta)
+ return l
+}
+
+// Reset removes all of the mods created by previous AVM execution
+func (l *Ledger) Reset() {
+ l.mods = make(map[basics.AppIndex]map[string]basics.ValueDelta)
+ for addr, br := range l.balances {
+ br.mods = make(map[basics.AppIndex]map[string]basics.ValueDelta)
+ l.balances[addr] = br
+ }
+}
+
+// NewAccount adds a new account with a given balance to the Ledger.
+func (l *Ledger) NewAccount(addr basics.Address, balance uint64) {
+ l.balances[addr] = makeBalanceRecord(addr, balance)
+}
+
+// NewApp add a new AVM app to the Ledger, and arranges so that future
+// executions will act as though they are that app. It only sets up
+// the id and schema, it inserts no code, since testing will want to
+// try many different code sequences.
+func (l *Ledger) NewApp(creator basics.Address, appID basics.AppIndex, params basics.AppParams) {
+ l.appID = appID
+ params = params.Clone()
+ if params.GlobalState == nil {
+ params.GlobalState = make(basics.TealKeyValue)
+ }
+ l.applications[appID] = appParams{
+ Creator: creator,
+ AppParams: params.Clone(),
+ }
+ br, ok := l.balances[creator]
+ if !ok {
+ br = makeBalanceRecord(creator, 0)
+ }
+ br.locals[appID] = make(map[string]basics.TealValue)
+ l.balances[creator] = br
+}
+
+// NewAsset adds an asset with the given id and params to the ledger.
+func (l *Ledger) NewAsset(creator basics.Address, assetID basics.AssetIndex, params basics.AssetParams) {
+ l.assets[assetID] = asaParams{
+ Creator: creator,
+ AssetParams: params,
+ }
+ br, ok := l.balances[creator]
+ if !ok {
+ br = makeBalanceRecord(creator, 0)
+ }
+ br.holdings[assetID] = basics.AssetHolding{Amount: params.Total, Frozen: params.DefaultFrozen}
+ l.balances[creator] = br
+}
+
+// freshID gets a new creatable ID that isn't in use
+func (l *Ledger) freshID() uint64 {
+ for try := l.appID + 1; true; try++ {
+ if _, ok := l.assets[basics.AssetIndex(try)]; ok {
+ continue
+ }
+ if _, ok := l.applications[basics.AppIndex(try)]; ok {
+ continue
+ }
+ return uint64(try)
+ }
+ panic("wow")
+}
+
+// NewHolding sets the ASA balance of a given account.
+func (l *Ledger) NewHolding(addr basics.Address, assetID uint64, amount uint64, frozen bool) {
+ br, ok := l.balances[addr]
+ if !ok {
+ br = makeBalanceRecord(addr, 0)
+ }
+ br.holdings[basics.AssetIndex(assetID)] = basics.AssetHolding{Amount: amount, Frozen: frozen}
+ l.balances[addr] = br
+}
+
+// NewLocals essentially "opts in" an address to an app id.
+func (l *Ledger) NewLocals(addr basics.Address, appID uint64) {
+ l.balances[addr].locals[basics.AppIndex(appID)] = basics.TealKeyValue{}
+}
+
+// NewLocal sets a local value of an app on an address
+func (l *Ledger) NewLocal(addr basics.Address, appID uint64, key string, value basics.TealValue) {
+ l.balances[addr].locals[basics.AppIndex(appID)][key] = value
+}
+
+// NoLocal removes a key from an address locals for an app.
+func (l *Ledger) NoLocal(addr basics.Address, appID uint64, key string) {
+ delete(l.balances[addr].locals[basics.AppIndex(appID)], key)
+}
+
+// NewGlobal sets a global value for an app
+func (l *Ledger) NewGlobal(appID uint64, key string, value basics.TealValue) {
+ l.applications[basics.AppIndex(appID)].GlobalState[key] = value
+}
+
+// NoGlobal removes a global key for an app
+func (l *Ledger) NoGlobal(appID uint64, key string) {
+ delete(l.applications[basics.AppIndex(appID)].GlobalState, key)
+}
+
+// Rekey sets the authAddr for an address.
+func (l *Ledger) Rekey(addr basics.Address, auth basics.Address) {
+ if br, ok := l.balances[addr]; ok {
+ br.auth = auth
+ l.balances[addr] = br
+ }
+}
+
+// Round gives the current Round of the test ledger, which is random but consistent
+func (l *Ledger) Round() basics.Round {
+ return l.round()
+}
+
+// LatestTimestamp gives a uint64, chosen randomly. It should
+// probably increase monotonically, but no tests care yet.
+func (l *Ledger) LatestTimestamp() int64 {
+ return int64(rand.Uint32() + 1)
+}
+
+// Balance returns the value in an account, as MicroAlgos
+func (l *Ledger) Balance(addr basics.Address) (amount basics.MicroAlgos, err error) {
+ br, ok := l.balances[addr]
+ if !ok {
+ return basics.MicroAlgos{Raw: 0}, nil
+ }
+ return basics.MicroAlgos{Raw: br.balance}, nil
+}
+
+// MinBalance computes the MinBalance requirement for an account,
+// under the given consensus parameters.
+func (l *Ledger) MinBalance(addr basics.Address, proto *config.ConsensusParams) (amount basics.MicroAlgos, err error) {
+ br, ok := l.balances[addr]
+ if !ok {
+ br = makeBalanceRecord(addr, 0)
+ }
+
+ var min uint64
+
+ // First, base MinBalance
+ min = proto.MinBalance
+
+ // MinBalance for each Asset
+ assetCost := basics.MulSaturate(proto.MinBalance, uint64(len(br.holdings)))
+ min = basics.AddSaturate(min, assetCost)
+
+ // Base MinBalance + GlobalStateSchema.MinBalance + ExtraProgramPages MinBalance for each created application
+ for _, params := range l.applications {
+ if params.Creator == addr {
+ min = basics.AddSaturate(min, proto.AppFlatParamsMinBalance)
+ min = basics.AddSaturate(min, params.GlobalStateSchema.MinBalance(proto).Raw)
+ min = basics.AddSaturate(min, basics.MulSaturate(proto.AppFlatParamsMinBalance, uint64(params.ExtraProgramPages)))
+ }
+ }
+
+ // Base MinBalance + LocalStateSchema.MinBalance for each opted in application
+ for idx := range br.locals {
+ min = basics.AddSaturate(min, proto.AppFlatParamsMinBalance)
+ min = basics.AddSaturate(min, l.applications[idx].LocalStateSchema.MinBalance(proto).Raw)
+ }
+
+ return basics.MicroAlgos{Raw: min}, nil
+}
+
+// Authorizer returns the address that must authorize txns from a
+// given address. It's either the address itself, or the value it has
+// been rekeyed to.
+func (l *Ledger) Authorizer(addr basics.Address) (basics.Address, error) {
+ br, ok := l.balances[addr]
+ if !ok {
+ return addr, nil // Not rekeyed if not present
+ }
+ if !br.auth.IsZero() {
+ return br.auth, nil
+ }
+ return br.addr, nil
+}
+
+// GetGlobal returns the current value of a global in an app, taking
+// into account the mods created by earlier teal execution.
+func (l *Ledger) GetGlobal(appIdx basics.AppIndex, key string) (basics.TealValue, bool, error) {
+ if appIdx == basics.AppIndex(0) {
+ appIdx = l.appID
+ }
+ params, ok := l.applications[appIdx]
+ if !ok {
+ return basics.TealValue{}, false, fmt.Errorf("no such app")
+ }
+
+ // return most recent value if available
+ tkvm, ok := l.mods[appIdx]
+ if ok {
+ val, ok := tkvm[key]
+ if ok {
+ tv, ok := val.ToTealValue()
+ return tv, ok, nil
+ }
+ }
+
+ // otherwise return original one
+ val, ok := params.GlobalState[key]
+ return val, ok, nil
+}
+
+// SetGlobal "sets" a global, but only through the mods mechanism, so
+// it can be removed with Reset()
+func (l *Ledger) SetGlobal(key string, value basics.TealValue) error {
+ appIdx := l.appID
+ params, ok := l.applications[appIdx]
+ if !ok {
+ return fmt.Errorf("no such app")
+ }
+
+ // if writing the same value, return
+ // this simulates real ledger behavior for tests
+ val, ok := params.GlobalState[key]
+ if ok && val == value {
+ return nil
+ }
+
+ // write to deltas
+ _, ok = l.mods[appIdx]
+ if !ok {
+ l.mods[appIdx] = make(map[string]basics.ValueDelta)
+ }
+ l.mods[appIdx][key] = value.ToValueDelta()
+ return nil
+}
+
+// DelGlobal "deletes" a global, but only through the mods mechanism, so
+// the deletion can be Reset()
+func (l *Ledger) DelGlobal(key string) error {
+ appIdx := l.appID
+ params, ok := l.applications[appIdx]
+ if !ok {
+ return fmt.Errorf("no such app")
+ }
+
+ exist := false
+ if _, ok := params.GlobalState[key]; ok {
+ exist = true
+ }
+
+ _, ok = l.mods[appIdx]
+ if !ok && !exist {
+ // nothing to delete
+ return nil
+ }
+ if !ok {
+ l.mods[appIdx] = make(map[string]basics.ValueDelta)
+ }
+ _, ok = l.mods[appIdx][key]
+ if ok || exist {
+ l.mods[appIdx][key] = basics.ValueDelta{Action: basics.DeleteAction}
+ }
+ return nil
+}
+
+// GetLocal returns the current value bound to a local key, taking
+// into account mods caused by earlier executions.
+func (l *Ledger) GetLocal(addr basics.Address, appIdx basics.AppIndex, key string, accountIdx uint64) (basics.TealValue, bool, error) {
+ if appIdx == 0 {
+ appIdx = l.appID
+ }
+ br, ok := l.balances[addr]
+ if !ok {
+ return basics.TealValue{}, false, fmt.Errorf("no such address")
+ }
+ tkvd, ok := br.locals[appIdx]
+ if !ok {
+ return basics.TealValue{}, false, fmt.Errorf("no app for account")
+ }
+
+ // check deltas first
+ tkvm, ok := br.mods[appIdx]
+ if ok {
+ val, ok := tkvm[key]
+ if ok {
+ tv, ok := val.ToTealValue()
+ return tv, ok, nil
+ }
+ }
+
+ val, ok := tkvd[key]
+ return val, ok, nil
+}
+
+// SetLocal "sets" the current value bound to a local key using the
+// mods mechanism, so it can be Reset()
+func (l *Ledger) SetLocal(addr basics.Address, key string, value basics.TealValue, accountIdx uint64) error {
+ appIdx := l.appID
+
+ br, ok := l.balances[addr]
+ if !ok {
+ return fmt.Errorf("no such address")
+ }
+ tkv, ok := br.locals[appIdx]
+ if !ok {
+ return fmt.Errorf("no app for account")
+ }
+
+ // if writing the same value, return
+ // this simulates real ledger behavior for tests
+ val, ok := tkv[key]
+ if ok && val == value {
+ return nil
+ }
+
+ // write to deltas
+ _, ok = br.mods[appIdx]
+ if !ok {
+ br.mods[appIdx] = make(map[string]basics.ValueDelta)
+ }
+ br.mods[appIdx][key] = value.ToValueDelta()
+ return nil
+}
+
+// DelLocal "deletes" the current value bound to a local key using the
+// mods mechanism, so it can be Reset()
+func (l *Ledger) DelLocal(addr basics.Address, key string, accountIdx uint64) error {
+ appIdx := l.appID
+
+ br, ok := l.balances[addr]
+ if !ok {
+ return fmt.Errorf("no such address")
+ }
+ tkv, ok := br.locals[appIdx]
+ if !ok {
+ return fmt.Errorf("no app for account")
+ }
+ exist := false
+ if _, ok := tkv[key]; ok {
+ exist = true
+ }
+
+ _, ok = br.mods[appIdx]
+ if !ok && !exist {
+ // nothing to delete
+ return nil
+ }
+ if !ok {
+ br.mods[appIdx] = make(map[string]basics.ValueDelta)
+ }
+ _, ok = br.mods[appIdx][key]
+ if ok || exist {
+ br.mods[appIdx][key] = basics.ValueDelta{Action: basics.DeleteAction}
+ }
+ return nil
+}
+
+// OptedIn returns whether an Address has opted into the app (usually
+// from NewLocals, but potentially from executing AVM inner
+// transactions.
+func (l *Ledger) OptedIn(addr basics.Address, appIdx basics.AppIndex) (bool, error) {
+ if appIdx == 0 {
+ appIdx = l.appID
+ }
+ br, ok := l.balances[addr]
+ if !ok {
+ return false, fmt.Errorf("no such address")
+ }
+ _, ok = br.locals[appIdx]
+ return ok, nil
+}
+
+// SetTrackedCreatable remembers that the given cl "happened" in txn
+// groupIdx of the group, for use by GetCreatableID.
+func (l *Ledger) SetTrackedCreatable(groupIdx int, cl basics.CreatableLocator) {
+ l.trackedCreatables[groupIdx] = cl.Index
+}
+
+// GetCreatableID returns the creatable constructed in a given transaction
+// slot. For the test ledger, that's been set up by SetTrackedCreatable
+func (l *Ledger) GetCreatableID(groupIdx int) basics.CreatableIndex {
+ return l.trackedCreatables[groupIdx]
+}
+
+// AssetHolding gives the amount of an ASA held by an account, or
+// error if the account is not opted into the asset.
+func (l *Ledger) AssetHolding(addr basics.Address, assetID basics.AssetIndex) (basics.AssetHolding, error) {
+ if br, ok := l.balances[addr]; ok {
+ if asset, ok := br.holdings[assetID]; ok {
+ return asset, nil
+ }
+ return basics.AssetHolding{}, fmt.Errorf("No asset for account")
+ }
+ return basics.AssetHolding{}, fmt.Errorf("no such address")
+}
+
+// AssetParams gives the parameters of an ASA if it exists
+func (l *Ledger) AssetParams(assetID basics.AssetIndex) (basics.AssetParams, basics.Address, error) {
+ if asset, ok := l.assets[assetID]; ok {
+ return asset.AssetParams, asset.Creator, nil
+ }
+ return basics.AssetParams{}, basics.Address{}, fmt.Errorf("no such asset")
+}
+
+// AppParams gives the parameters of an App if it exists
+func (l *Ledger) AppParams(appID basics.AppIndex) (basics.AppParams, basics.Address, error) {
+ if app, ok := l.applications[appID]; ok {
+ return app.AppParams, app.Creator, nil
+ }
+ return basics.AppParams{}, basics.Address{}, fmt.Errorf("no such app")
+}
+
+// ApplicationID gives ID of the "currently running" app. For this
+// test ledger, that is chosen explicitly.
+func (l *Ledger) ApplicationID() basics.AppIndex {
+ return l.appID
+}
+
+// CreatorAddress returns of the address that created the "currently running" app.
+func (l *Ledger) CreatorAddress() basics.Address {
+ _, addr, _ := l.AppParams(l.appID)
+ return addr
+}
+
+// GetDelta translates the mods set by AVM execution into the standard
+// format of an EvalDelta.
+func (l *Ledger) GetDelta(txn *transactions.Transaction) (evalDelta transactions.EvalDelta, err error) {
+ if tkv, ok := l.mods[l.appID]; ok {
+ evalDelta.GlobalDelta = tkv
+ }
+ if len(txn.Accounts) > 0 {
+ accounts := make(map[basics.Address]int)
+ accounts[txn.Sender] = 0
+ for idx, addr := range txn.Accounts {
+ accounts[addr] = idx + 1
+ }
+ evalDelta.LocalDeltas = make(map[uint64]basics.StateDelta)
+ for addr, br := range l.balances {
+ if idx, ok := accounts[addr]; ok {
+ if delta, ok := br.mods[l.appID]; ok {
+ evalDelta.LocalDeltas[uint64(idx)] = delta
+ }
+ }
+ }
+ }
+ return
+}
+
+func (l *Ledger) move(from basics.Address, to basics.Address, amount uint64) error {
+ fbr, ok := l.balances[from]
+ if !ok {
+ fbr = makeBalanceRecord(from, 0)
+ }
+ tbr, ok := l.balances[to]
+ if !ok {
+ tbr = makeBalanceRecord(to, 0)
+ }
+ if fbr.balance < amount {
+ return fmt.Errorf("insufficient balance")
+ }
+ fbr.balance -= amount
+ tbr.balance += amount
+ // We do not check min balances yet. They are checked when txn is complete.
+ l.balances[from] = fbr
+ l.balances[to] = tbr
+ return nil
+}
+
+func (l *Ledger) pay(from basics.Address, pay transactions.PaymentTxnFields) error {
+ err := l.move(from, pay.Receiver, pay.Amount.Raw)
+ if err != nil {
+ return err
+ }
+ if !pay.CloseRemainderTo.IsZero() {
+ sbr := l.balances[from]
+ if len(sbr.holdings) > 0 {
+ return fmt.Errorf("unable to close, Sender (%s) has holdings", from)
+ }
+ if len(sbr.locals) > 0 {
+ return fmt.Errorf("unable to close, Sender (%s) is opted in to apps", from)
+ }
+ // Should also check app creations.
+ // Need not check asa creations, as you can't opt out if you created.
+ // (though this test ledger doesn't know that)
+ remainder := sbr.balance
+ if remainder > 0 {
+ return l.move(from, pay.CloseRemainderTo, remainder)
+ }
+ }
+ return nil
+}
+
+func (l *Ledger) axfer(from basics.Address, xfer transactions.AssetTransferTxnFields) error {
+ to := xfer.AssetReceiver
+ aid := xfer.XferAsset
+ amount := xfer.AssetAmount
+ close := xfer.AssetCloseTo
+
+ fbr, ok := l.balances[from]
+ if !ok {
+ fbr = makeBalanceRecord(from, 0)
+ }
+ fholding, ok := fbr.holdings[aid]
+ if !ok {
+ if from == to && amount == 0 {
+ // opt in
+ if params, exists := l.assets[aid]; exists {
+ fbr.holdings[aid] = basics.AssetHolding{
+ Frozen: params.DefaultFrozen,
+ }
+ return nil
+ }
+ return fmt.Errorf("Asset (%d) does not exist", aid)
+ }
+ return fmt.Errorf("Sender (%s) not opted in to %d", from, aid)
+ }
+ if fholding.Frozen {
+ return fmt.Errorf("Sender (%s) is frozen for %d", from, aid)
+ }
+ tbr, ok := l.balances[to]
+ if !ok {
+ tbr = makeBalanceRecord(to, 0)
+ }
+ tholding, ok := tbr.holdings[aid]
+ if !ok && amount > 0 {
+ return fmt.Errorf("AssetReceiver (%s) not opted in to %d", to, aid)
+ }
+ if fholding.Amount < amount {
+ return fmt.Errorf("insufficient balance")
+ }
+
+ // Not just an optimization.
+ // amount >0 : allows axfer to not opted in account
+ // from != to : prevents overwriting the same balance record with only
+ // the second change, and ensures fholding remains correct
+ // for closeTo handling.
+ if amount > 0 && from != to {
+ fholding.Amount -= amount
+ fbr.holdings[aid] = fholding
+ l.balances[from] = fbr
+
+ tholding.Amount += amount
+ tbr.holdings[aid] = tholding
+ l.balances[to] = tbr
+ }
+
+ if !close.IsZero() && fholding.Amount > 0 {
+ cbr, ok := l.balances[close]
+ if !ok {
+ cbr = makeBalanceRecord(close, 0)
+ }
+ cholding, ok := cbr.holdings[aid]
+ if !ok {
+ return fmt.Errorf("AssetCloseTo (%s) not opted in to %d", to, aid)
+ }
+
+ // Opt out
+ delete(fbr.holdings, aid)
+ l.balances[from] = fbr
+
+ cholding.Amount += fholding.Amount
+ cbr.holdings[aid] = cholding
+ l.balances[close] = cbr
+ }
+
+ return nil
+}
+
+func (l *Ledger) acfg(from basics.Address, cfg transactions.AssetConfigTxnFields) (transactions.ApplyData, error) {
+ if cfg.ConfigAsset == 0 {
+ aid := basics.AssetIndex(l.freshID())
+ l.NewAsset(from, aid, cfg.AssetParams)
+ return transactions.ApplyData{ConfigAsset: aid}, nil
+ }
+ // This is just a mock. We don't check all the rules about
+ // not setting fields that have been zeroed. Nor do we keep
+ // anything from before.
+ l.assets[cfg.ConfigAsset] = asaParams{
+ Creator: from,
+ AssetParams: cfg.AssetParams,
+ }
+ return transactions.ApplyData{}, nil
+}
+
+func (l *Ledger) afrz(from basics.Address, frz transactions.AssetFreezeTxnFields) error {
+ aid := frz.FreezeAsset
+ params, ok := l.assets[aid]
+ if !ok {
+ return fmt.Errorf("Asset (%d) does not exist", aid)
+ }
+ if params.Freeze != from {
+ return fmt.Errorf("Asset (%d) can not be frozen by %s", aid, from)
+ }
+ br, ok := l.balances[frz.FreezeAccount]
+ if !ok {
+ return fmt.Errorf("%s does not hold anything", from)
+ }
+ holding, ok := br.holdings[aid]
+ if !ok {
+ return fmt.Errorf("%s does not hold Asset (%d)", from, aid)
+ }
+ holding.Frozen = frz.AssetFrozen
+ br.holdings[aid] = holding
+ return nil
+}
+
+/* It's gross to reimplement this here, rather than have a way to use
+ a ledger that's backed by our mock, but uses the "real" code
+ (cowRoundState which implements Balances), as a better test. To
+ allow that, we need to move our mocks into separate packages so
+ they can be combined in yet *another* package, and avoid circular
+ imports.
+
+ This is currently unable to fill the ApplyData objects. That would
+ require a whole new level of code duplication.
+*/
+
+// Perform causes txn to "occur" against the ledger. The returned ad is empty.
+func (l *Ledger) Perform(txn *transactions.Transaction, spec transactions.SpecialAddresses) (transactions.ApplyData, error) {
+ var ad transactions.ApplyData
+
+ err := l.move(txn.Sender, spec.FeeSink, txn.Fee.Raw)
+ if err != nil {
+ return ad, err
+ }
+ switch txn.Type {
+ case protocol.PaymentTx:
+ err = l.pay(txn.Sender, txn.PaymentTxnFields)
+ case protocol.AssetTransferTx:
+ err = l.axfer(txn.Sender, txn.AssetTransferTxnFields)
+ case protocol.AssetConfigTx:
+ ad, err = l.acfg(txn.Sender, txn.AssetConfigTxnFields)
+ case protocol.AssetFreezeTx:
+ err = l.afrz(txn.Sender, txn.AssetFreezeTxnFields)
+ default:
+ err = fmt.Errorf("%s txn in AVM", txn.Type)
+ }
+ return ad, err
+}
+
+// Get() through allocated() implement cowForLogicLedger, so we should
+// be able to make logicLedger with this inside. That let's us to
+// write tests and then poke around and see how the balance table
+// inside is affected.
+
+// Get returns the AccountData of an address. This test ledger does
+// not handle rewards, so the pening rewards flag is ignored.
+func (l *Ledger) Get(addr basics.Address, withPendingRewards bool) (basics.AccountData, error) {
+ br, ok := l.balances[addr]
+ if !ok {
+ return basics.AccountData{}, fmt.Errorf("addr %s not in test.Ledger", addr.String())
+ }
+ return basics.AccountData{
+ MicroAlgos: basics.MicroAlgos{Raw: br.balance},
+ AssetParams: map[basics.AssetIndex]basics.AssetParams{},
+ Assets: map[basics.AssetIndex]basics.AssetHolding{},
+ AppLocalStates: map[basics.AppIndex]basics.AppLocalState{},
+ AppParams: map[basics.AppIndex]basics.AppParams{},
+ }, nil
+}
+
+// GetCreator returns the creator of the given creatable, an app or asa.
+func (l *Ledger) GetCreator(cidx basics.CreatableIndex, ctype basics.CreatableType) (basics.Address, bool, error) {
+ if ctype == basics.AssetCreatable {
+ params, found := l.assets[basics.AssetIndex(cidx)]
+ return params.Creator, found, nil
+ }
+ if ctype == basics.AppCreatable {
+ params, found := l.applications[basics.AppIndex(cidx)]
+ return params.Creator, found, nil
+ }
+ return basics.Address{}, false, fmt.Errorf("%v %d is not in test.Ledger", ctype, cidx)
+}
+
+// SetKey creates a new key-value in {addr, aidx, global} storage
+func (l *Ledger) SetKey(addr basics.Address, aidx basics.AppIndex, global bool, key string, value basics.TealValue, accountIdx uint64) error {
+ if global {
+ l.NewGlobal(uint64(aidx), key, value)
+ } else {
+ l.NewLocal(addr, uint64(aidx), key, value)
+ }
+ return nil
+}
+
+// DelKey removes a key from {addr, aidx, global} storage
+func (l *Ledger) DelKey(addr basics.Address, aidx basics.AppIndex, global bool, key string, accountIdx uint64) error {
+ if global {
+ l.NoGlobal(uint64(aidx), key)
+ } else {
+ l.NoLocal(addr, uint64(aidx), key)
+ }
+ return nil
+}
+
+func (l *Ledger) round() basics.Round {
+ if l.rnd == basics.Round(0) {
+ l.rnd = basics.Round(rand.Uint32() + 1)
+ }
+ return l.rnd
+}
diff --git a/data/transactions/msgp_gen.go b/data/transactions/msgp_gen.go
index 365e2d540..009de07b5 100644
--- a/data/transactions/msgp_gen.go
+++ b/data/transactions/msgp_gen.go
@@ -3,6 +3,8 @@ package transactions
// Code generated by github.com/algorand/msgp DO NOT EDIT.
import (
+ "sort"
+
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/data/basics"
@@ -58,6 +60,14 @@ import (
// |-----> (*) Msgsize
// |-----> (*) MsgIsZero
//
+// EvalDelta
+// |-----> (*) MarshalMsg
+// |-----> (*) CanMarshalMsg
+// |-----> (*) UnmarshalMsg
+// |-----> (*) CanUnmarshalMsg
+// |-----> (*) Msgsize
+// |-----> (*) MsgIsZero
+//
// Header
// |-----> (*) MarshalMsg
// |-----> (*) CanMarshalMsg
@@ -763,32 +773,40 @@ func (z *ApplicationCallTxnFields) MsgIsZero() bool {
func (z *ApplyData) MarshalMsg(b []byte) (o []byte) {
o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values
- zb0001Len := uint32(6)
- var zb0001Mask uint8 /* 7 bits */
+ zb0001Len := uint32(8)
+ var zb0001Mask uint16 /* 9 bits */
if (*z).AssetClosingAmount == 0 {
zb0001Len--
zb0001Mask |= 0x2
}
- if (*z).ClosingAmount.MsgIsZero() {
+ if (*z).ApplicationID.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x4
}
- if (*z).EvalDelta.MsgIsZero() {
+ if (*z).ClosingAmount.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x8
}
- if (*z).CloseRewards.MsgIsZero() {
+ if (*z).ConfigAsset.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x10
}
- if (*z).ReceiverRewards.MsgIsZero() {
+ if (*z).EvalDelta.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x20
}
- if (*z).SenderRewards.MsgIsZero() {
+ if (*z).CloseRewards.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x40
}
+ if (*z).ReceiverRewards.MsgIsZero() {
+ zb0001Len--
+ zb0001Mask |= 0x80
+ }
+ if (*z).SenderRewards.MsgIsZero() {
+ zb0001Len--
+ zb0001Mask |= 0x100
+ }
// variable map header, size zb0001Len
o = append(o, 0x80|uint8(zb0001Len))
if zb0001Len != 0 {
@@ -798,26 +816,36 @@ func (z *ApplyData) MarshalMsg(b []byte) (o []byte) {
o = msgp.AppendUint64(o, (*z).AssetClosingAmount)
}
if (zb0001Mask & 0x4) == 0 { // if not empty
+ // string "apid"
+ o = append(o, 0xa4, 0x61, 0x70, 0x69, 0x64)
+ o = (*z).ApplicationID.MarshalMsg(o)
+ }
+ if (zb0001Mask & 0x8) == 0 { // if not empty
// string "ca"
o = append(o, 0xa2, 0x63, 0x61)
o = (*z).ClosingAmount.MarshalMsg(o)
}
- if (zb0001Mask & 0x8) == 0 { // if not empty
+ if (zb0001Mask & 0x10) == 0 { // if not empty
+ // string "caid"
+ o = append(o, 0xa4, 0x63, 0x61, 0x69, 0x64)
+ o = (*z).ConfigAsset.MarshalMsg(o)
+ }
+ if (zb0001Mask & 0x20) == 0 { // if not empty
// string "dt"
o = append(o, 0xa2, 0x64, 0x74)
o = (*z).EvalDelta.MarshalMsg(o)
}
- if (zb0001Mask & 0x10) == 0 { // if not empty
+ if (zb0001Mask & 0x40) == 0 { // if not empty
// string "rc"
o = append(o, 0xa2, 0x72, 0x63)
o = (*z).CloseRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x20) == 0 { // if not empty
+ if (zb0001Mask & 0x80) == 0 { // if not empty
// string "rr"
o = append(o, 0xa2, 0x72, 0x72)
o = (*z).ReceiverRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x40) == 0 { // if not empty
+ if (zb0001Mask & 0x100) == 0 { // if not empty
// string "rs"
o = append(o, 0xa2, 0x72, 0x73)
o = (*z).SenderRewards.MarshalMsg(o)
@@ -893,6 +921,22 @@ func (z *ApplyData) UnmarshalMsg(bts []byte) (o []byte, err error) {
}
}
if zb0001 > 0 {
+ zb0001--
+ bts, err = (*z).ConfigAsset.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "ConfigAsset")
+ return
+ }
+ }
+ if zb0001 > 0 {
+ zb0001--
+ bts, err = (*z).ApplicationID.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "ApplicationID")
+ return
+ }
+ }
+ if zb0001 > 0 {
err = msgp.ErrTooManyArrayFields(zb0001)
if err != nil {
err = msgp.WrapError(err, "struct-from-array")
@@ -951,6 +995,18 @@ func (z *ApplyData) UnmarshalMsg(bts []byte) (o []byte, err error) {
err = msgp.WrapError(err, "EvalDelta")
return
}
+ case "caid":
+ bts, err = (*z).ConfigAsset.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "ConfigAsset")
+ return
+ }
+ case "apid":
+ bts, err = (*z).ApplicationID.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "ApplicationID")
+ return
+ }
default:
err = msgp.ErrNoField(string(field))
if err != nil {
@@ -971,13 +1027,13 @@ func (_ *ApplyData) CanUnmarshalMsg(z interface{}) bool {
// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
func (z *ApplyData) Msgsize() (s int) {
- s = 1 + 3 + (*z).ClosingAmount.Msgsize() + 4 + msgp.Uint64Size + 3 + (*z).SenderRewards.Msgsize() + 3 + (*z).ReceiverRewards.Msgsize() + 3 + (*z).CloseRewards.Msgsize() + 3 + (*z).EvalDelta.Msgsize()
+ s = 1 + 3 + (*z).ClosingAmount.Msgsize() + 4 + msgp.Uint64Size + 3 + (*z).SenderRewards.Msgsize() + 3 + (*z).ReceiverRewards.Msgsize() + 3 + (*z).CloseRewards.Msgsize() + 3 + (*z).EvalDelta.Msgsize() + 5 + (*z).ConfigAsset.Msgsize() + 5 + (*z).ApplicationID.Msgsize()
return
}
// MsgIsZero returns whether this is a zero value
func (z *ApplyData) MsgIsZero() bool {
- return ((*z).ClosingAmount.MsgIsZero()) && ((*z).AssetClosingAmount == 0) && ((*z).SenderRewards.MsgIsZero()) && ((*z).ReceiverRewards.MsgIsZero()) && ((*z).CloseRewards.MsgIsZero()) && ((*z).EvalDelta.MsgIsZero())
+ return ((*z).ClosingAmount.MsgIsZero()) && ((*z).AssetClosingAmount == 0) && ((*z).SenderRewards.MsgIsZero()) && ((*z).ReceiverRewards.MsgIsZero()) && ((*z).CloseRewards.MsgIsZero()) && ((*z).EvalDelta.MsgIsZero()) && ((*z).ConfigAsset.MsgIsZero()) && ((*z).ApplicationID.MsgIsZero())
}
// MarshalMsg implements msgp.Marshaler
@@ -1612,6 +1668,365 @@ func (z *CompactCertTxnFields) MsgIsZero() bool {
}
// MarshalMsg implements msgp.Marshaler
+func (z *EvalDelta) MarshalMsg(b []byte) (o []byte) {
+ o = msgp.Require(b, z.Msgsize())
+ // omitempty: check for empty values
+ zb0005Len := uint32(4)
+ var zb0005Mask uint8 /* 5 bits */
+ if (*z).GlobalDelta.MsgIsZero() {
+ zb0005Len--
+ zb0005Mask |= 0x2
+ }
+ if len((*z).InnerTxns) == 0 {
+ zb0005Len--
+ zb0005Mask |= 0x4
+ }
+ if len((*z).LocalDeltas) == 0 {
+ zb0005Len--
+ zb0005Mask |= 0x8
+ }
+ if len((*z).Logs) == 0 {
+ zb0005Len--
+ zb0005Mask |= 0x10
+ }
+ // variable map header, size zb0005Len
+ o = append(o, 0x80|uint8(zb0005Len))
+ if zb0005Len != 0 {
+ if (zb0005Mask & 0x2) == 0 { // if not empty
+ // string "gd"
+ o = append(o, 0xa2, 0x67, 0x64)
+ o = (*z).GlobalDelta.MarshalMsg(o)
+ }
+ if (zb0005Mask & 0x4) == 0 { // if not empty
+ // string "itx"
+ o = append(o, 0xa3, 0x69, 0x74, 0x78)
+ if (*z).InnerTxns == nil {
+ o = msgp.AppendNil(o)
+ } else {
+ o = msgp.AppendArrayHeader(o, uint32(len((*z).InnerTxns)))
+ }
+ for zb0004 := range (*z).InnerTxns {
+ o = (*z).InnerTxns[zb0004].MarshalMsg(o)
+ }
+ }
+ if (zb0005Mask & 0x8) == 0 { // if not empty
+ // string "ld"
+ o = append(o, 0xa2, 0x6c, 0x64)
+ if (*z).LocalDeltas == nil {
+ o = msgp.AppendNil(o)
+ } else {
+ o = msgp.AppendMapHeader(o, uint32(len((*z).LocalDeltas)))
+ }
+ zb0001_keys := make([]uint64, 0, len((*z).LocalDeltas))
+ for zb0001 := range (*z).LocalDeltas {
+ zb0001_keys = append(zb0001_keys, zb0001)
+ }
+ sort.Sort(SortUint64(zb0001_keys))
+ for _, zb0001 := range zb0001_keys {
+ zb0002 := (*z).LocalDeltas[zb0001]
+ _ = zb0002
+ o = msgp.AppendUint64(o, zb0001)
+ o = zb0002.MarshalMsg(o)
+ }
+ }
+ if (zb0005Mask & 0x10) == 0 { // if not empty
+ // string "lg"
+ o = append(o, 0xa2, 0x6c, 0x67)
+ if (*z).Logs == nil {
+ o = msgp.AppendNil(o)
+ } else {
+ o = msgp.AppendArrayHeader(o, uint32(len((*z).Logs)))
+ }
+ for zb0003 := range (*z).Logs {
+ o = msgp.AppendString(o, (*z).Logs[zb0003])
+ }
+ }
+ }
+ return
+}
+
+func (_ *EvalDelta) CanMarshalMsg(z interface{}) bool {
+ _, ok := (z).(*EvalDelta)
+ return ok
+}
+
+// UnmarshalMsg implements msgp.Unmarshaler
+func (z *EvalDelta) UnmarshalMsg(bts []byte) (o []byte, err error) {
+ var field []byte
+ _ = field
+ var zb0005 int
+ var zb0006 bool
+ zb0005, zb0006, bts, err = msgp.ReadMapHeaderBytes(bts)
+ if _, ok := err.(msgp.TypeError); ok {
+ zb0005, zb0006, bts, err = msgp.ReadArrayHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ if zb0005 > 0 {
+ zb0005--
+ bts, err = (*z).GlobalDelta.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "GlobalDelta")
+ return
+ }
+ }
+ if zb0005 > 0 {
+ zb0005--
+ var zb0007 int
+ var zb0008 bool
+ zb0007, zb0008, bts, err = msgp.ReadMapHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "LocalDeltas")
+ return
+ }
+ if zb0007 > config.MaxEvalDeltaAccounts {
+ err = msgp.ErrOverflow(uint64(zb0007), uint64(config.MaxEvalDeltaAccounts))
+ err = msgp.WrapError(err, "struct-from-array", "LocalDeltas")
+ return
+ }
+ if zb0008 {
+ (*z).LocalDeltas = nil
+ } else if (*z).LocalDeltas == nil {
+ (*z).LocalDeltas = make(map[uint64]basics.StateDelta, zb0007)
+ }
+ for zb0007 > 0 {
+ var zb0001 uint64
+ var zb0002 basics.StateDelta
+ zb0007--
+ zb0001, bts, err = msgp.ReadUint64Bytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "LocalDeltas")
+ return
+ }
+ bts, err = zb0002.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "LocalDeltas", zb0001)
+ return
+ }
+ (*z).LocalDeltas[zb0001] = zb0002
+ }
+ }
+ if zb0005 > 0 {
+ zb0005--
+ var zb0009 int
+ var zb0010 bool
+ zb0009, zb0010, bts, err = msgp.ReadArrayHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "Logs")
+ return
+ }
+ if zb0009 > config.MaxLogCalls {
+ err = msgp.ErrOverflow(uint64(zb0009), uint64(config.MaxLogCalls))
+ err = msgp.WrapError(err, "struct-from-array", "Logs")
+ return
+ }
+ if zb0010 {
+ (*z).Logs = nil
+ } else if (*z).Logs != nil && cap((*z).Logs) >= zb0009 {
+ (*z).Logs = ((*z).Logs)[:zb0009]
+ } else {
+ (*z).Logs = make([]string, zb0009)
+ }
+ for zb0003 := range (*z).Logs {
+ (*z).Logs[zb0003], bts, err = msgp.ReadStringBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "Logs", zb0003)
+ return
+ }
+ }
+ }
+ if zb0005 > 0 {
+ zb0005--
+ var zb0011 int
+ var zb0012 bool
+ zb0011, zb0012, bts, err = msgp.ReadArrayHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "InnerTxns")
+ return
+ }
+ if zb0011 > config.MaxInnerTransactions {
+ err = msgp.ErrOverflow(uint64(zb0011), uint64(config.MaxInnerTransactions))
+ err = msgp.WrapError(err, "struct-from-array", "InnerTxns")
+ return
+ }
+ if zb0012 {
+ (*z).InnerTxns = nil
+ } else if (*z).InnerTxns != nil && cap((*z).InnerTxns) >= zb0011 {
+ (*z).InnerTxns = ((*z).InnerTxns)[:zb0011]
+ } else {
+ (*z).InnerTxns = make([]SignedTxnWithAD, zb0011)
+ }
+ for zb0004 := range (*z).InnerTxns {
+ bts, err = (*z).InnerTxns[zb0004].UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "InnerTxns", zb0004)
+ return
+ }
+ }
+ }
+ if zb0005 > 0 {
+ err = msgp.ErrTooManyArrayFields(zb0005)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array")
+ return
+ }
+ }
+ } else {
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ if zb0006 {
+ (*z) = EvalDelta{}
+ }
+ for zb0005 > 0 {
+ zb0005--
+ field, bts, err = msgp.ReadMapKeyZC(bts)
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ switch string(field) {
+ case "gd":
+ bts, err = (*z).GlobalDelta.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "GlobalDelta")
+ return
+ }
+ case "ld":
+ var zb0013 int
+ var zb0014 bool
+ zb0013, zb0014, bts, err = msgp.ReadMapHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "LocalDeltas")
+ return
+ }
+ if zb0013 > config.MaxEvalDeltaAccounts {
+ err = msgp.ErrOverflow(uint64(zb0013), uint64(config.MaxEvalDeltaAccounts))
+ err = msgp.WrapError(err, "LocalDeltas")
+ return
+ }
+ if zb0014 {
+ (*z).LocalDeltas = nil
+ } else if (*z).LocalDeltas == nil {
+ (*z).LocalDeltas = make(map[uint64]basics.StateDelta, zb0013)
+ }
+ for zb0013 > 0 {
+ var zb0001 uint64
+ var zb0002 basics.StateDelta
+ zb0013--
+ zb0001, bts, err = msgp.ReadUint64Bytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "LocalDeltas")
+ return
+ }
+ bts, err = zb0002.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "LocalDeltas", zb0001)
+ return
+ }
+ (*z).LocalDeltas[zb0001] = zb0002
+ }
+ case "lg":
+ var zb0015 int
+ var zb0016 bool
+ zb0015, zb0016, bts, err = msgp.ReadArrayHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "Logs")
+ return
+ }
+ if zb0015 > config.MaxLogCalls {
+ err = msgp.ErrOverflow(uint64(zb0015), uint64(config.MaxLogCalls))
+ err = msgp.WrapError(err, "Logs")
+ return
+ }
+ if zb0016 {
+ (*z).Logs = nil
+ } else if (*z).Logs != nil && cap((*z).Logs) >= zb0015 {
+ (*z).Logs = ((*z).Logs)[:zb0015]
+ } else {
+ (*z).Logs = make([]string, zb0015)
+ }
+ for zb0003 := range (*z).Logs {
+ (*z).Logs[zb0003], bts, err = msgp.ReadStringBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "Logs", zb0003)
+ return
+ }
+ }
+ case "itx":
+ var zb0017 int
+ var zb0018 bool
+ zb0017, zb0018, bts, err = msgp.ReadArrayHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "InnerTxns")
+ return
+ }
+ if zb0017 > config.MaxInnerTransactions {
+ err = msgp.ErrOverflow(uint64(zb0017), uint64(config.MaxInnerTransactions))
+ err = msgp.WrapError(err, "InnerTxns")
+ return
+ }
+ if zb0018 {
+ (*z).InnerTxns = nil
+ } else if (*z).InnerTxns != nil && cap((*z).InnerTxns) >= zb0017 {
+ (*z).InnerTxns = ((*z).InnerTxns)[:zb0017]
+ } else {
+ (*z).InnerTxns = make([]SignedTxnWithAD, zb0017)
+ }
+ for zb0004 := range (*z).InnerTxns {
+ bts, err = (*z).InnerTxns[zb0004].UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "InnerTxns", zb0004)
+ return
+ }
+ }
+ default:
+ err = msgp.ErrNoField(string(field))
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ }
+ }
+ }
+ o = bts
+ return
+}
+
+func (_ *EvalDelta) CanUnmarshalMsg(z interface{}) bool {
+ _, ok := (z).(*EvalDelta)
+ return ok
+}
+
+// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
+func (z *EvalDelta) Msgsize() (s int) {
+ s = 1 + 3 + (*z).GlobalDelta.Msgsize() + 3 + msgp.MapHeaderSize
+ if (*z).LocalDeltas != nil {
+ for zb0001, zb0002 := range (*z).LocalDeltas {
+ _ = zb0001
+ _ = zb0002
+ s += 0 + msgp.Uint64Size + zb0002.Msgsize()
+ }
+ }
+ s += 3 + msgp.ArrayHeaderSize
+ for zb0003 := range (*z).Logs {
+ s += msgp.StringPrefixSize + len((*z).Logs[zb0003])
+ }
+ s += 4 + msgp.ArrayHeaderSize
+ for zb0004 := range (*z).InnerTxns {
+ s += (*z).InnerTxns[zb0004].Msgsize()
+ }
+ return
+}
+
+// MsgIsZero returns whether this is a zero value
+func (z *EvalDelta) MsgIsZero() bool {
+ return ((*z).GlobalDelta.MsgIsZero()) && (len((*z).LocalDeltas) == 0) && (len((*z).Logs) == 0) && (len((*z).InnerTxns) == 0)
+}
+
+// MarshalMsg implements msgp.Marshaler
func (z *Header) MarshalMsg(b []byte) (o []byte) {
o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values
@@ -2951,60 +3366,68 @@ func (z *SignedTxn) MsgIsZero() bool {
func (z *SignedTxnInBlock) MarshalMsg(b []byte) (o []byte) {
o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values
- zb0001Len := uint32(13)
- var zb0001Mask uint32 /* 17 bits */
+ zb0001Len := uint32(15)
+ var zb0001Mask uint32 /* 19 bits */
if (*z).SignedTxnWithAD.ApplyData.AssetClosingAmount == 0 {
zb0001Len--
zb0001Mask |= 0x10
}
- if (*z).SignedTxnWithAD.ApplyData.ClosingAmount.MsgIsZero() {
+ if (*z).SignedTxnWithAD.ApplyData.ApplicationID.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x20
}
- if (*z).SignedTxnWithAD.ApplyData.EvalDelta.MsgIsZero() {
+ if (*z).SignedTxnWithAD.ApplyData.ClosingAmount.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x40
}
- if (*z).HasGenesisHash == false {
+ if (*z).SignedTxnWithAD.ApplyData.ConfigAsset.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x80
}
- if (*z).HasGenesisID == false {
+ if (*z).SignedTxnWithAD.ApplyData.EvalDelta.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x100
}
- if (*z).SignedTxnWithAD.SignedTxn.Lsig.MsgIsZero() {
+ if (*z).HasGenesisHash == false {
zb0001Len--
zb0001Mask |= 0x200
}
- if (*z).SignedTxnWithAD.SignedTxn.Msig.MsgIsZero() {
+ if (*z).HasGenesisID == false {
zb0001Len--
zb0001Mask |= 0x400
}
- if (*z).SignedTxnWithAD.ApplyData.CloseRewards.MsgIsZero() {
+ if (*z).SignedTxnWithAD.SignedTxn.Lsig.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x800
}
- if (*z).SignedTxnWithAD.ApplyData.ReceiverRewards.MsgIsZero() {
+ if (*z).SignedTxnWithAD.SignedTxn.Msig.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x1000
}
- if (*z).SignedTxnWithAD.ApplyData.SenderRewards.MsgIsZero() {
+ if (*z).SignedTxnWithAD.ApplyData.CloseRewards.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x2000
}
- if (*z).SignedTxnWithAD.SignedTxn.AuthAddr.MsgIsZero() {
+ if (*z).SignedTxnWithAD.ApplyData.ReceiverRewards.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x4000
}
- if (*z).SignedTxnWithAD.SignedTxn.Sig.MsgIsZero() {
+ if (*z).SignedTxnWithAD.ApplyData.SenderRewards.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x8000
}
- if (*z).SignedTxnWithAD.SignedTxn.Txn.MsgIsZero() {
+ if (*z).SignedTxnWithAD.SignedTxn.AuthAddr.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x10000
}
+ if (*z).SignedTxnWithAD.SignedTxn.Sig.MsgIsZero() {
+ zb0001Len--
+ zb0001Mask |= 0x20000
+ }
+ if (*z).SignedTxnWithAD.SignedTxn.Txn.MsgIsZero() {
+ zb0001Len--
+ zb0001Mask |= 0x40000
+ }
// variable map header, size zb0001Len
o = append(o, 0x80|uint8(zb0001Len))
if zb0001Len != 0 {
@@ -3014,61 +3437,71 @@ func (z *SignedTxnInBlock) MarshalMsg(b []byte) (o []byte) {
o = msgp.AppendUint64(o, (*z).SignedTxnWithAD.ApplyData.AssetClosingAmount)
}
if (zb0001Mask & 0x20) == 0 { // if not empty
+ // string "apid"
+ o = append(o, 0xa4, 0x61, 0x70, 0x69, 0x64)
+ o = (*z).SignedTxnWithAD.ApplyData.ApplicationID.MarshalMsg(o)
+ }
+ if (zb0001Mask & 0x40) == 0 { // if not empty
// string "ca"
o = append(o, 0xa2, 0x63, 0x61)
o = (*z).SignedTxnWithAD.ApplyData.ClosingAmount.MarshalMsg(o)
}
- if (zb0001Mask & 0x40) == 0 { // if not empty
+ if (zb0001Mask & 0x80) == 0 { // if not empty
+ // string "caid"
+ o = append(o, 0xa4, 0x63, 0x61, 0x69, 0x64)
+ o = (*z).SignedTxnWithAD.ApplyData.ConfigAsset.MarshalMsg(o)
+ }
+ if (zb0001Mask & 0x100) == 0 { // if not empty
// string "dt"
o = append(o, 0xa2, 0x64, 0x74)
o = (*z).SignedTxnWithAD.ApplyData.EvalDelta.MarshalMsg(o)
}
- if (zb0001Mask & 0x80) == 0 { // if not empty
+ if (zb0001Mask & 0x200) == 0 { // if not empty
// string "hgh"
o = append(o, 0xa3, 0x68, 0x67, 0x68)
o = msgp.AppendBool(o, (*z).HasGenesisHash)
}
- if (zb0001Mask & 0x100) == 0 { // if not empty
+ if (zb0001Mask & 0x400) == 0 { // if not empty
// string "hgi"
o = append(o, 0xa3, 0x68, 0x67, 0x69)
o = msgp.AppendBool(o, (*z).HasGenesisID)
}
- if (zb0001Mask & 0x200) == 0 { // if not empty
+ if (zb0001Mask & 0x800) == 0 { // if not empty
// string "lsig"
o = append(o, 0xa4, 0x6c, 0x73, 0x69, 0x67)
o = (*z).SignedTxnWithAD.SignedTxn.Lsig.MarshalMsg(o)
}
- if (zb0001Mask & 0x400) == 0 { // if not empty
+ if (zb0001Mask & 0x1000) == 0 { // if not empty
// string "msig"
o = append(o, 0xa4, 0x6d, 0x73, 0x69, 0x67)
o = (*z).SignedTxnWithAD.SignedTxn.Msig.MarshalMsg(o)
}
- if (zb0001Mask & 0x800) == 0 { // if not empty
+ if (zb0001Mask & 0x2000) == 0 { // if not empty
// string "rc"
o = append(o, 0xa2, 0x72, 0x63)
o = (*z).SignedTxnWithAD.ApplyData.CloseRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x1000) == 0 { // if not empty
+ if (zb0001Mask & 0x4000) == 0 { // if not empty
// string "rr"
o = append(o, 0xa2, 0x72, 0x72)
o = (*z).SignedTxnWithAD.ApplyData.ReceiverRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x2000) == 0 { // if not empty
+ if (zb0001Mask & 0x8000) == 0 { // if not empty
// string "rs"
o = append(o, 0xa2, 0x72, 0x73)
o = (*z).SignedTxnWithAD.ApplyData.SenderRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x4000) == 0 { // if not empty
+ if (zb0001Mask & 0x10000) == 0 { // if not empty
// string "sgnr"
o = append(o, 0xa4, 0x73, 0x67, 0x6e, 0x72)
o = (*z).SignedTxnWithAD.SignedTxn.AuthAddr.MarshalMsg(o)
}
- if (zb0001Mask & 0x8000) == 0 { // if not empty
+ if (zb0001Mask & 0x20000) == 0 { // if not empty
// string "sig"
o = append(o, 0xa3, 0x73, 0x69, 0x67)
o = (*z).SignedTxnWithAD.SignedTxn.Sig.MarshalMsg(o)
}
- if (zb0001Mask & 0x10000) == 0 { // if not empty
+ if (zb0001Mask & 0x40000) == 0 { // if not empty
// string "txn"
o = append(o, 0xa3, 0x74, 0x78, 0x6e)
o = (*z).SignedTxnWithAD.SignedTxn.Txn.MarshalMsg(o)
@@ -3185,6 +3618,22 @@ func (z *SignedTxnInBlock) UnmarshalMsg(bts []byte) (o []byte, err error) {
}
if zb0001 > 0 {
zb0001--
+ bts, err = (*z).SignedTxnWithAD.ApplyData.ConfigAsset.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "ConfigAsset")
+ return
+ }
+ }
+ if zb0001 > 0 {
+ zb0001--
+ bts, err = (*z).SignedTxnWithAD.ApplyData.ApplicationID.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "ApplicationID")
+ return
+ }
+ }
+ if zb0001 > 0 {
+ zb0001--
(*z).HasGenesisID, bts, err = msgp.ReadBoolBytes(bts)
if err != nil {
err = msgp.WrapError(err, "struct-from-array", "HasGenesisID")
@@ -3288,6 +3737,18 @@ func (z *SignedTxnInBlock) UnmarshalMsg(bts []byte) (o []byte, err error) {
err = msgp.WrapError(err, "EvalDelta")
return
}
+ case "caid":
+ bts, err = (*z).SignedTxnWithAD.ApplyData.ConfigAsset.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "ConfigAsset")
+ return
+ }
+ case "apid":
+ bts, err = (*z).SignedTxnWithAD.ApplyData.ApplicationID.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "ApplicationID")
+ return
+ }
case "hgi":
(*z).HasGenesisID, bts, err = msgp.ReadBoolBytes(bts)
if err != nil {
@@ -3320,65 +3781,73 @@ func (_ *SignedTxnInBlock) CanUnmarshalMsg(z interface{}) bool {
// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
func (z *SignedTxnInBlock) Msgsize() (s int) {
- s = 1 + 4 + (*z).SignedTxnWithAD.SignedTxn.Sig.Msgsize() + 5 + (*z).SignedTxnWithAD.SignedTxn.Msig.Msgsize() + 5 + (*z).SignedTxnWithAD.SignedTxn.Lsig.Msgsize() + 4 + (*z).SignedTxnWithAD.SignedTxn.Txn.Msgsize() + 5 + (*z).SignedTxnWithAD.SignedTxn.AuthAddr.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.ClosingAmount.Msgsize() + 4 + msgp.Uint64Size + 3 + (*z).SignedTxnWithAD.ApplyData.SenderRewards.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.ReceiverRewards.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.CloseRewards.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.EvalDelta.Msgsize() + 4 + msgp.BoolSize + 4 + msgp.BoolSize
+ s = 1 + 4 + (*z).SignedTxnWithAD.SignedTxn.Sig.Msgsize() + 5 + (*z).SignedTxnWithAD.SignedTxn.Msig.Msgsize() + 5 + (*z).SignedTxnWithAD.SignedTxn.Lsig.Msgsize() + 4 + (*z).SignedTxnWithAD.SignedTxn.Txn.Msgsize() + 5 + (*z).SignedTxnWithAD.SignedTxn.AuthAddr.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.ClosingAmount.Msgsize() + 4 + msgp.Uint64Size + 3 + (*z).SignedTxnWithAD.ApplyData.SenderRewards.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.ReceiverRewards.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.CloseRewards.Msgsize() + 3 + (*z).SignedTxnWithAD.ApplyData.EvalDelta.Msgsize() + 5 + (*z).SignedTxnWithAD.ApplyData.ConfigAsset.Msgsize() + 5 + (*z).SignedTxnWithAD.ApplyData.ApplicationID.Msgsize() + 4 + msgp.BoolSize + 4 + msgp.BoolSize
return
}
// MsgIsZero returns whether this is a zero value
func (z *SignedTxnInBlock) MsgIsZero() bool {
- return ((*z).SignedTxnWithAD.SignedTxn.Sig.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.Msig.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.Lsig.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.Txn.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.AuthAddr.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.ClosingAmount.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.AssetClosingAmount == 0) && ((*z).SignedTxnWithAD.ApplyData.SenderRewards.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.ReceiverRewards.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.CloseRewards.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.EvalDelta.MsgIsZero()) && ((*z).HasGenesisID == false) && ((*z).HasGenesisHash == false)
+ return ((*z).SignedTxnWithAD.SignedTxn.Sig.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.Msig.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.Lsig.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.Txn.MsgIsZero()) && ((*z).SignedTxnWithAD.SignedTxn.AuthAddr.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.ClosingAmount.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.AssetClosingAmount == 0) && ((*z).SignedTxnWithAD.ApplyData.SenderRewards.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.ReceiverRewards.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.CloseRewards.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.EvalDelta.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.ConfigAsset.MsgIsZero()) && ((*z).SignedTxnWithAD.ApplyData.ApplicationID.MsgIsZero()) && ((*z).HasGenesisID == false) && ((*z).HasGenesisHash == false)
}
// MarshalMsg implements msgp.Marshaler
func (z *SignedTxnWithAD) MarshalMsg(b []byte) (o []byte) {
o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values
- zb0001Len := uint32(11)
- var zb0001Mask uint16 /* 14 bits */
+ zb0001Len := uint32(13)
+ var zb0001Mask uint16 /* 16 bits */
if (*z).ApplyData.AssetClosingAmount == 0 {
zb0001Len--
zb0001Mask |= 0x8
}
- if (*z).ApplyData.ClosingAmount.MsgIsZero() {
+ if (*z).ApplyData.ApplicationID.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x10
}
- if (*z).ApplyData.EvalDelta.MsgIsZero() {
+ if (*z).ApplyData.ClosingAmount.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x20
}
- if (*z).SignedTxn.Lsig.MsgIsZero() {
+ if (*z).ApplyData.ConfigAsset.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x40
}
- if (*z).SignedTxn.Msig.MsgIsZero() {
+ if (*z).ApplyData.EvalDelta.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x80
}
- if (*z).ApplyData.CloseRewards.MsgIsZero() {
+ if (*z).SignedTxn.Lsig.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x100
}
- if (*z).ApplyData.ReceiverRewards.MsgIsZero() {
+ if (*z).SignedTxn.Msig.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x200
}
- if (*z).ApplyData.SenderRewards.MsgIsZero() {
+ if (*z).ApplyData.CloseRewards.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x400
}
- if (*z).SignedTxn.AuthAddr.MsgIsZero() {
+ if (*z).ApplyData.ReceiverRewards.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x800
}
- if (*z).SignedTxn.Sig.MsgIsZero() {
+ if (*z).ApplyData.SenderRewards.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x1000
}
- if (*z).SignedTxn.Txn.MsgIsZero() {
+ if (*z).SignedTxn.AuthAddr.MsgIsZero() {
zb0001Len--
zb0001Mask |= 0x2000
}
+ if (*z).SignedTxn.Sig.MsgIsZero() {
+ zb0001Len--
+ zb0001Mask |= 0x4000
+ }
+ if (*z).SignedTxn.Txn.MsgIsZero() {
+ zb0001Len--
+ zb0001Mask |= 0x8000
+ }
// variable map header, size zb0001Len
o = append(o, 0x80|uint8(zb0001Len))
if zb0001Len != 0 {
@@ -3388,51 +3857,61 @@ func (z *SignedTxnWithAD) MarshalMsg(b []byte) (o []byte) {
o = msgp.AppendUint64(o, (*z).ApplyData.AssetClosingAmount)
}
if (zb0001Mask & 0x10) == 0 { // if not empty
+ // string "apid"
+ o = append(o, 0xa4, 0x61, 0x70, 0x69, 0x64)
+ o = (*z).ApplyData.ApplicationID.MarshalMsg(o)
+ }
+ if (zb0001Mask & 0x20) == 0 { // if not empty
// string "ca"
o = append(o, 0xa2, 0x63, 0x61)
o = (*z).ApplyData.ClosingAmount.MarshalMsg(o)
}
- if (zb0001Mask & 0x20) == 0 { // if not empty
+ if (zb0001Mask & 0x40) == 0 { // if not empty
+ // string "caid"
+ o = append(o, 0xa4, 0x63, 0x61, 0x69, 0x64)
+ o = (*z).ApplyData.ConfigAsset.MarshalMsg(o)
+ }
+ if (zb0001Mask & 0x80) == 0 { // if not empty
// string "dt"
o = append(o, 0xa2, 0x64, 0x74)
o = (*z).ApplyData.EvalDelta.MarshalMsg(o)
}
- if (zb0001Mask & 0x40) == 0 { // if not empty
+ if (zb0001Mask & 0x100) == 0 { // if not empty
// string "lsig"
o = append(o, 0xa4, 0x6c, 0x73, 0x69, 0x67)
o = (*z).SignedTxn.Lsig.MarshalMsg(o)
}
- if (zb0001Mask & 0x80) == 0 { // if not empty
+ if (zb0001Mask & 0x200) == 0 { // if not empty
// string "msig"
o = append(o, 0xa4, 0x6d, 0x73, 0x69, 0x67)
o = (*z).SignedTxn.Msig.MarshalMsg(o)
}
- if (zb0001Mask & 0x100) == 0 { // if not empty
+ if (zb0001Mask & 0x400) == 0 { // if not empty
// string "rc"
o = append(o, 0xa2, 0x72, 0x63)
o = (*z).ApplyData.CloseRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x200) == 0 { // if not empty
+ if (zb0001Mask & 0x800) == 0 { // if not empty
// string "rr"
o = append(o, 0xa2, 0x72, 0x72)
o = (*z).ApplyData.ReceiverRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x400) == 0 { // if not empty
+ if (zb0001Mask & 0x1000) == 0 { // if not empty
// string "rs"
o = append(o, 0xa2, 0x72, 0x73)
o = (*z).ApplyData.SenderRewards.MarshalMsg(o)
}
- if (zb0001Mask & 0x800) == 0 { // if not empty
+ if (zb0001Mask & 0x2000) == 0 { // if not empty
// string "sgnr"
o = append(o, 0xa4, 0x73, 0x67, 0x6e, 0x72)
o = (*z).SignedTxn.AuthAddr.MarshalMsg(o)
}
- if (zb0001Mask & 0x1000) == 0 { // if not empty
+ if (zb0001Mask & 0x4000) == 0 { // if not empty
// string "sig"
o = append(o, 0xa3, 0x73, 0x69, 0x67)
o = (*z).SignedTxn.Sig.MarshalMsg(o)
}
- if (zb0001Mask & 0x2000) == 0 { // if not empty
+ if (zb0001Mask & 0x8000) == 0 { // if not empty
// string "txn"
o = append(o, 0xa3, 0x74, 0x78, 0x6e)
o = (*z).SignedTxn.Txn.MarshalMsg(o)
@@ -3548,6 +4027,22 @@ func (z *SignedTxnWithAD) UnmarshalMsg(bts []byte) (o []byte, err error) {
}
}
if zb0001 > 0 {
+ zb0001--
+ bts, err = (*z).ApplyData.ConfigAsset.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "ConfigAsset")
+ return
+ }
+ }
+ if zb0001 > 0 {
+ zb0001--
+ bts, err = (*z).ApplyData.ApplicationID.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "ApplicationID")
+ return
+ }
+ }
+ if zb0001 > 0 {
err = msgp.ErrTooManyArrayFields(zb0001)
if err != nil {
err = msgp.WrapError(err, "struct-from-array")
@@ -3636,6 +4131,18 @@ func (z *SignedTxnWithAD) UnmarshalMsg(bts []byte) (o []byte, err error) {
err = msgp.WrapError(err, "EvalDelta")
return
}
+ case "caid":
+ bts, err = (*z).ApplyData.ConfigAsset.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "ConfigAsset")
+ return
+ }
+ case "apid":
+ bts, err = (*z).ApplyData.ApplicationID.UnmarshalMsg(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "ApplicationID")
+ return
+ }
default:
err = msgp.ErrNoField(string(field))
if err != nil {
@@ -3656,13 +4163,13 @@ func (_ *SignedTxnWithAD) CanUnmarshalMsg(z interface{}) bool {
// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
func (z *SignedTxnWithAD) Msgsize() (s int) {
- s = 1 + 4 + (*z).SignedTxn.Sig.Msgsize() + 5 + (*z).SignedTxn.Msig.Msgsize() + 5 + (*z).SignedTxn.Lsig.Msgsize() + 4 + (*z).SignedTxn.Txn.Msgsize() + 5 + (*z).SignedTxn.AuthAddr.Msgsize() + 3 + (*z).ApplyData.ClosingAmount.Msgsize() + 4 + msgp.Uint64Size + 3 + (*z).ApplyData.SenderRewards.Msgsize() + 3 + (*z).ApplyData.ReceiverRewards.Msgsize() + 3 + (*z).ApplyData.CloseRewards.Msgsize() + 3 + (*z).ApplyData.EvalDelta.Msgsize()
+ s = 1 + 4 + (*z).SignedTxn.Sig.Msgsize() + 5 + (*z).SignedTxn.Msig.Msgsize() + 5 + (*z).SignedTxn.Lsig.Msgsize() + 4 + (*z).SignedTxn.Txn.Msgsize() + 5 + (*z).SignedTxn.AuthAddr.Msgsize() + 3 + (*z).ApplyData.ClosingAmount.Msgsize() + 4 + msgp.Uint64Size + 3 + (*z).ApplyData.SenderRewards.Msgsize() + 3 + (*z).ApplyData.ReceiverRewards.Msgsize() + 3 + (*z).ApplyData.CloseRewards.Msgsize() + 3 + (*z).ApplyData.EvalDelta.Msgsize() + 5 + (*z).ApplyData.ConfigAsset.Msgsize() + 5 + (*z).ApplyData.ApplicationID.Msgsize()
return
}
// MsgIsZero returns whether this is a zero value
func (z *SignedTxnWithAD) MsgIsZero() bool {
- return ((*z).SignedTxn.Sig.MsgIsZero()) && ((*z).SignedTxn.Msig.MsgIsZero()) && ((*z).SignedTxn.Lsig.MsgIsZero()) && ((*z).SignedTxn.Txn.MsgIsZero()) && ((*z).SignedTxn.AuthAddr.MsgIsZero()) && ((*z).ApplyData.ClosingAmount.MsgIsZero()) && ((*z).ApplyData.AssetClosingAmount == 0) && ((*z).ApplyData.SenderRewards.MsgIsZero()) && ((*z).ApplyData.ReceiverRewards.MsgIsZero()) && ((*z).ApplyData.CloseRewards.MsgIsZero()) && ((*z).ApplyData.EvalDelta.MsgIsZero())
+ return ((*z).SignedTxn.Sig.MsgIsZero()) && ((*z).SignedTxn.Msig.MsgIsZero()) && ((*z).SignedTxn.Lsig.MsgIsZero()) && ((*z).SignedTxn.Txn.MsgIsZero()) && ((*z).SignedTxn.AuthAddr.MsgIsZero()) && ((*z).ApplyData.ClosingAmount.MsgIsZero()) && ((*z).ApplyData.AssetClosingAmount == 0) && ((*z).ApplyData.SenderRewards.MsgIsZero()) && ((*z).ApplyData.ReceiverRewards.MsgIsZero()) && ((*z).ApplyData.CloseRewards.MsgIsZero()) && ((*z).ApplyData.EvalDelta.MsgIsZero()) && ((*z).ApplyData.ConfigAsset.MsgIsZero()) && ((*z).ApplyData.ApplicationID.MsgIsZero())
}
// MarshalMsg implements msgp.Marshaler
diff --git a/data/transactions/msgp_gen_test.go b/data/transactions/msgp_gen_test.go
index 8c8697f18..d92a29cf8 100644
--- a/data/transactions/msgp_gen_test.go
+++ b/data/transactions/msgp_gen_test.go
@@ -372,6 +372,66 @@ func BenchmarkUnmarshalCompactCertTxnFields(b *testing.B) {
}
}
+func TestMarshalUnmarshalEvalDelta(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ v := EvalDelta{}
+ bts := v.MarshalMsg(nil)
+ left, err := v.UnmarshalMsg(bts)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(left) > 0 {
+ t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
+ }
+
+ left, err = msgp.Skip(bts)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(left) > 0 {
+ t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
+ }
+}
+
+func TestRandomizedEncodingEvalDelta(t *testing.T) {
+ protocol.RunEncodingTest(t, &EvalDelta{})
+}
+
+func BenchmarkMarshalMsgEvalDelta(b *testing.B) {
+ v := EvalDelta{}
+ b.ReportAllocs()
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ v.MarshalMsg(nil)
+ }
+}
+
+func BenchmarkAppendMsgEvalDelta(b *testing.B) {
+ v := EvalDelta{}
+ bts := make([]byte, 0, v.Msgsize())
+ bts = v.MarshalMsg(bts[0:0])
+ b.SetBytes(int64(len(bts)))
+ b.ReportAllocs()
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ bts = v.MarshalMsg(bts[0:0])
+ }
+}
+
+func BenchmarkUnmarshalEvalDelta(b *testing.B) {
+ v := EvalDelta{}
+ bts := v.MarshalMsg(nil)
+ b.ReportAllocs()
+ b.SetBytes(int64(len(bts)))
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ _, err := v.UnmarshalMsg(bts)
+ if err != nil {
+ b.Fatal(err)
+ }
+ }
+}
+
func TestMarshalUnmarshalHeader(t *testing.T) {
partitiontest.PartitionTest(t)
v := Header{}
diff --git a/data/transactions/signedtxn.go b/data/transactions/signedtxn.go
index 8b54300d9..c30cd5303 100644
--- a/data/transactions/signedtxn.go
+++ b/data/transactions/signedtxn.go
@@ -18,6 +18,7 @@ package transactions
import (
"errors"
+ "fmt"
"github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/data/basics"
@@ -87,7 +88,7 @@ func (s SignedTxnInBlock) GetEncodedLength() int {
// This is just s.AuthAddr or, if s.AuthAddr is zero, s.Txn.Sender.
// It's provided as a convenience method.
func (s SignedTxn) Authorizer() basics.Address {
- if (s.AuthAddr == basics.Address{}) {
+ if s.AuthAddr.IsZero() {
return s.Txn.Sender
}
return s.AuthAddr
@@ -129,3 +130,32 @@ func WrapSignedTxnsWithAD(txgroup []SignedTxn) []SignedTxnWithAD {
}
return txgroupad
}
+
+// FeeCredit computes the amount of fee credit that can be spent on
+// inner txns because it was more than required.
+func FeeCredit(txgroup []SignedTxn, minFee uint64) (uint64, error) {
+ minFeeCount := uint64(0)
+ feesPaid := uint64(0)
+ for _, stxn := range txgroup {
+ if stxn.Txn.Type != protocol.CompactCertTx {
+ minFeeCount++
+ }
+ feesPaid = basics.AddSaturate(feesPaid, stxn.Txn.Fee.Raw)
+ }
+ feeNeeded, overflow := basics.OMul(minFee, minFeeCount)
+ if overflow {
+ return 0, fmt.Errorf("txgroup fee requirement overflow")
+ }
+ // feesPaid may have saturated. That's ok. Since we know
+ // feeNeeded did not overflow, simple comparison tells us
+ // feesPaid was enough.
+ if feesPaid < feeNeeded {
+ return 0, fmt.Errorf("txgroup had %d in fees, which is less than the minimum %d * %d",
+ feesPaid, minFeeCount, minFee)
+ }
+ // Now, if feesPaid *did* saturate, you will not get "credit" for
+ // all those fees while executing AVM code that might create
+ // transactions. But you'll get the max uint64 - good luck
+ // spending it.
+ return feesPaid - feeNeeded, nil
+}
diff --git a/data/transactions/sort.go b/data/transactions/sort.go
new file mode 100644
index 000000000..3746ab640
--- /dev/null
+++ b/data/transactions/sort.go
@@ -0,0 +1,37 @@
+// Copyright (C) 2019-2021 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
+
+package transactions
+
+// SortUint64 implements sorting by uint64 keys for
+// canonical encoding of maps in msgpack format.
+//msgp:ignore SortUint64
+//msgp:sort uint64 SortUint64
+type SortUint64 []uint64
+
+func (a SortUint64) Len() int { return len(a) }
+func (a SortUint64) Less(i, j int) bool { return a[i] < a[j] }
+func (a SortUint64) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+
+// SortString implements sorting by string keys for
+// canonical encoding of maps in msgpack format.
+//msgp:ignore SortString
+//msgp:sort string SortString
+type SortString []string
+
+func (a SortString) Len() int { return len(a) }
+func (a SortString) Less(i, j int) bool { return a[i] < a[j] }
+func (a SortString) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
diff --git a/data/transactions/teal.go b/data/transactions/teal.go
new file mode 100644
index 000000000..e2f6718b7
--- /dev/null
+++ b/data/transactions/teal.go
@@ -0,0 +1,111 @@
+// Copyright (C) 2019-2021 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
+
+package transactions
+
+import (
+ "bytes"
+
+ "github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/protocol"
+)
+
+// EvalDelta stores StateDeltas for an application's global key/value store, as
+// well as StateDeltas for some number of accounts holding local state for that
+// application
+type EvalDelta struct {
+ _struct struct{} `codec:",omitempty,omitemptyarray"`
+
+ GlobalDelta basics.StateDelta `codec:"gd"`
+
+ // When decoding EvalDeltas, the integer key represents an offset into
+ // [txn.Sender, txn.Accounts[0], txn.Accounts[1], ...]
+ LocalDeltas map[uint64]basics.StateDelta `codec:"ld,allocbound=config.MaxEvalDeltaAccounts"`
+
+ Logs []string `codec:"lg,allocbound=config.MaxLogCalls"`
+
+ // Intentionally, temporarily wrong - need to decide how to
+ // allocbound properly when structure is recursive. Even a bound
+ // of 2 would allow arbitrarily large object if deep.
+ InnerTxns []SignedTxnWithAD `codec:"itx,allocbound=config.MaxInnerTransactions"`
+}
+
+// Equal compares two EvalDeltas and returns whether or not they are
+// equivalent. It does not care about nilness equality of LocalDeltas,
+// because the msgpack codec will encode/decode an empty map as nil, and we want
+// an empty generated EvalDelta to equal an empty one we decode off the wire.
+func (ed EvalDelta) Equal(o EvalDelta) bool {
+ // LocalDeltas length should be the same
+ if len(ed.LocalDeltas) != len(o.LocalDeltas) {
+ return false
+ }
+
+ // All keys and local StateDeltas should be the same
+ for k, v := range ed.LocalDeltas {
+ // Other LocalDelta must have value for key
+ ov, ok := o.LocalDeltas[k]
+ if !ok {
+ return false
+ }
+
+ // Other LocalDelta must have same value for key
+ if !ov.Equal(v) {
+ return false
+ }
+ }
+
+ // GlobalDeltas must be equal
+ if !ed.GlobalDelta.Equal(o.GlobalDelta) {
+ return false
+ }
+
+ // Logs must be equal
+ if len(ed.Logs) != len(o.Logs) {
+ return false
+ }
+ for i, l := range ed.Logs {
+ if l != o.Logs[i] {
+ return false
+ }
+ }
+
+ // InnerTxns must be equal
+ if len(ed.InnerTxns) != len(o.InnerTxns) {
+ return false
+ }
+ for i, txn := range ed.InnerTxns {
+ if !txn.SignedTxn.equal(o.InnerTxns[i].SignedTxn) {
+ return false
+ }
+ if !txn.ApplyData.Equal(o.InnerTxns[i].ApplyData) {
+ return false
+ }
+ }
+
+ return true
+}
+
+// equal compares two SignedTransactions for equality. It's not
+// exported because it ought to be written as (many, very, very
+// tedious) field comparisons. == is not defined on almost any of the
+// subfields because of slices.
+func (stx SignedTxn) equal(o SignedTxn) bool {
+ stxenc := stx.MarshalMsg(protocol.GetEncodingBuf())
+ defer protocol.PutEncodingBuf(stxenc)
+ oenc := o.MarshalMsg(protocol.GetEncodingBuf())
+ defer protocol.PutEncodingBuf(oenc)
+ return bytes.Equal(stxenc, oenc)
+}
diff --git a/data/transactions/teal_test.go b/data/transactions/teal_test.go
new file mode 100644
index 000000000..32eea6abb
--- /dev/null
+++ b/data/transactions/teal_test.go
@@ -0,0 +1,189 @@
+// Copyright (C) 2019-2021 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
+
+package transactions
+
+import (
+ "testing"
+
+ "github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
+ "github.com/stretchr/testify/require"
+)
+
+func TestEvalDeltaEqual(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ a := require.New(t)
+
+ d1 := EvalDelta{}
+ d2 := EvalDelta{}
+ a.True(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ GlobalDelta: nil,
+ LocalDeltas: nil,
+ Logs: nil,
+ }
+ a.True(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ GlobalDelta: basics.StateDelta{},
+ LocalDeltas: map[uint64]basics.StateDelta{},
+ Logs: []string{},
+ }
+ a.True(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ GlobalDelta: basics.StateDelta{"test": {Action: basics.SetUintAction, Uint: 0}},
+ }
+ a.False(d1.Equal(d2))
+
+ d1 = EvalDelta{
+ GlobalDelta: basics.StateDelta{"test": {Action: basics.SetUintAction, Uint: 0}},
+ }
+ a.True(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 0: {"test": {Action: basics.SetUintAction, Uint: 0}},
+ },
+ }
+ a.False(d1.Equal(d2))
+
+ d1 = EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 0: {"test": {Action: basics.SetUintAction, Uint: 1}},
+ },
+ }
+ a.False(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 0: {"test": {Action: basics.SetUintAction, Uint: 1}},
+ },
+ }
+ a.True(d1.Equal(d2))
+
+ d1 = EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 0: {"test": {Action: basics.SetBytesAction, Bytes: "val"}},
+ },
+ }
+ d2 = EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 0: {"test": {Action: basics.SetBytesAction, Bytes: "val"}},
+ },
+ }
+ a.True(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 0: {"test": {Action: basics.SetBytesAction, Bytes: "val1"}},
+ },
+ }
+ a.False(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 1: {"test": {Action: basics.SetBytesAction, Bytes: "val"}},
+ },
+ }
+ a.False(d1.Equal(d2))
+
+ d2 = EvalDelta{
+ Logs: []string{"val"},
+ }
+ a.False(d1.Equal(d2))
+
+ d1 = EvalDelta{
+ Logs: []string{"val2"},
+ }
+ a.False(d1.Equal(d2))
+
+ d1 = EvalDelta{
+ Logs: []string{"val", "val2"},
+ }
+ a.False(d1.Equal(d2))
+
+ d1 = EvalDelta{
+ Logs: []string{"val"},
+ }
+ a.True(d1.Equal(d2))
+
+ // Test inner transaction equality
+ d1 = EvalDelta{
+ InnerTxns: []SignedTxnWithAD{},
+ }
+ d2 = EvalDelta{
+ InnerTxns: nil,
+ }
+ a.True(d1.Equal(d2))
+
+ // Test inner transaction equality
+ d1 = EvalDelta{
+ InnerTxns: []SignedTxnWithAD{{
+ SignedTxn: SignedTxn{
+ Lsig: LogicSig{
+ Logic: []byte{0x01},
+ },
+ },
+ }},
+ }
+ d2 = EvalDelta{
+ InnerTxns: []SignedTxnWithAD{{
+ SignedTxn: SignedTxn{
+ Lsig: LogicSig{
+ Logic: []byte{0x01},
+ },
+ },
+ }},
+ }
+ a.True(d1.Equal(d2))
+ d2 = EvalDelta{
+ InnerTxns: []SignedTxnWithAD{{
+ SignedTxn: SignedTxn{
+ Lsig: LogicSig{
+ Logic: []byte{0x02},
+ Args: [][]byte{},
+ },
+ },
+ }},
+ }
+ a.False(d1.Equal(d2))
+
+ d1 = EvalDelta{
+ InnerTxns: []SignedTxnWithAD{{
+ SignedTxn: SignedTxn{
+ Txn: Transaction{
+ Type: protocol.TxType("pay"),
+ },
+ },
+ }},
+ }
+ d2 = EvalDelta{
+ InnerTxns: []SignedTxnWithAD{{
+ SignedTxn: SignedTxn{
+ Txn: Transaction{
+ Type: protocol.TxType("axfer"),
+ },
+ },
+ }},
+ }
+ a.False(d1.Equal(d2))
+
+}
diff --git a/data/transactions/transaction.go b/data/transactions/transaction.go
index 552255796..fb356bb04 100644
--- a/data/transactions/transaction.go
+++ b/data/transactions/transaction.go
@@ -112,7 +112,13 @@ type ApplyData struct {
SenderRewards basics.MicroAlgos `codec:"rs"`
ReceiverRewards basics.MicroAlgos `codec:"rr"`
CloseRewards basics.MicroAlgos `codec:"rc"`
- EvalDelta basics.EvalDelta `codec:"dt"`
+ EvalDelta EvalDelta `codec:"dt"`
+
+ // If asa or app is being created, the id used. Else 0.
+ // Names chosen to match naming the corresponding txn.
+ // These are populated on when MaxInnerTransactions > 0 (TEAL 5)
+ ConfigAsset basics.AssetIndex `codec:"caid"`
+ ApplicationID basics.AppIndex `codec:"apid"`
}
// Equal returns true if two ApplyDatas are equal, ignoring nilness equality on
@@ -133,6 +139,12 @@ func (ad ApplyData) Equal(o ApplyData) bool {
if ad.CloseRewards != o.CloseRewards {
return false
}
+ if ad.ConfigAsset != o.ConfigAsset {
+ return false
+ }
+ if ad.ApplicationID != o.ApplicationID {
+ return false
+ }
if !ad.EvalDelta.Equal(o.EvalDelta) {
return false
}
diff --git a/data/transactions/verify/txn.go b/data/transactions/verify/txn.go
index cb2d6d875..13a07b328 100644
--- a/data/transactions/verify/txn.go
+++ b/data/transactions/verify/txn.go
@@ -41,14 +41,14 @@ var logicErrTotal = metrics.MakeCounter(metrics.MetricName{Name: "algod_ledger_l
// When doing so, it attempts to break these into smaller "worksets" where each workset takes about 2ms of execution time in order
// to avoid context switching overhead while providing good validation cancelation responsiveness. Each one of these worksets is
// "populated" with roughly txnPerWorksetThreshold transactions. ( note that the real evaluation time is unknown, but benchmarks
-// showen that these are realistic numbers )
+// show that these are realistic numbers )
const txnPerWorksetThreshold = 32
// When the PaysetGroups is generating worksets, it enqueues up to concurrentWorksets entries to the execution pool. This serves several
// purposes :
// - if the verification task need to be aborted, there are only concurrentWorksets entries that are currently redundant on the execution pool queue.
// - that number of concurrent tasks would not get beyond the capacity of the execution pool back buffer.
-// - if we were to "redundently" execute all these during context cancelation, we would spent at most 2ms * 16 = 32ms time.
+// - if we were to "redundantly" execute all these during context cancelation, we would spent at most 2ms * 16 = 32ms time.
// - it allows us to linearly scan the input, and process elements only once we're going to queue them into the pool.
const concurrentWorksets = 16
@@ -177,7 +177,7 @@ func TxnGroupBatchVerify(stxs []transactions.SignedTxn, contextHdr bookkeeping.B
return
}
// feesPaid may have saturated. That's ok. Since we know
- // feeNeeded did not overlfow, simple comparison tells us
+ // feeNeeded did not overflow, simple comparison tells us
// feesPaid was enough.
if feesPaid < feeNeeded {
err = fmt.Errorf("txgroup had %d in fees, which is less than the minimum %d * %d",
@@ -286,11 +286,14 @@ func LogicSigSanityCheckBatchVerify(txn *transactions.SignedTxn, groupIndex int,
return errors.New("LogicSig.Logic too long")
}
+ if groupIndex < 0 {
+ return errors.New("Negative groupIndex")
+ }
ep := logic.EvalParams{
Txn: txn,
Proto: &groupCtx.consensusParams,
TxnGroup: groupCtx.signedGroupTxns,
- GroupIndex: groupIndex,
+ GroupIndex: uint64(groupIndex),
MinTealVersion: &groupCtx.minTealVersion,
}
err := logic.Check(lsig.Logic, ep)
@@ -340,11 +343,14 @@ func logicSigBatchVerify(txn *transactions.SignedTxn, groupIndex int, groupCtx *
return err
}
+ if groupIndex < 0 {
+ return errors.New("Negative groupIndex")
+ }
ep := logic.EvalParams{
Txn: txn,
Proto: &groupCtx.consensusParams,
TxnGroup: groupCtx.signedGroupTxns,
- GroupIndex: groupIndex,
+ GroupIndex: uint64(groupIndex),
MinTealVersion: &groupCtx.minTealVersion,
}
pass, err := logic.Eval(txn.Lsig.Logic, ep)
diff --git a/data/transactions/verify/verifiedTxnCache.go b/data/transactions/verify/verifiedTxnCache.go
index 44a230010..0c9bbe2c0 100644
--- a/data/transactions/verify/verifiedTxnCache.go
+++ b/data/transactions/verify/verifiedTxnCache.go
@@ -26,7 +26,6 @@ import (
"github.com/algorand/go-algorand/protocol"
)
-const entriesPerBucket = 8179 // the default bucket size; a prime number could promote a lower hash collisions in case the hash function isn't perfect.
const maxPinnedEntries = 500000
// VerifiedTxnCacheError helps to identify the errors of a cache error and diffrenciate these from a general verification errors.
@@ -72,6 +71,8 @@ type VerifiedTransactionCache interface {
// verifiedTransactionCache provides an implementation of the VerifiedTransactionCache interface
type verifiedTransactionCache struct {
+ // Number of entries in each map (bucket).
+ entriesPerBucket int
// bucketsLock is the lock for syncornizing the access to the cache
bucketsLock deadlock.Mutex
// buckets is the circular cache buckets buffer
@@ -84,14 +85,14 @@ type verifiedTransactionCache struct {
// MakeVerifiedTransactionCache creates an instance of verifiedTransactionCache and returns it.
func MakeVerifiedTransactionCache(cacheSize int) VerifiedTransactionCache {
- bucketsCount := 1 + (cacheSize / entriesPerBucket)
impl := &verifiedTransactionCache{
- buckets: make([]map[transactions.Txid]*GroupContext, bucketsCount),
- pinned: make(map[transactions.Txid]*GroupContext, cacheSize),
- base: 0,
+ entriesPerBucket: (cacheSize + 1) / 2,
+ buckets: make([]map[transactions.Txid]*GroupContext, 3),
+ pinned: make(map[transactions.Txid]*GroupContext, cacheSize),
+ base: 0,
}
- for i := 0; i < bucketsCount; i++ {
- impl.buckets[i] = make(map[transactions.Txid]*GroupContext, entriesPerBucket)
+ for i := 0; i < len(impl.buckets); i++ {
+ impl.buckets[i] = make(map[transactions.Txid]*GroupContext, impl.entriesPerBucket)
}
return impl
}
@@ -245,10 +246,10 @@ func (v *verifiedTransactionCache) Pin(txgroup []transactions.SignedTxn) (err er
// add is the internal implementation of Add/AddPayset which adds a transaction group to the buffer.
func (v *verifiedTransactionCache) add(txgroup []transactions.SignedTxn, groupCtx *GroupContext) {
- if len(v.buckets[v.base])+len(txgroup) > entriesPerBucket {
+ if len(v.buckets[v.base])+len(txgroup) > v.entriesPerBucket {
// move to the next bucket while deleting the content of the next bucket.
v.base = (v.base + 1) % len(v.buckets)
- v.buckets[v.base] = make(map[transactions.Txid]*GroupContext, entriesPerBucket)
+ v.buckets[v.base] = make(map[transactions.Txid]*GroupContext, v.entriesPerBucket)
}
currentBucket := v.buckets[v.base]
for _, txn := range txgroup {
diff --git a/data/transactions/verify/verifiedTxnCache_test.go b/data/transactions/verify/verifiedTxnCache_test.go
index db1cddec7..c6e720b62 100644
--- a/data/transactions/verify/verifiedTxnCache_test.go
+++ b/data/transactions/verify/verifiedTxnCache_test.go
@@ -49,7 +49,8 @@ func TestBucketCycling(t *testing.T) {
partitiontest.PartitionTest(t)
bucketCount := 3
- icache := MakeVerifiedTransactionCache(entriesPerBucket * bucketCount)
+ entriesPerBucket := 100
+ icache := MakeVerifiedTransactionCache(entriesPerBucket * (bucketCount - 1))
impl := icache.(*verifiedTransactionCache)
_, signedTxn, _, _ := generateTestObjects(entriesPerBucket*bucketCount*2, bucketCount, 0)
@@ -58,7 +59,7 @@ func TestBucketCycling(t *testing.T) {
require.NoError(t, err)
// fill up the cache with entries.
- for i := 0; i < entriesPerBucket*(bucketCount+1); i++ {
+ for i := 0; i < entriesPerBucket*bucketCount; i++ {
impl.Add([]transactions.SignedTxn{signedTxn[i]}, groupCtx)
// test to see that the base is sliding when bucket get filled up.
require.Equal(t, i/entriesPerBucket, impl.base)
@@ -136,13 +137,13 @@ func BenchmarkGetUnverifiedTranscationGroups50(b *testing.B) {
func TestUpdatePinned(t *testing.T) {
partitiontest.PartitionTest(t)
- size := entriesPerBucket
+ size := 100
icache := MakeVerifiedTransactionCache(size * 10)
impl := icache.(*verifiedTransactionCache)
_, signedTxn, secrets, addrs := generateTestObjects(size*2, 10, 0)
txnGroups := generateTransactionGroups(signedTxn, secrets, addrs)
- // insert half of the entries.
+ // insert some entries.
for i := 0; i < len(txnGroups); i++ {
groupCtx, _ := PrepareGroupContext(txnGroups[i], blockHeader)
impl.Add(txnGroups[i], groupCtx)
@@ -165,7 +166,7 @@ func TestUpdatePinned(t *testing.T) {
func TestPinningTransactions(t *testing.T) {
partitiontest.PartitionTest(t)
- size := entriesPerBucket
+ size := 100
icache := MakeVerifiedTransactionCache(size)
impl := icache.(*verifiedTransactionCache)
_, signedTxn, secrets, addrs := generateTestObjects(size*2, 10, 0)
@@ -182,5 +183,4 @@ func TestPinningTransactions(t *testing.T) {
// try to pin an entry that was not added.
require.Error(t, impl.Pin(txnGroups[len(txnGroups)-1]))
-
}
diff --git a/data/txntest/txn.go b/data/txntest/txn.go
index 98357f957..5d3a6d77f 100644
--- a/data/txntest/txn.go
+++ b/data/txntest/txn.go
@@ -33,11 +33,15 @@
package txntest
import (
+ "fmt"
+ "strings"
+
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/crypto/compactcert"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
+ "github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/protocol"
)
@@ -47,7 +51,7 @@ type Txn struct {
Type protocol.TxType
Sender basics.Address
- Fee basics.MicroAlgos
+ Fee uint64
FirstValid basics.Round
LastValid basics.Round
Note []byte
@@ -65,7 +69,7 @@ type Txn struct {
Nonparticipation bool
Receiver basics.Address
- Amount basics.MicroAlgos
+ Amount uint64
CloseRemainderTo basics.Address
ConfigAsset basics.AssetIndex
@@ -89,8 +93,8 @@ type Txn struct {
ForeignAssets []basics.AssetIndex
LocalStateSchema basics.StateSchema
GlobalStateSchema basics.StateSchema
- ApprovalProgram []byte
- ClearStateProgram []byte
+ ApprovalProgram string
+ ClearStateProgram string
ExtraProgramPages uint32
CertRound basics.Round
@@ -98,15 +102,46 @@ type Txn struct {
Cert compactcert.Cert
}
+// Noted returns a new Txn with the given note field.
+func (tx *Txn) Noted(note string) *Txn {
+ copy := &Txn{}
+ *copy = *tx
+ copy.Note = []byte(note)
+ return copy
+}
+
// FillDefaults populates some obvious defaults from config params,
// unless they have already been set.
func (tx *Txn) FillDefaults(params config.ConsensusParams) {
- if tx.Fee.IsZero() {
- tx.Fee = basics.MicroAlgos{Raw: params.MinTxnFee}
+ if tx.Fee == 0 {
+ tx.Fee = params.MinTxnFee
}
if tx.LastValid == 0 {
tx.LastValid = tx.FirstValid + basics.Round(params.MaxTxnLife)
}
+ if tx.ApprovalProgram != "" && !strings.Contains(tx.ApprovalProgram, "#pragma version") {
+ pragma := fmt.Sprintf("#pragma version %d\n", params.LogicSigVersion)
+ tx.ApprovalProgram = pragma + tx.ApprovalProgram
+ }
+ if tx.ApprovalProgram != "" && tx.ClearStateProgram == "" {
+ tx.ClearStateProgram = "int 0"
+ }
+ if tx.ClearStateProgram != "" && !strings.Contains(tx.ClearStateProgram, "#pragma version") {
+ pragma := fmt.Sprintf("#pragma version %d\n", params.LogicSigVersion)
+ tx.ClearStateProgram = pragma + tx.ClearStateProgram
+ }
+}
+
+func assemble(source string) []byte {
+ if source == "" {
+ return nil
+ }
+ ops, err := logic.AssembleString(source)
+ if err != nil {
+ fmt.Printf("Bad program %v", ops.Errors)
+ panic(ops.Errors)
+ }
+ return ops.Program
}
// Txn produces a transactions.Transaction from the fields in this Txn
@@ -115,7 +150,7 @@ func (tx Txn) Txn() transactions.Transaction {
Type: tx.Type,
Header: transactions.Header{
Sender: tx.Sender,
- Fee: tx.Fee,
+ Fee: basics.MicroAlgos{Raw: tx.Fee},
FirstValid: tx.FirstValid,
LastValid: tx.LastValid,
Note: tx.Note,
@@ -135,7 +170,7 @@ func (tx Txn) Txn() transactions.Transaction {
},
PaymentTxnFields: transactions.PaymentTxnFields{
Receiver: tx.Receiver,
- Amount: tx.Amount,
+ Amount: basics.MicroAlgos{Raw: tx.Amount},
CloseRemainderTo: tx.CloseRemainderTo,
},
AssetConfigTxnFields: transactions.AssetConfigTxnFields{
@@ -163,8 +198,8 @@ func (tx Txn) Txn() transactions.Transaction {
ForeignAssets: tx.ForeignAssets,
LocalStateSchema: tx.LocalStateSchema,
GlobalStateSchema: tx.GlobalStateSchema,
- ApprovalProgram: tx.ApprovalProgram,
- ClearStateProgram: tx.ClearStateProgram,
+ ApprovalProgram: assemble(tx.ApprovalProgram),
+ ClearStateProgram: assemble(tx.ClearStateProgram),
ExtraProgramPages: tx.ExtraProgramPages,
},
CompactCertTxnFields: transactions.CompactCertTxnFields{
@@ -181,3 +216,34 @@ func (tx Txn) Txn() transactions.Transaction {
func (tx Txn) SignedTxn() transactions.SignedTxn {
return transactions.SignedTxn{Txn: tx.Txn()}
}
+
+// SignedTxnWithAD produces unsigned, transactions.SignedTxnWithAD
+// from the fields in this Txn. This seemingly pointless operation
+// exists, again, for convenience when driving tests.
+func (tx Txn) SignedTxnWithAD() transactions.SignedTxnWithAD {
+ return transactions.SignedTxnWithAD{SignedTxn: tx.SignedTxn()}
+}
+
+// SignedTxns turns a list of Txns into a slice of SignedTxns with
+// GroupIDs set properly to make them a transaction group. Maybe
+// another name is more approrpriate
+func SignedTxns(txns ...*Txn) []transactions.SignedTxn {
+ txgroup := transactions.TxGroup{
+ TxGroupHashes: make([]crypto.Digest, len(txns)),
+ }
+ for i, txn := range txns {
+ txn.Group = crypto.Digest{}
+ txgroup.TxGroupHashes[i] = crypto.HashObj(txn.Txn())
+ }
+ group := crypto.HashObj(txgroup)
+ for _, txn := range txns {
+ txn.Group = group
+ }
+
+ stxns := make([]transactions.SignedTxn, len(txns))
+ for i, txn := range txns {
+ stxns[i] = txn.SignedTxn()
+ }
+ return stxns
+
+}
diff --git a/debug/logfilter/main_test.go b/debug/logfilter/main_test.go
index 963e28c34..a68007374 100644
--- a/debug/logfilter/main_test.go
+++ b/debug/logfilter/main_test.go
@@ -25,10 +25,12 @@ import (
"strings"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestLogFilterExamples(t *testing.T) {
+ partitiontest.PartitionTest(t)
// iterate on all the example files in the local directory.
exampleFiles := []string{}
filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
diff --git a/gen/generate_test.go b/gen/generate_test.go
index c8a6656d8..8b1c90e43 100644
--- a/gen/generate_test.go
+++ b/gen/generate_test.go
@@ -30,6 +30,7 @@ import (
"github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/util/db"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -105,6 +106,7 @@ func TestLoadSingleRootKeyConcurrent(t *testing.T) {
}
func TestGenesisRoundoff(t *testing.T) {
+ partitiontest.PartitionTest(t)
verbosity := strings.Builder{}
genesisData := DefaultGenesis
genesisData.NetworkName = "wat"
diff --git a/go.mod b/go.mod
index f77970958..e78060cd2 100644
--- a/go.mod
+++ b/go.mod
@@ -28,7 +28,7 @@ require (
github.com/gorilla/websocket v1.4.2 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/jmoiron/sqlx v1.2.0
- github.com/karalabe/hid v0.0.0-20181128192157-d815e0c1a2e2
+ github.com/karalabe/hid v1.0.0
github.com/labstack/echo/v4 v4.1.17
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-sqlite3 v1.10.0
diff --git a/go.sum b/go.sum
index 1966c8ede..c4fe5d039 100644
--- a/go.sum
+++ b/go.sum
@@ -72,8 +72,8 @@ github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/karalabe/hid v0.0.0-20181128192157-d815e0c1a2e2 h1:BkkpZxPVs3gIf+3Tejt8lWzuo2P29N1ChGUMEpuSJ8U=
-github.com/karalabe/hid v0.0.0-20181128192157-d815e0c1a2e2/go.mod h1:YvbcH+3Wo6XPs9nkgTY3u19KXLauXW+J5nB7hEHuX0A=
+github.com/karalabe/hid v1.0.0 h1:+/CIMNXhSU/zIJgnIvBD2nKHxS/bnRHhhs9xBryLpPo=
+github.com/karalabe/hid v1.0.0/go.mod h1:Vr51f8rUOLYrfrWDFlV12GGQgM5AT8sVh+2fY4MPeu8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
diff --git a/ledger/accountdb_test.go b/ledger/accountdb_test.go
index 30fad6f92..38dcf996b 100644
--- a/ledger/accountdb_test.go
+++ b/ledger/accountdb_test.go
@@ -47,6 +47,12 @@ func randomAddress() basics.Address {
return addr
}
+func randomNote() []byte {
+ var note [16]byte
+ crypto.RandBytes(note[:])
+ return note[:]
+}
+
func randomAccountData(rewardsLevel uint64) basics.AccountData {
var data basics.AccountData
diff --git a/ledger/appcow.go b/ledger/appcow.go
index 5cf3b568c..22623c13c 100644
--- a/ledger/appcow.go
+++ b/ledger/appcow.go
@@ -456,12 +456,6 @@ func (cb *roundCowState) DelKey(addr basics.Address, aidx basics.AppIndex, globa
return nil // note: deletion cannot cause us to violate maxCount
}
-// AppendLog adds message in logs. idx is expected to be an index in txn.ForeignApps
-func (cb *roundCowState) AppendLog(idx uint64, value string) error {
- cb.logs = append(cb.logs, basics.LogItem{ID: idx, Message: value})
- return nil
-}
-
// MakeDebugBalances creates a ledger suitable for dryrun and debugger
func MakeDebugBalances(l ledgerForCowBase, round basics.Round, proto protocol.ConsensusVersion, prevTimestamp int64) apply.Balances {
base := &roundCowBase{
@@ -476,40 +470,44 @@ func MakeDebugBalances(l ledgerForCowBase, round basics.Round, proto protocol.Co
UpgradeState: bookkeeping.UpgradeState{CurrentProtocol: proto},
}
hint := 2
- cb := makeRoundCowState(base, hdr, prevTimestamp, hint)
+ cb := makeRoundCowState(base, hdr, config.Consensus[proto], prevTimestamp, hint)
return cb
}
// StatefulEval runs application.
// Execution happens in a child cow and all modifications are merged into parent if the program passes
-func (cb *roundCowState) StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (pass bool, evalDelta basics.EvalDelta, err error) {
+func (cb *roundCowState) StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (pass bool, evalDelta transactions.EvalDelta, err error) {
// Make a child cow to eval our program in
calf := cb.child(1)
params.Ledger, err = newLogicLedger(calf, aidx)
if err != nil {
- return false, basics.EvalDelta{}, err
+ return false, transactions.EvalDelta{}, err
}
// Eval the program
- pass, err = logic.EvalStateful(program, params)
+ var cx *logic.EvalContext
+ pass, cx, err = logic.EvalStatefulCx(program, params)
if err != nil {
- return false, basics.EvalDelta{}, ledgercore.LogicEvalError{Err: err}
+ return false, transactions.EvalDelta{}, ledgercore.LogicEvalError{Err: err}
}
// If program passed, build our eval delta, and commit to state changes
if pass {
evalDelta, err = calf.BuildEvalDelta(aidx, &params.Txn.Txn)
if err != nil {
- return false, basics.EvalDelta{}, err
+ return false, transactions.EvalDelta{}, err
}
calf.commitToParent()
+ evalDelta.Logs = cx.Logs
+ evalDelta.InnerTxns = cx.InnerTxns
}
return pass, evalDelta, nil
}
-// BuildEvalDelta converts internal sdeltas and logs into basics.EvalDelta
-func (cb *roundCowState) BuildEvalDelta(aidx basics.AppIndex, txn *transactions.Transaction) (evalDelta basics.EvalDelta, err error) {
+// BuildEvalDelta creates an EvalDelta by converting internal sdeltas
+// into the (Global|Local)Delta fields.
+func (cb *roundCowState) BuildEvalDelta(aidx basics.AppIndex, txn *transactions.Transaction) (evalDelta transactions.EvalDelta, err error) {
// sdeltas
foundGlobal := false
for addr, smod := range cb.sdeltas {
@@ -517,13 +515,13 @@ func (cb *roundCowState) BuildEvalDelta(aidx basics.AppIndex, txn *transactions.
// Check that all of these deltas are for the correct app
if aapp.aidx != aidx {
err = fmt.Errorf("found storage delta for different app during StatefulEval/BuildDelta: %d != %d", aapp.aidx, aidx)
- return basics.EvalDelta{}, err
+ return transactions.EvalDelta{}, err
}
if aapp.global {
// Check that there is at most one global delta
if foundGlobal {
err = fmt.Errorf("found more than one global delta during StatefulEval/BuildDelta: %d", aapp.aidx)
- return basics.EvalDelta{}, err
+ return transactions.EvalDelta{}, err
}
evalDelta.GlobalDelta = sdelta.kvCow.serialize()
foundGlobal = true
@@ -543,7 +541,7 @@ func (cb *roundCowState) BuildEvalDelta(aidx basics.AppIndex, txn *transactions.
} else {
addrOffset, err = txn.IndexByAddress(addr, txn.Sender)
if err != nil {
- return basics.EvalDelta{}, err
+ return transactions.EvalDelta{}, err
}
}
@@ -558,9 +556,6 @@ func (cb *roundCowState) BuildEvalDelta(aidx basics.AppIndex, txn *transactions.
}
}
- // logs
- evalDelta.Logs = cb.logs
-
return
}
diff --git a/ledger/appcow_test.go b/ledger/appcow_test.go
index 92c226d5a..28096d8bc 100644
--- a/ledger/appcow_test.go
+++ b/ledger/appcow_test.go
@@ -195,7 +195,9 @@ func TestCowStorage(t *testing.T) {
ml := emptyLedger{}
var bh bookkeeping.BlockHeader
bh.CurrentProtocol = protocol.ConsensusCurrentVersion
- cow := makeRoundCowState(&ml, bh, 0, 0)
+ proto, ok := config.Consensus[bh.CurrentProtocol]
+ require.True(t, ok)
+ cow := makeRoundCowState(&ml, bh, proto, 0, 0)
allSptrs, allAddrs := randomAddrApps(10)
st := makeStateTracker()
@@ -387,7 +389,7 @@ func TestCowBuildDelta(t *testing.T) {
cow.sdeltas[creator][storagePtr{aidx, true}] = &storageDelta{}
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
- a.Equal(basics.EvalDelta{GlobalDelta: basics.StateDelta{}}, ed)
+ a.Equal(transactions.EvalDelta{GlobalDelta: basics.StateDelta{}}, ed)
cow.sdeltas[creator][storagePtr{aidx + 1, true}] = &storageDelta{}
ed, err = cow.BuildEvalDelta(aidx, &txn)
@@ -420,7 +422,7 @@ func TestCowBuildDelta(t *testing.T) {
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
a.Equal(
- basics.EvalDelta{
+ transactions.EvalDelta{
GlobalDelta: basics.StateDelta{},
LocalDeltas: map[uint64]basics.StateDelta{0: {}},
},
@@ -433,7 +435,7 @@ func TestCowBuildDelta(t *testing.T) {
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
a.Equal(
- basics.EvalDelta{
+ transactions.EvalDelta{
GlobalDelta: basics.StateDelta{},
LocalDeltas: map[uint64]basics.StateDelta{},
},
@@ -456,7 +458,7 @@ func TestCowBuildDelta(t *testing.T) {
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
a.Equal(
- basics.EvalDelta{
+ transactions.EvalDelta{
GlobalDelta: basics.StateDelta(nil),
LocalDeltas: map[uint64]basics.StateDelta{
0: {
@@ -496,7 +498,7 @@ func TestCowBuildDelta(t *testing.T) {
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
a.Equal(
- basics.EvalDelta{
+ transactions.EvalDelta{
GlobalDelta: basics.StateDelta(nil),
LocalDeltas: map[uint64]basics.StateDelta{
1: {
@@ -530,7 +532,7 @@ func TestCowBuildDelta(t *testing.T) {
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
a.Equal(
- basics.EvalDelta{
+ transactions.EvalDelta{
GlobalDelta: basics.StateDelta(nil),
LocalDeltas: map[uint64]basics.StateDelta{
0: {
@@ -561,7 +563,7 @@ func TestCowBuildDelta(t *testing.T) {
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
a.Equal(
- basics.EvalDelta{
+ transactions.EvalDelta{
GlobalDelta: basics.StateDelta(nil),
LocalDeltas: map[uint64]basics.StateDelta{
1: {
@@ -589,7 +591,7 @@ func TestCowBuildDelta(t *testing.T) {
ed, err = cow.BuildEvalDelta(aidx, &txn)
a.NoError(err)
a.Equal(
- basics.EvalDelta{
+ transactions.EvalDelta{
GlobalDelta: basics.StateDelta(nil),
LocalDeltas: map[uint64]basics.StateDelta{
0: {
@@ -599,36 +601,6 @@ func TestCowBuildDelta(t *testing.T) {
},
ed,
)
-
- // check logDelta is added
- cow.logs = []basics.LogItem{{ID: 0, Message: "hello,world"}}
- cow.sdeltas[sender][storagePtr{aidx, false}] = &storageDelta{
- action: remainAllocAction,
- kvCow: stateDelta{
- "key1": valueDelta{
- old: basics.TealValue{Type: basics.TealUintType, Uint: 1},
- new: basics.TealValue{Type: basics.TealUintType, Uint: 2},
- oldExists: true,
- newExists: true,
- },
- },
- accountIdx: 1,
- }
- ed, err = cow.BuildEvalDelta(aidx, &txn)
- a.NoError(err)
- a.Equal(
- basics.EvalDelta{
- GlobalDelta: basics.StateDelta(nil),
- LocalDeltas: map[uint64]basics.StateDelta{
- 0: {
- "key1": basics.ValueDelta{Action: basics.SetUintAction, Uint: 2},
- },
- },
- Logs: []basics.LogItem{{ID: 0, Message: "hello,world"}},
- },
- ed,
- )
-
}
func TestCowDeltaSerialize(t *testing.T) {
@@ -1358,19 +1330,3 @@ func TestCowDelKey(t *testing.T) {
a.Panics(func() { c.DelKey(getRandomAddress(a), aidx, false, key, 0) })
a.Panics(func() { c.DelKey(addr, aidx+1, false, key, 0) })
}
-func TestCowAppendLog(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- a := require.New(t)
-
- addr := getRandomAddress(a)
- aidx := basics.AppIndex(0)
- c := getCow([]modsData{
- {addr, basics.CreatableIndex(aidx), basics.AppCreatable},
- })
-
- c.logs = []basics.LogItem{}
- err := c.AppendLog(uint64(aidx), "val")
- a.NoError(err)
- a.Equal(len(c.logs), 1)
-}
diff --git a/ledger/applications.go b/ledger/applications.go
index 241b9c87b..9b3cb27b4 100644
--- a/ledger/applications.go
+++ b/ledger/applications.go
@@ -22,6 +22,8 @@ import (
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
+ "github.com/algorand/go-algorand/ledger/apply"
+ "github.com/algorand/go-algorand/protocol"
)
type logicLedger struct {
@@ -35,16 +37,16 @@ type cowForLogicLedger interface {
GetCreatableID(groupIdx int) basics.CreatableIndex
GetCreator(cidx basics.CreatableIndex, ctype basics.CreatableType) (basics.Address, bool, error)
GetKey(addr basics.Address, aidx basics.AppIndex, global bool, key string, accountIdx uint64) (basics.TealValue, bool, error)
- BuildEvalDelta(aidx basics.AppIndex, txn *transactions.Transaction) (basics.EvalDelta, error)
+ BuildEvalDelta(aidx basics.AppIndex, txn *transactions.Transaction) (transactions.EvalDelta, error)
SetKey(addr basics.Address, aidx basics.AppIndex, global bool, key string, value basics.TealValue, accountIdx uint64) error
DelKey(addr basics.Address, aidx basics.AppIndex, global bool, key string, accountIdx uint64) error
- AppendLog(idx uint64, value string) error
-
round() basics.Round
prevTimestamp() int64
allocated(addr basics.Address, aidx basics.AppIndex, global bool) (bool, error)
+ txnCounter() uint64
+ incTxnCount()
}
func newLogicLedger(cow cowForLogicLedger, aidx basics.AppIndex) (*logicLedger, error) {
@@ -87,6 +89,17 @@ func (al *logicLedger) MinBalance(addr basics.Address, proto *config.ConsensusPa
return record.MinBalance(proto), nil
}
+func (al *logicLedger) Authorizer(addr basics.Address) (basics.Address, error) {
+ record, err := al.cow.Get(addr, false) // pending rewards unneeded
+ if err != nil {
+ return basics.Address{}, err
+ }
+ if !record.AuthAddr.IsZero() {
+ return record.AuthAddr, nil
+ }
+ return addr, nil
+}
+
func (al *logicLedger) GetCreatableID(groupIdx int) basics.CreatableIndex {
return al.cow.GetCreatableID(groupIdx)
}
@@ -234,17 +247,65 @@ func (al *logicLedger) DelGlobal(key string) error {
return al.cow.DelKey(al.creator, al.aidx, true, key, 0)
}
-func (al *logicLedger) GetDelta(txn *transactions.Transaction) (evalDelta basics.EvalDelta, err error) {
+func (al *logicLedger) GetDelta(txn *transactions.Transaction) (evalDelta transactions.EvalDelta, err error) {
return al.cow.BuildEvalDelta(al.aidx, txn)
}
-func (al *logicLedger) AppendLog(txn *transactions.Transaction, value string) error {
- idx, err := txn.IndexByAppID(txn.ApplicationID)
- if idx != 0 {
- return fmt.Errorf("index offset is not 0. logging is allowed for current app only")
+func (al *logicLedger) balances() (apply.Balances, error) {
+ balances, ok := al.cow.(apply.Balances)
+ if !ok {
+ return nil, fmt.Errorf("cannot get a Balances object from %v", al)
+ }
+ return balances, nil
+}
+
+func (al *logicLedger) Perform(tx *transactions.Transaction, spec transactions.SpecialAddresses) (transactions.ApplyData, error) {
+ var ad transactions.ApplyData
+
+ balances, err := al.balances()
+ if err != nil {
+ return ad, err
+ }
+
+ // move fee to pool
+ err = balances.Move(tx.Sender, spec.FeeSink, tx.Fee, &ad.SenderRewards, nil)
+ if err != nil {
+ return ad, err
+ }
+
+ // compared to eval.transaction() it may seem strange that we
+ // increment the transaction count *before* transaction
+ // processing, rather than after. But we need to account for the
+ // fact that our outer transaction has not yet incremented their
+ // count (in addTx()), so we need to increment ahead of use, so we
+ // don't use the same index. If eval.transaction() incremented
+ // ahead of processing, we'd have to do ours *after* so that we'd
+ // use the next id. So either way, this would seem backwards at
+ // first glance.
+ al.cow.incTxnCount()
+
+ switch tx.Type {
+ case protocol.PaymentTx:
+ err = apply.Payment(tx.PaymentTxnFields, tx.Header, balances, spec, &ad)
+ case protocol.AssetTransferTx:
+ err = apply.AssetTransfer(tx.AssetTransferTxnFields, tx.Header, balances, spec, &ad)
+ case protocol.AssetConfigTx:
+ err = apply.AssetConfig(tx.AssetConfigTxnFields, tx.Header, balances, spec, &ad, al.cow.txnCounter())
+ case protocol.AssetFreezeTx:
+ err = apply.AssetFreeze(tx.AssetFreezeTxnFields, tx.Header, balances, spec, &ad)
+ default:
+ err = fmt.Errorf("%s tx in AVM", tx.Type)
}
if err != nil {
- return err
+ return ad, err
}
- return al.cow.AppendLog(idx, value)
+
+ // We don't check min balances during in app txns.
+
+ // func (eval *BlockEvaluator) checkMinBalance will take care of
+ // it when the top-level txn concludes, as because cow will return
+ // all changed accounts in modifiedAccounts().
+
+ return ad, nil
+
}
diff --git a/ledger/applications_test.go b/ledger/applications_test.go
index f64eb5881..038207749 100644
--- a/ledger/applications_test.go
+++ b/ledger/applications_test.go
@@ -61,7 +61,7 @@ type mockCowForLogicLedger struct {
brs map[basics.Address]basics.AccountData
stores map[storeLocator]basics.TealKeyValue
tcs map[int]basics.CreatableIndex
- logs []basics.LogItem
+ txc uint64
}
func (c *mockCowForLogicLedger) Get(addr basics.Address, withPendingRewards bool) (basics.AccountData, error) {
@@ -90,8 +90,8 @@ func (c *mockCowForLogicLedger) GetKey(addr basics.Address, aidx basics.AppIndex
return tv, found, nil
}
-func (c *mockCowForLogicLedger) BuildEvalDelta(aidx basics.AppIndex, txn *transactions.Transaction) (evalDelta basics.EvalDelta, err error) {
- return basics.EvalDelta{}, nil
+func (c *mockCowForLogicLedger) BuildEvalDelta(aidx basics.AppIndex, txn *transactions.Transaction) (evalDelta transactions.EvalDelta, err error) {
+ return transactions.EvalDelta{}, nil
}
func (c *mockCowForLogicLedger) SetKey(addr basics.Address, aidx basics.AppIndex, global bool, key string, value basics.TealValue, accountIdx uint64) error {
@@ -127,9 +127,12 @@ func (c *mockCowForLogicLedger) allocated(addr basics.Address, aidx basics.AppIn
return found, nil
}
-func (c *mockCowForLogicLedger) AppendLog(aidx uint64, value string) error {
- c.logs = append(c.logs, basics.LogItem{ID: aidx, Message: value})
- return nil
+func (c *mockCowForLogicLedger) incTxnCount() {
+ c.txc++
+}
+
+func (c *mockCowForLogicLedger) txnCounter() uint64 {
+ return c.txc
}
func newCowMock(creatables []modsData) *mockCowForLogicLedger {
@@ -242,6 +245,7 @@ func TestLogicLedgerAsset(t *testing.T) {
c.brs = map[basics.Address]basics.AccountData{
addr1: {AssetParams: map[basics.AssetIndex]basics.AssetParams{assetIdx: {Total: 1000}}},
}
+
ap, creator, err := l.AssetParams(assetIdx)
a.NoError(err)
a.Equal(addr1, creator)
@@ -488,7 +492,7 @@ return`
Header: txHeader,
ApplicationCallTxnFields: appCreateFields,
}
- err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{})
+ err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{ApplicationID: 1})
a.NoError(err)
appIdx := basics.AppIndex(1) // first tnx => idx = 1
@@ -533,7 +537,7 @@ return`
ApplicationCallTxnFields: appCallFields,
}
err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCall,
- transactions.ApplyData{EvalDelta: basics.EvalDelta{
+ transactions.ApplyData{EvalDelta: transactions.EvalDelta{
LocalDeltas: map[uint64]basics.StateDelta{0: {"lk": basics.ValueDelta{Action: basics.SetBytesAction, Bytes: "local"}}}},
})
a.NoError(err)
@@ -581,7 +585,7 @@ return`
ApplicationCallTxnFields: appCallFields,
}
err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCall,
- transactions.ApplyData{EvalDelta: basics.EvalDelta{
+ transactions.ApplyData{EvalDelta: transactions.EvalDelta{
GlobalDelta: basics.StateDelta{"gk": basics.ValueDelta{Action: basics.SetBytesAction, Bytes: "global"}}},
})
a.NoError(err)
@@ -599,7 +603,7 @@ return`
ApplicationCallTxnFields: appCallFields,
}
err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCall,
- transactions.ApplyData{EvalDelta: basics.EvalDelta{
+ transactions.ApplyData{EvalDelta: transactions.EvalDelta{
LocalDeltas: map[uint64]basics.StateDelta{0: {"lk": basics.ValueDelta{Action: basics.SetBytesAction, Bytes: "local"}}}},
})
a.NoError(err)
@@ -707,7 +711,7 @@ return`
Header: txHeader,
ApplicationCallTxnFields: appCreateFields,
}
- err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{})
+ err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{ApplicationID: 1})
a.NoError(err)
appIdx := basics.AppIndex(1) // first tnx => idx = 1
@@ -724,7 +728,7 @@ return`
ApplicationCallTxnFields: appCallFields,
}
err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCall, transactions.ApplyData{
- EvalDelta: basics.EvalDelta{
+ EvalDelta: transactions.EvalDelta{
LocalDeltas: map[uint64]basics.StateDelta{0: {"lk": basics.ValueDelta{
Action: basics.SetBytesAction,
Bytes: "local",
@@ -787,7 +791,7 @@ return`
ApplicationCallTxnFields: appCallFields,
}
err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCall,
- transactions.ApplyData{EvalDelta: basics.EvalDelta{
+ transactions.ApplyData{EvalDelta: transactions.EvalDelta{
GlobalDelta: basics.StateDelta{"gk": basics.ValueDelta{Action: basics.SetBytesAction, Bytes: "global"}}},
})
a.NoError(err)
@@ -856,7 +860,7 @@ return`
blk = makeNewEmptyBlock(t, l, genesisID, genesisInitState.Accounts)
ad1 := transactions.ApplyData{
- EvalDelta: basics.EvalDelta{
+ EvalDelta: transactions.EvalDelta{
LocalDeltas: map[uint64]basics.StateDelta{0: {"lk1": basics.ValueDelta{
Action: basics.SetBytesAction,
Bytes: "local1",
@@ -962,7 +966,7 @@ return`
Header: txHeader,
ApplicationCallTxnFields: appCreateFields,
}
- err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{})
+ err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{ApplicationID: 1})
a.NoError(err)
appIdx := basics.AppIndex(1) // first tnx => idx = 1
@@ -979,7 +983,7 @@ return`
ApplicationCallTxnFields: appCallFields,
}
err = l.appendUnvalidatedTx(t, nil, initKeys, appCall, transactions.ApplyData{
- EvalDelta: basics.EvalDelta{
+ EvalDelta: transactions.EvalDelta{
LocalDeltas: map[uint64]basics.StateDelta{0: {"lk": basics.ValueDelta{
Action: basics.SetBytesAction,
Bytes: "local",
@@ -1121,7 +1125,7 @@ return`
Header: txHeader,
ApplicationCallTxnFields: appCreateFields,
}
- err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{})
+ err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCreate, transactions.ApplyData{ApplicationID: 1})
a.NoError(err)
appIdx := basics.AppIndex(1) // first tnx => idx = 1
@@ -1154,7 +1158,7 @@ return`
stx2 := sign(initKeys, payment)
blk := makeNewEmptyBlock(t, l, genesisID, genesisInitState.Accounts)
- txib1, err := blk.EncodeSignedTxn(stx1, transactions.ApplyData{EvalDelta: basics.EvalDelta{
+ txib1, err := blk.EncodeSignedTxn(stx1, transactions.ApplyData{EvalDelta: transactions.EvalDelta{
GlobalDelta: basics.StateDelta{
"gk": basics.ValueDelta{Action: basics.SetBytesAction, Bytes: "global"},
}},
@@ -1340,7 +1344,7 @@ func testAppAccountDeltaIndicesCompatibility(t *testing.T, source string, accoun
ApplicationCallTxnFields: appCallFields,
}
err = l.appendUnvalidatedTx(t, genesisInitState.Accounts, initKeys, appCall, transactions.ApplyData{
- EvalDelta: basics.EvalDelta{
+ EvalDelta: transactions.EvalDelta{
LocalDeltas: map[uint64]basics.StateDelta{
accountIdx: {
"lk0": basics.ValueDelta{
@@ -1370,33 +1374,3 @@ func testAppAccountDeltaIndicesCompatibility(t *testing.T, source string, accoun
a.Contains(blk.Payset[0].ApplyData.EvalDelta.LocalDeltas[accountIdx], "lk1")
a.Equal(blk.Payset[0].ApplyData.EvalDelta.LocalDeltas[accountIdx]["lk1"].Bytes, "local1")
}
-
-func TestLogicLedgerAppendLog(t *testing.T) {
- partitiontest.PartitionTest(t)
-
- a := require.New(t)
-
- addr := getRandomAddress(a)
- aidx := basics.AppIndex(1)
- c := newCowMock([]modsData{
- {addr, basics.CreatableIndex(1), basics.AppCreatable},
- })
- l, err := newLogicLedger(c, aidx)
- a.NoError(err)
- a.NotNil(l)
-
- appCallFields := transactions.ApplicationCallTxnFields{
- OnCompletion: transactions.NoOpOC,
- ApplicationID: 0,
- Accounts: []basics.Address{},
- }
- appCall := transactions.Transaction{
- Type: protocol.ApplicationCallTx,
- ApplicationCallTxnFields: appCallFields,
- }
-
- err = l.AppendLog(&appCall, "a")
- a.NoError(err)
- a.Equal(len(c.logs), 1)
- a.Equal(c.logs[0].Message, "a")
-}
diff --git a/ledger/apply/application.go b/ledger/apply/application.go
index 644c8e396..2ff573303 100644
--- a/ledger/apply/application.go
+++ b/ledger/apply/application.go
@@ -317,7 +317,7 @@ func ApplicationCall(ac transactions.ApplicationCallTxnFields, header transactio
// If we are returning a non-nil error, then don't return a
// non-empty EvalDelta. Not required for correctness.
if err != nil && ad != nil {
- ad.EvalDelta = basics.EvalDelta{}
+ ad.EvalDelta = transactions.EvalDelta{}
}
}()
@@ -342,6 +342,11 @@ func ApplicationCall(ac transactions.ApplicationCallTxnFields, header transactio
if err != nil {
return
}
+ // No separate config for activating storage in AD because
+ // inner transactions can't be turned on without this change.
+ if balances.ConsensusParams().MaxInnerTransactions > 0 {
+ ad.ApplicationID = appIdx
+ }
}
// Fetch the application parameters, if they exist
diff --git a/ledger/apply/application_test.go b/ledger/apply/application_test.go
index 3251f0470..124a40936 100644
--- a/ledger/apply/application_test.go
+++ b/ledger/apply/application_test.go
@@ -114,7 +114,7 @@ type testBalances struct {
// logic evaluator control
pass bool
- delta basics.EvalDelta
+ delta transactions.EvalDelta
err error
}
@@ -126,6 +126,12 @@ const appIdxError basics.AppIndex = 0x11223344
const appIdxOk basics.AppIndex = 1
func (b *testBalances) Get(addr basics.Address, withPendingRewards bool) (basics.AccountData, error) {
+ if b.putBalances != nil {
+ ad, ok := b.putBalances[addr]
+ if ok {
+ return ad, nil
+ }
+ }
ad, ok := b.balances[addr]
if !ok {
return basics.AccountData{}, fmt.Errorf("mock balance not found")
@@ -219,7 +225,7 @@ func (b *testBalances) DeallocateAsset(addr basics.Address, index basics.AssetIn
return nil
}
-func (b *testBalances) StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (passed bool, evalDelta basics.EvalDelta, err error) {
+func (b *testBalances) StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (passed bool, evalDelta transactions.EvalDelta, err error) {
return b.pass, b.delta, b.err
}
@@ -252,7 +258,7 @@ func (b *testBalancesPass) Deallocate(addr basics.Address, aidx basics.AppIndex,
return nil
}
-func (b *testBalancesPass) StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (passed bool, evalDelta basics.EvalDelta, err error) {
+func (b *testBalancesPass) StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (passed bool, evalDelta transactions.EvalDelta, err error) {
return true, b.delta, nil
}
@@ -275,14 +281,14 @@ func (b *testBalances) SetParams(params config.ConsensusParams) {
type testEvaluator struct {
pass bool
- delta basics.EvalDelta
+ delta transactions.EvalDelta
appIdx basics.AppIndex
}
// Eval for tests that fail on program version > 10 and returns pass/delta from its own state rather than running the program
-func (e *testEvaluator) Eval(program []byte) (pass bool, stateDelta basics.EvalDelta, err error) {
+func (e *testEvaluator) Eval(program []byte) (pass bool, stateDelta transactions.EvalDelta, err error) {
if len(program) < 1 || program[0] > 10 {
- return false, basics.EvalDelta{}, fmt.Errorf("mock eval error")
+ return false, transactions.EvalDelta{}, fmt.Errorf("mock eval error")
}
return e.pass, e.delta, nil
}
@@ -515,15 +521,6 @@ func TestAppCallApplyCreate(t *testing.T) {
b.ResetWrites()
- // now looking up the creator will succeed, but we reset writes, so
- // they won't have the app params
- err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
- a.Error(err)
- a.Contains(err.Error(), fmt.Sprintf("app %d not found in account", appIdx))
- a.Equal(1, b.put)
-
- b.ResetWrites()
-
// now we give the creator the app params again
cp := basics.AccountData{}
cp.AppParams = cloneAppParams(saved.AppParams)
@@ -607,7 +604,7 @@ func TestAppCallApplyCreateOptIn(t *testing.T) {
b.appCreators = map[basics.AppIndex]basics.Address{appIdx: creator}
gd := map[string]basics.ValueDelta{"uint": {Action: basics.SetUintAction, Uint: 1}}
- b.delta = basics.EvalDelta{GlobalDelta: gd}
+ b.delta = transactions.EvalDelta{GlobalDelta: gd}
err := ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
@@ -690,6 +687,42 @@ func TestAppCallOptIn(t *testing.T) {
},
br,
)
+
+ // check max optins
+
+ var optInCountTest = []struct {
+ proto protocol.ConsensusVersion
+ }{
+ {protocol.ConsensusV29},
+ {protocol.ConsensusFuture},
+ }
+
+ prevMaxAppsOptedIn := 0
+ for _, test := range optInCountTest {
+ cparams, ok := config.Consensus[test.proto]
+ a.True(ok)
+ a.Less(prevMaxAppsOptedIn, cparams.MaxAppsOptedIn)
+ prevMaxAppsOptedIn = cparams.MaxAppsOptedIn
+
+ b.SetParams(cparams)
+ aparams := basics.AppParams{
+ StateSchemas: basics.StateSchemas{
+ LocalStateSchema: basics.StateSchema{NumUint: 1},
+ },
+ }
+ sender = getRandomAddress(a)
+ b.balances = map[basics.Address]basics.AccountData{sender: {}}
+ var appIdx basics.AppIndex = appIdx
+ for i := 0; i < cparams.MaxAppsOptedIn; i++ {
+ appIdx = appIdx + basics.AppIndex(i)
+ err = optInApplication(&b, sender, appIdx, aparams)
+ a.NoError(err)
+ }
+ appIdx++
+ err = optInApplication(&b, sender, appIdx, aparams)
+ a.Error(err)
+ a.Contains(err.Error(), "max opted-in apps per acct")
+ }
}
func TestAppCallClearState(t *testing.T) {
@@ -768,7 +801,7 @@ func TestAppCallClearState(t *testing.T) {
br = b.putBalances[sender]
a.Equal(0, len(br.AppLocalStates))
a.Equal(basics.StateSchema{}, br.TotalAppSchema)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
b.ResetWrites()
@@ -787,7 +820,7 @@ func TestAppCallClearState(t *testing.T) {
// one put: to opt out
b.pass = false
- b.delta = basics.EvalDelta{GlobalDelta: nil}
+ b.delta = transactions.EvalDelta{GlobalDelta: nil}
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
a.Equal(1, b.put)
@@ -801,7 +834,7 @@ func TestAppCallClearState(t *testing.T) {
// check existing application with logic err ClearStateProgram.
// one to opt out, one deallocate, no error from ApplicationCall
b.pass = true
- b.delta = basics.EvalDelta{GlobalDelta: nil}
+ b.delta = transactions.EvalDelta{GlobalDelta: nil}
b.err = ledgercore.LogicEvalError{Err: fmt.Errorf("test error")}
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
@@ -816,7 +849,7 @@ func TestAppCallClearState(t *testing.T) {
// check existing application with non-logic err ClearStateProgram.
// ApplicationCall must fail
b.pass = true
- b.delta = basics.EvalDelta{GlobalDelta: nil}
+ b.delta = transactions.EvalDelta{GlobalDelta: nil}
b.err = fmt.Errorf("test error")
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.Error(err)
@@ -832,23 +865,23 @@ func TestAppCallClearState(t *testing.T) {
b.pass = true
b.err = nil
gd := basics.StateDelta{"uint": {Action: basics.SetUintAction, Uint: 1}}
- b.delta = basics.EvalDelta{GlobalDelta: gd}
+ b.delta = transactions.EvalDelta{GlobalDelta: gd}
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
a.Equal(1, b.put)
a.Equal(appIdx, b.deAllocatedAppIdx)
a.Equal(0, len(br.AppLocalStates))
a.Equal(basics.StateSchema{}, br.TotalAppSchema)
- a.Equal(basics.EvalDelta{GlobalDelta: gd}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{GlobalDelta: gd}, ad.EvalDelta)
b.ResetWrites()
b.pass = true
b.err = nil
- logs := []basics.LogItem{{ID: 0, Message: "a"}}
- b.delta = basics.EvalDelta{Logs: []basics.LogItem{{ID: 0, Message: "a"}}}
+ logs := []string{"a"}
+ b.delta = transactions.EvalDelta{Logs: []string{"a"}}
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
- a.Equal(basics.EvalDelta{Logs: logs}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{Logs: logs}, ad.EvalDelta)
}
func TestAppCallApplyCloseOut(t *testing.T) {
@@ -899,7 +932,7 @@ func TestAppCallApplyCloseOut(t *testing.T) {
a.Equal(0, b.put)
br := b.balances[creator]
a.Equal(cbr, br)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
// check closing on empty sender's balance record
b.pass = true
@@ -910,13 +943,13 @@ func TestAppCallApplyCloseOut(t *testing.T) {
a.Equal(0, b.put)
br = b.balances[creator]
a.Equal(cbr, br)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
b.ResetWrites()
// check a happy case
gd := map[string]basics.ValueDelta{"uint": {Action: basics.SetUintAction, Uint: 1}}
- b.delta = basics.EvalDelta{GlobalDelta: gd}
+ b.delta = transactions.EvalDelta{GlobalDelta: gd}
b.balances[sender] = basics.AccountData{
AppLocalStates: map[basics.AppIndex]basics.AppLocalState{appIdx: {}},
}
@@ -928,14 +961,18 @@ func TestAppCallApplyCloseOut(t *testing.T) {
a.Equal(basics.TealKeyValue(nil), br.AppParams[appIdx].GlobalState)
br = b.putBalances[sender]
a.Equal(0, len(br.AppLocalStates))
- a.Equal(basics.EvalDelta{GlobalDelta: gd}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{GlobalDelta: gd}, ad.EvalDelta)
a.Equal(basics.StateSchema{NumUint: 0}, br.TotalAppSchema)
- logs := []basics.LogItem{{ID: 0, Message: "a"}}
- b.delta = basics.EvalDelta{Logs: []basics.LogItem{{ID: 0, Message: "a"}}}
+ b.ResetWrites()
+ logs := []string{"a"}
+ b.delta = transactions.EvalDelta{Logs: []string{"a"}}
+ b.balances[sender] = basics.AccountData{
+ AppLocalStates: map[basics.AppIndex]basics.AppLocalState{appIdx: {}},
+ }
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
- a.Equal(basics.EvalDelta{Logs: logs}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{Logs: logs}, ad.EvalDelta)
}
func TestAppCallApplyUpdate(t *testing.T) {
@@ -988,7 +1025,7 @@ func TestAppCallApplyUpdate(t *testing.T) {
a.Equal(0, b.put)
br := b.balances[creator]
a.Equal(cbr, br)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
// check updating on empty sender's balance record - happy case
b.pass = true
@@ -1001,7 +1038,7 @@ func TestAppCallApplyUpdate(t *testing.T) {
br = b.putBalances[creator]
a.Equal([]byte{2}, br.AppParams[appIdx].ApprovalProgram)
a.Equal([]byte{2}, br.AppParams[appIdx].ClearStateProgram)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
//check program len check happens in future consensus proto version
b.SetProto(protocol.ConsensusFuture)
@@ -1030,11 +1067,11 @@ func TestAppCallApplyUpdate(t *testing.T) {
b.balances[creator] = cp
b.appCreators = map[basics.AppIndex]basics.Address{appIdx: creator}
- logs := []basics.LogItem{{ID: 0, Message: "a"}}
- b.delta = basics.EvalDelta{Logs: []basics.LogItem{{ID: 0, Message: "a"}}}
+ logs := []string{"a"}
+ b.delta = transactions.EvalDelta{Logs: []string{"a"}}
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
- a.Equal(basics.EvalDelta{Logs: logs}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{Logs: logs}, ad.EvalDelta)
// check extraProgramPages is used
appr := make([]byte, 2*proto.MaxAppProgramLen+1)
@@ -1062,6 +1099,7 @@ func TestAppCallApplyUpdate(t *testing.T) {
a.Contains(err.Error(), fmt.Sprintf("updateApplication %s program too long", test.name))
}
+ b.ResetWrites()
// check extraProgramPages allows length of proto.MaxAppProgramLen + 1
appr = make([]byte, proto.MaxAppProgramLen+1)
appr[0] = 4
@@ -1142,7 +1180,7 @@ func TestAppCallApplyDelete(t *testing.T) {
a.Equal(0, b.put)
br := b.balances[creator]
a.Equal(cbr, br)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
// check calculation on ConsensusV28. TotalExtraAppPages does not change
b.SetProto(protocol.ConsensusV28)
@@ -1160,7 +1198,7 @@ func TestAppCallApplyDelete(t *testing.T) {
br = b.putBalances[creator]
a.Equal(basics.AppParams{}, br.AppParams[appIdx])
a.Equal(basics.StateSchema{}, br.TotalAppSchema)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
a.Equal(uint32(1), br.TotalExtraAppPages)
b.ResetWrites()
@@ -1190,7 +1228,7 @@ func TestAppCallApplyDelete(t *testing.T) {
br = b.putBalances[creator]
a.Equal(basics.AppParams{}, br.AppParams[appIdx])
a.Equal(basics.StateSchema{}, br.TotalAppSchema)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
if initTotalExtraPages <= params.ExtraProgramPages {
a.Equal(uint32(0), br.TotalExtraAppPages)
} else {
@@ -1198,11 +1236,11 @@ func TestAppCallApplyDelete(t *testing.T) {
}
b.ResetWrites()
}
- logs := []basics.LogItem{{ID: 0, Message: "a"}}
- b.delta = basics.EvalDelta{Logs: []basics.LogItem{{ID: 0, Message: "a"}}}
+ logs := []string{"a"}
+ b.delta = transactions.EvalDelta{Logs: []string{"a"}}
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
- a.Equal(basics.EvalDelta{Logs: logs}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{Logs: logs}, ad.EvalDelta)
}
func TestAppCallApplyCreateClearState(t *testing.T) {
@@ -1238,14 +1276,14 @@ func TestAppCallApplyCreateClearState(t *testing.T) {
b.pass = true
gd := map[string]basics.ValueDelta{"uint": {Action: basics.SetUintAction, Uint: 1}}
- b.delta = basics.EvalDelta{GlobalDelta: gd}
+ b.delta = transactions.EvalDelta{GlobalDelta: gd}
// check creation on empty balance record
err := ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.Error(err)
a.Contains(err.Error(), "not currently opted in")
a.Equal(appIdx, b.allocatedAppIdx)
- a.Equal(basics.EvalDelta{}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{}, ad.EvalDelta)
br := b.balances[creator]
a.Equal([]byte{1}, br.AppParams[appIdx].ApprovalProgram)
a.Equal([]byte{2}, br.AppParams[appIdx].ClearStateProgram)
@@ -1288,20 +1326,20 @@ func TestAppCallApplyCreateDelete(t *testing.T) {
b.pass = true
gd := map[string]basics.ValueDelta{"uint": {Action: basics.SetUintAction, Uint: 1}}
- b.delta = basics.EvalDelta{GlobalDelta: gd}
+ b.delta = transactions.EvalDelta{GlobalDelta: gd}
// check creation on empty balance record
err := ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
a.Equal(appIdx, b.allocatedAppIdx)
- a.Equal(basics.EvalDelta{GlobalDelta: gd}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{GlobalDelta: gd}, ad.EvalDelta)
br := b.balances[creator]
a.Equal(basics.AppParams{}, br.AppParams[appIdx])
- logs := []basics.LogItem{{ID: 0, Message: "a"}}
- b.delta = basics.EvalDelta{Logs: []basics.LogItem{{ID: 0, Message: "a"}}}
+ logs := []string{"a"}
+ b.delta = transactions.EvalDelta{Logs: []string{"a"}}
err = ApplicationCall(ac, h, &b, ad, &ep, txnCounter)
a.NoError(err)
- a.Equal(basics.EvalDelta{Logs: logs}, ad.EvalDelta)
+ a.Equal(transactions.EvalDelta{Logs: logs}, ad.EvalDelta)
}
diff --git a/ledger/apply/apply.go b/ledger/apply/apply.go
index 739d7803c..988ae8cb9 100644
--- a/ledger/apply/apply.go
+++ b/ledger/apply/apply.go
@@ -19,6 +19,7 @@ package apply
import (
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
)
@@ -51,9 +52,9 @@ type Balances interface {
DeallocateAsset(addr basics.Address, index basics.AssetIndex, global bool) error
// StatefulEval executes a TEAL program in stateful mode on the balances.
- // It returns whether the program passed and its error. It alo returns
+ // It returns whether the program passed and its error. It also returns
// an EvalDelta that contains the changes made by the program.
- StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (passed bool, evalDelta basics.EvalDelta, err error)
+ StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (passed bool, evalDelta transactions.EvalDelta, err error)
// Move MicroAlgos from one account to another, doing all necessary overflow checking (convenience method)
// TODO: Does this need to be part of the balances interface, or can it just be implemented here as a function that calls Put and Get?
diff --git a/ledger/apply/asset.go b/ledger/apply/asset.go
index 1fe3c6fac..0796cb8f7 100644
--- a/ledger/apply/asset.go
+++ b/ledger/apply/asset.go
@@ -100,6 +100,13 @@ func AssetConfig(cc transactions.AssetConfigTxnFields, header transactions.Heade
return err
}
+ // Record the index used. No separate config for activating
+ // storage in AD because inner transactions can't be turned on
+ // without this change.
+ if balances.ConsensusParams().MaxInnerTransactions > 0 {
+ ad.ConfigAsset = newidx
+ }
+
// Tell the cow what asset we created
err = balances.AllocateAsset(header.Sender, newidx, true)
if err != nil {
diff --git a/ledger/apply/keyreg_test.go b/ledger/apply/keyreg_test.go
index 5a058b486..ecb4e9072 100644
--- a/ledger/apply/keyreg_test.go
+++ b/ledger/apply/keyreg_test.go
@@ -78,8 +78,8 @@ func (balances keyregTestBalances) DeallocateAsset(addr basics.Address, index ba
return nil
}
-func (balances keyregTestBalances) StatefulEval(logic.EvalParams, basics.AppIndex, []byte) (bool, basics.EvalDelta, error) {
- return false, basics.EvalDelta{}, nil
+func (balances keyregTestBalances) StatefulEval(logic.EvalParams, basics.AppIndex, []byte) (bool, transactions.EvalDelta, error) {
+ return false, transactions.EvalDelta{}, nil
}
func TestKeyregApply(t *testing.T) {
diff --git a/ledger/apply/mockBalances_test.go b/ledger/apply/mockBalances_test.go
index a1b64a2f2..d08e992e8 100644
--- a/ledger/apply/mockBalances_test.go
+++ b/ledger/apply/mockBalances_test.go
@@ -19,6 +19,7 @@ package apply
import (
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/protocol"
)
@@ -65,8 +66,8 @@ func (balances mockBalances) DeallocateAsset(addr basics.Address, index basics.A
return nil
}
-func (balances mockBalances) StatefulEval(logic.EvalParams, basics.AppIndex, []byte) (bool, basics.EvalDelta, error) {
- return false, basics.EvalDelta{}, nil
+func (balances mockBalances) StatefulEval(logic.EvalParams, basics.AppIndex, []byte) (bool, transactions.EvalDelta, error) {
+ return false, transactions.EvalDelta{}, nil
}
func (balances mockBalances) Get(addr basics.Address, withPendingRewards bool) (basics.AccountData, error) {
diff --git a/ledger/apptxn_test.go b/ledger/apptxn_test.go
new file mode 100644
index 000000000..845bb54c4
--- /dev/null
+++ b/ledger/apptxn_test.go
@@ -0,0 +1,914 @@
+// Copyright (C) 2019-2021 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
+
+package ledger
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/txntest"
+ "github.com/algorand/go-algorand/test/partitiontest"
+ "github.com/stretchr/testify/require"
+)
+
+// main wraps up some TEAL source in a header and footer so that it is
+// an app that does nothing at create time, but otherwise runs source,
+// then approves, if the source avoids panicing and leaves the stack
+// empty.
+func main(source string) string {
+ return fmt.Sprintf(`txn ApplicationID
+ bz end
+ %s
+ end: int 1`, source)
+}
+
+// TestPayAction ensures a pay in teal affects balances
+func TestPayAction(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ create := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: main(`
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ int 5000
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Receiver
+ itxn_submit
+`),
+ }
+
+ ai := basics.AppIndex(1)
+ fund := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: ai.Address(),
+ Amount: 200000, // account min balance, plus fees
+ }
+
+ payout1 := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: ai,
+ Accounts: []basics.Address{addrs[1]}, // pay self
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &create, &fund, &payout1)
+ vb := l.endBlock(t, eval)
+
+ // AD contains expected appIndex
+ require.Equal(t, ai, vb.blk.Payset[0].ApplyData.ApplicationID)
+
+ ad0 := l.micros(t, addrs[0])
+ ad1 := l.micros(t, addrs[1])
+ app := l.micros(t, ai.Address())
+
+ // create(1000) and fund(1000 + 200000)
+ require.Equal(t, uint64(202000), genBalances.Balances[addrs[0]].MicroAlgos.Raw-ad0)
+ // paid 5000, but 1000 fee
+ require.Equal(t, uint64(4000), ad1-genBalances.Balances[addrs[1]].MicroAlgos.Raw)
+ // app still has 194000 (paid out 5000, and paid fee to do it)
+ require.Equal(t, uint64(194000), app)
+
+ // Build up Residue in RewardsState so it's ready to pay
+ for i := 1; i < 10; i++ {
+ eval = l.nextBlock(t)
+ l.endBlock(t, eval)
+ }
+
+ eval = l.nextBlock(t)
+ payout2 := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: ai,
+ Accounts: []basics.Address{addrs[2]}, // pay other
+ }
+ eval.txn(t, &payout2)
+ // confirm that modifiedAccounts can see account in inner txn
+ found := false
+ for _, addr := range eval.state.modifiedAccounts() {
+ if addr == addrs[2] {
+ found = true
+ }
+ }
+ require.True(t, found)
+ l.endBlock(t, eval)
+
+ payInBlock := eval.block.Payset[0]
+ rewards := payInBlock.ApplyData.SenderRewards.Raw
+ require.Greater(t, rewards, uint64(2000)) // some biggish number
+ inners := payInBlock.ApplyData.EvalDelta.InnerTxns
+ require.Len(t, inners, 1)
+
+ // addr[2] is going to get the same rewards as addr[1], who
+ // originally sent the top-level txn. Both had their algo balance
+ // touched and has very nearly the same balance.
+ require.Equal(t, rewards, inners[0].ReceiverRewards.Raw)
+ // app gets none, because it has less than 1A
+ require.Equal(t, uint64(0), inners[0].SenderRewards.Raw)
+
+ ad1 = l.micros(t, addrs[1])
+ ad2 := l.micros(t, addrs[2])
+ app = l.micros(t, ai.Address())
+
+ // paid 5000, in first payout (only), but paid 1000 fee in each payout txn
+ require.Equal(t, rewards+3000, ad1-genBalances.Balances[addrs[1]].MicroAlgos.Raw)
+ // app still has 188000 (paid out 10000, and paid 2k fees to do it)
+ // no rewards because owns less than an algo
+ require.Equal(t, uint64(200000)-10000-2000, app)
+
+ // paid 5000 by payout2, never paid any fees, got same rewards
+ require.Equal(t, rewards+uint64(5000), ad2-genBalances.Balances[addrs[2]].MicroAlgos.Raw)
+
+ // Now fund the app account much more, so we can confirm it gets rewards.
+ tenkalgos := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: ai.Address(),
+ Amount: 10 * 1000 * 1000000, // account min balance, plus fees
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, &tenkalgos)
+ l.endBlock(t, eval)
+ beforepay := l.micros(t, ai.Address())
+
+ // Build up Residue in RewardsState so it's ready to pay again
+ for i := 1; i < 10; i++ {
+ eval = l.nextBlock(t)
+ l.endBlock(t, eval)
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, payout2.Noted("2"))
+ l.endBlock(t, eval)
+
+ afterpay := l.micros(t, ai.Address())
+
+ payInBlock = eval.block.Payset[0]
+ inners = payInBlock.ApplyData.EvalDelta.InnerTxns
+ require.Len(t, inners, 1)
+
+ appreward := inners[0].SenderRewards.Raw
+ require.Greater(t, appreward, uint64(1000))
+
+ require.Equal(t, beforepay+appreward-5000-1000, afterpay)
+}
+
+// TestAxferAction ensures axfers in teal have the intended effects
+func TestAxferAction(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ asa := txntest.Txn{
+ Type: "acfg",
+ Sender: addrs[0],
+ AssetParams: basics.AssetParams{
+ Total: 1000000,
+ Decimals: 3,
+ UnitName: "oz",
+ AssetName: "Gold",
+ URL: "https://gold.rush/",
+ },
+ }
+
+ app := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: main(`
+ itxn_begin
+ int axfer
+ itxn_field TypeEnum
+ txn Assets 0
+ itxn_field XferAsset
+
+ txn ApplicationArgs 0
+ byte "optin"
+ ==
+ bz withdraw
+ // let AssetAmount default to 0
+ global CurrentApplicationAddress
+ itxn_field AssetReceiver
+ b submit
+withdraw:
+ txn ApplicationArgs 0
+ byte "close"
+ ==
+ bz noclose
+ txn Accounts 1
+ itxn_field AssetCloseTo
+ b skipamount
+noclose: int 10000
+ itxn_field AssetAmount
+skipamount:
+ txn Accounts 1
+ itxn_field AssetReceiver
+submit: itxn_submit
+`),
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &asa, &app)
+ vb := l.endBlock(t, eval)
+
+ asaIndex := basics.AssetIndex(1)
+ require.Equal(t, asaIndex, vb.blk.Payset[0].ApplyData.ConfigAsset)
+ appIndex := basics.AppIndex(2)
+ require.Equal(t, appIndex, vb.blk.Payset[1].ApplyData.ApplicationID)
+
+ fund := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: appIndex.Address(),
+ Amount: 300000, // account min balance, optin min balance, plus fees
+ // stay under 1M, to avoid rewards complications
+ }
+
+ eval = l.nextBlock(t)
+ eval.txn(t, &fund)
+ l.endBlock(t, eval)
+
+ fundgold := txntest.Txn{
+ Type: "axfer",
+ Sender: addrs[0],
+ XferAsset: asaIndex,
+ AssetReceiver: appIndex.Address(),
+ AssetAmount: 20000,
+ }
+
+ // Fail, because app account is not opted in.
+ eval = l.nextBlock(t)
+ eval.txn(t, &fundgold, fmt.Sprintf("asset %d missing", asaIndex))
+ l.endBlock(t, eval)
+
+ amount, in := l.asa(t, appIndex.Address(), asaIndex)
+ require.False(t, in)
+ require.Equal(t, amount, uint64(0))
+
+ optin := txntest.Txn{
+ Type: "appl",
+ ApplicationID: appIndex,
+ Sender: addrs[0],
+ ApplicationArgs: [][]byte{[]byte("optin")},
+ ForeignAssets: []basics.AssetIndex{asaIndex},
+ }
+
+ // Tell the app to opt itself in.
+ eval = l.nextBlock(t)
+ eval.txn(t, &optin)
+ l.endBlock(t, eval)
+
+ amount, in = l.asa(t, appIndex.Address(), asaIndex)
+ require.True(t, in)
+ require.Equal(t, amount, uint64(0))
+
+ // Now, suceed, because opted in.
+ eval = l.nextBlock(t)
+ eval.txn(t, &fundgold)
+ l.endBlock(t, eval)
+
+ amount, in = l.asa(t, appIndex.Address(), asaIndex)
+ require.True(t, in)
+ require.Equal(t, amount, uint64(20000))
+
+ withdraw := txntest.Txn{
+ Type: "appl",
+ ApplicationID: appIndex,
+ Sender: addrs[0],
+ ApplicationArgs: [][]byte{[]byte("withdraw")},
+ ForeignAssets: []basics.AssetIndex{asaIndex},
+ Accounts: []basics.Address{addrs[0]},
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, &withdraw)
+ l.endBlock(t, eval)
+
+ amount, in = l.asa(t, appIndex.Address(), asaIndex)
+ require.True(t, in)
+ require.Equal(t, amount, uint64(10000))
+
+ eval = l.nextBlock(t)
+ eval.txn(t, withdraw.Noted("2"))
+ l.endBlock(t, eval)
+
+ amount, in = l.asa(t, appIndex.Address(), asaIndex)
+ require.True(t, in) // Zero left, but still opted in
+ require.Equal(t, amount, uint64(0))
+
+ eval = l.nextBlock(t)
+ eval.txn(t, withdraw.Noted("3"), "underflow on subtracting")
+ l.endBlock(t, eval)
+
+ amount, in = l.asa(t, appIndex.Address(), asaIndex)
+ require.True(t, in) // Zero left, but still opted in
+ require.Equal(t, amount, uint64(0))
+
+ close := txntest.Txn{
+ Type: "appl",
+ ApplicationID: appIndex,
+ Sender: addrs[0],
+ ApplicationArgs: [][]byte{[]byte("close")},
+ ForeignAssets: []basics.AssetIndex{asaIndex},
+ Accounts: []basics.Address{addrs[0]},
+ }
+
+ eval = l.nextBlock(t)
+ eval.txn(t, &close)
+ l.endBlock(t, eval)
+
+ amount, in = l.asa(t, appIndex.Address(), asaIndex)
+ require.False(t, in) // Zero left, not opted in
+ require.Equal(t, amount, uint64(0))
+
+ // Now, fail again, opted out
+ eval = l.nextBlock(t)
+ eval.txn(t, fundgold.Noted("2"), fmt.Sprintf("asset %d missing", asaIndex))
+ l.endBlock(t, eval)
+
+ // Do it all again, so we can test closeTo when we have a non-zero balance
+ // Tell the app to opt itself in.
+ eval = l.nextBlock(t)
+ eval.txns(t, optin.Noted("a"), fundgold.Noted("a"))
+ l.endBlock(t, eval)
+
+ amount, _ = l.asa(t, appIndex.Address(), asaIndex)
+ require.Equal(t, uint64(20000), amount)
+ left, _ := l.asa(t, addrs[0], asaIndex)
+
+ eval = l.nextBlock(t)
+ eval.txn(t, close.Noted("a"))
+ l.endBlock(t, eval)
+
+ amount, _ = l.asa(t, appIndex.Address(), asaIndex)
+ require.Equal(t, uint64(0), amount)
+ back, _ := l.asa(t, addrs[0], asaIndex)
+ require.Equal(t, uint64(20000), back-left)
+}
+
+// TestClawbackAction ensures an app address can act as clawback address.
+func TestClawbackAction(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ asaIndex := basics.AssetIndex(1)
+ appIndex := basics.AppIndex(2)
+
+ asa := txntest.Txn{
+ Type: "acfg",
+ Sender: addrs[0],
+ AssetParams: basics.AssetParams{
+ Total: 1000000,
+ Decimals: 3,
+ UnitName: "oz",
+ AssetName: "Gold",
+ URL: "https://gold.rush/",
+ Clawback: appIndex.Address(),
+ },
+ }
+
+ app := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: main(`
+ itxn_begin
+
+ int axfer
+ itxn_field TypeEnum
+
+ txn Assets 0
+ itxn_field XferAsset
+
+ txn Accounts 1
+ itxn_field AssetSender
+
+ txn Accounts 2
+ itxn_field AssetReceiver
+
+ int 1000
+ itxn_field AssetAmount
+
+ itxn_submit
+`),
+ }
+
+ optin := txntest.Txn{
+ Type: "axfer",
+ Sender: addrs[1],
+ AssetReceiver: addrs[1],
+ XferAsset: asaIndex,
+ }
+ eval := l.nextBlock(t)
+ eval.txns(t, &asa, &app, &optin)
+ vb := l.endBlock(t, eval)
+
+ require.Equal(t, asaIndex, vb.blk.Payset[0].ApplyData.ConfigAsset)
+ require.Equal(t, appIndex, vb.blk.Payset[1].ApplyData.ApplicationID)
+
+ bystander := addrs[2] // Has no authority of its own
+ overpay := txntest.Txn{
+ Type: "pay",
+ Sender: bystander,
+ Receiver: bystander,
+ Fee: 2000, // Overpay fee so that app account can be unfunded
+ }
+ clawmove := txntest.Txn{
+ Type: "appl",
+ Sender: bystander,
+ ApplicationID: appIndex,
+ ForeignAssets: []basics.AssetIndex{asaIndex},
+ Accounts: []basics.Address{addrs[0], addrs[1]},
+ }
+ eval = l.nextBlock(t)
+ eval.txgroup(t, &overpay, &clawmove)
+ l.endBlock(t, eval)
+
+ amount, _ := l.asa(t, addrs[1], asaIndex)
+ require.Equal(t, amount, uint64(1000))
+}
+
+// TestRekeyAction ensures an app can transact for a rekeyed account
+func TestRekeyAction(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ appIndex := basics.AppIndex(1)
+ ezpayer := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[5],
+ ApprovalProgram: main(`
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ int 5000
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Sender
+ txn Accounts 2
+ itxn_field Receiver
+ txn NumAccounts
+ int 3
+ ==
+ bz skipclose
+ txn Accounts 3
+ itxn_field CloseRemainderTo
+skipclose:
+ itxn_submit
+`),
+ }
+
+ rekey := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: addrs[0],
+ RekeyTo: appIndex.Address(),
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &ezpayer, &rekey)
+ l.endBlock(t, eval)
+
+ useacct := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: appIndex,
+ Accounts: []basics.Address{addrs[0], addrs[2]}, // pay 2 from 0 (which was rekeyed)
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, &useacct)
+ l.endBlock(t, eval)
+
+ // App was never funded (didn't spend from it's own acct)
+ require.Equal(t, uint64(0), l.micros(t, basics.AppIndex(1).Address()))
+ // addrs[2] got paid
+ require.Equal(t, uint64(5000), l.micros(t, addrs[2])-l.micros(t, addrs[6]))
+ // addrs[0] paid 5k + rekey fee + inner txn fee
+ require.Equal(t, uint64(7000), l.micros(t, addrs[6])-l.micros(t, addrs[0]))
+
+ baduse := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: appIndex,
+ Accounts: []basics.Address{addrs[2], addrs[0]}, // pay 0 from 2
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, &baduse, "unauthorized")
+ l.endBlock(t, eval)
+
+ // Now, we close addrs[0], which wipes its rekey status. Reopen
+ // it, and make sure the app can't spend.
+
+ close := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: appIndex,
+ Accounts: []basics.Address{addrs[0], addrs[2], addrs[3]}, // close to 3
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, &close)
+ l.endBlock(t, eval)
+
+ require.Equal(t, uint64(0), l.micros(t, addrs[0]))
+
+ payback := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[3],
+ Receiver: addrs[0],
+ Amount: 10_000_000,
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, &payback)
+ l.endBlock(t, eval)
+
+ require.Equal(t, uint64(10_000_000), l.micros(t, addrs[0]))
+
+ eval = l.nextBlock(t)
+ eval.txn(t, useacct.Noted("2"), "unauthorized")
+ l.endBlock(t, eval)
+}
+
+// TestRekeyActionCloseAccount ensures closing and reopening a rekeyed account in a single app call
+// properly removes the app as an authorizer for the account
+func TestRekeyActionCloseAccount(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ appIndex := basics.AppIndex(1)
+ create := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[5],
+ ApprovalProgram: main(`
+ // close account 1
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ txn Accounts 1
+ itxn_field Sender
+ txn Accounts 2
+ itxn_field CloseRemainderTo
+ itxn_submit
+
+ // reopen account 1
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ int 5000
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Receiver
+ itxn_submit
+ // send from account 1 again (should fail because closing an account erases rekeying)
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ int 1
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Sender
+ txn Accounts 2
+ itxn_field Receiver
+ itxn_submit
+`),
+ }
+
+ rekey := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: addrs[0],
+ RekeyTo: appIndex.Address(),
+ }
+
+ fund := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[1],
+ Receiver: appIndex.Address(),
+ Amount: 1_000_000,
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &create, &rekey, &fund)
+ l.endBlock(t, eval)
+
+ useacct := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: appIndex,
+ Accounts: []basics.Address{addrs[0], addrs[2]},
+ }
+ eval = l.nextBlock(t)
+ eval.txn(t, &useacct, "unauthorized")
+ l.endBlock(t, eval)
+}
+
+// TestDuplicatePayAction shows two pays with same parameters can be done as inner tarnsactions
+func TestDuplicatePayAction(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ appIndex := basics.AppIndex(1)
+ create := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: main(`
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ int 5000
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Receiver
+ itxn_submit
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ int 5000
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Receiver
+ itxn_submit
+`),
+ }
+
+ fund := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: appIndex.Address(),
+ Amount: 200000, // account min balance, plus fees
+ }
+
+ paytwice := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: appIndex,
+ Accounts: []basics.Address{addrs[1]}, // pay self
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &create, &fund, &paytwice, create.Noted("in same block"))
+ vb := l.endBlock(t, eval)
+
+ require.Equal(t, appIndex, vb.blk.Payset[0].ApplyData.ApplicationID)
+ require.Equal(t, 4, len(vb.blk.Payset))
+ // create=1, fund=2, payTwice=3,4,5
+ require.Equal(t, basics.AppIndex(6), vb.blk.Payset[3].ApplyData.ApplicationID)
+
+ ad0 := l.micros(t, addrs[0])
+ ad1 := l.micros(t, addrs[1])
+ app := l.micros(t, appIndex.Address())
+
+ // create(1000) and fund(1000 + 200000), extra create (1000)
+ require.Equal(t, 203000, int(genBalances.Balances[addrs[0]].MicroAlgos.Raw-ad0))
+ // paid 10000, but 1000 fee on tx
+ require.Equal(t, 9000, int(ad1-genBalances.Balances[addrs[1]].MicroAlgos.Raw))
+ // app still has 188000 (paid out 10000, and paid 2 x fee to do it)
+ require.Equal(t, 188000, int(app))
+
+ // Now create another app, and see if it gets the index we expect.
+ eval = l.nextBlock(t)
+ eval.txns(t, create.Noted("again"))
+ vb = l.endBlock(t, eval)
+
+ // create=1, fund=2, payTwice=3,4,5, insameblock=6
+ require.Equal(t, basics.AppIndex(7), vb.blk.Payset[0].ApplyData.ApplicationID)
+}
+
+// TestInnerTxCount ensures that inner transactions increment the TxnCounter
+func TestInnerTxnCount(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ create := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: main(`
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+ int 5000
+ itxn_field Amount
+ txn Accounts 1
+ itxn_field Receiver
+ itxn_submit
+`),
+ }
+
+ fund := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: basics.AppIndex(1).Address(),
+ Amount: 200000, // account min balance, plus fees
+ }
+
+ payout1 := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: basics.AppIndex(1),
+ Accounts: []basics.Address{addrs[1]}, // pay self
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &create, &fund)
+ vb := l.endBlock(t, eval)
+ require.Equal(t, 2, int(vb.blk.TxnCounter))
+
+ eval = l.nextBlock(t)
+ eval.txns(t, &payout1)
+ vb = l.endBlock(t, eval)
+ require.Equal(t, 4, int(vb.blk.TxnCounter))
+}
+
+// TestAcfgAction ensures assets can be created and configured in teal
+func TestAcfgAction(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ appIndex := basics.AppIndex(1)
+ app := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: main(`
+ itxn_begin
+ int acfg
+ itxn_field TypeEnum
+
+ txn ApplicationArgs 0
+ byte "create"
+ ==
+ bz manager
+ int 1000000
+ itxn_field ConfigAssetTotal
+ int 3
+ itxn_field ConfigAssetDecimals
+ byte "oz"
+ itxn_field ConfigAssetUnitName
+ byte "Gold"
+ itxn_field ConfigAssetName
+ byte "https://gold.rush/"
+ itxn_field ConfigAssetURL
+ global CurrentApplicationAddress
+ dup
+ dup2
+ itxn_field ConfigAssetManager
+ itxn_field ConfigAssetReserve
+ itxn_field ConfigAssetFreeze
+ itxn_field ConfigAssetClawback
+ b submit
+manager:
+ txn ApplicationArgs 0
+ byte "manager"
+ ==
+ bz reserve
+reserve:
+ txn ApplicationArgs 0
+ byte "reserve"
+ ==
+ bz freeze
+freeze:
+ txn ApplicationArgs 0
+ byte "freeze"
+ ==
+ bz clawback
+clawback:
+ txn ApplicationArgs 0
+ byte "manager"
+ ==
+submit: itxn_submit
+`),
+ }
+
+ fund := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: appIndex.Address(),
+ Amount: 200_000, // exactly account min balance + one asset
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &app, &fund)
+ l.endBlock(t, eval)
+
+ createAsa := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[1],
+ ApplicationID: appIndex,
+ ApplicationArgs: [][]byte{[]byte("create")},
+ }
+
+ eval = l.nextBlock(t)
+ // Can't create an asset if you have exactly 200,000 and need to pay fee
+ eval.txn(t, &createAsa, "balance 199000 below min 200000")
+ // fund it some more and try again
+ eval.txns(t, fund.Noted("more!"), &createAsa)
+ vb := l.endBlock(t, eval)
+
+ asaIndex := vb.blk.Payset[1].EvalDelta.InnerTxns[0].ConfigAsset
+ require.Equal(t, basics.AssetIndex(5), asaIndex)
+
+ asaParams, err := l.asaParams(t, basics.AssetIndex(5))
+ require.NoError(t, err)
+
+ require.Equal(t, 1_000_000, int(asaParams.Total))
+ require.Equal(t, 3, int(asaParams.Decimals))
+ require.Equal(t, "oz", asaParams.UnitName)
+ require.Equal(t, "Gold", asaParams.AssetName)
+ require.Equal(t, "https://gold.rush/", asaParams.URL)
+
+}
+
+// TestAsaDuringInit ensures an ASA can be made while initilizing an
+// app. In practice, this is impossible, because you would not be
+// able to prefund the account - you don't know the app id. But here
+// we can know, so it helps exercise txncounter changes.
+func TestAsaDuringInit(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ appIndex := basics.AppIndex(2)
+ prefund := txntest.Txn{
+ Type: "pay",
+ Sender: addrs[0],
+ Receiver: appIndex.Address(),
+ Amount: 300000, // plenty for min balances, fees
+ }
+
+ app := txntest.Txn{
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: `
+ itxn_begin
+ int acfg
+ itxn_field TypeEnum
+ int 1000000
+ itxn_field ConfigAssetTotal
+ byte "oz"
+ itxn_field ConfigAssetUnitName
+ byte "Gold"
+ itxn_field ConfigAssetName
+ itxn_submit
+ itxn CreatedAssetID
+ int 3
+ ==
+ itxn CreatedApplicationID
+ int 0
+ ==
+ &&
+ itxn NumLogs
+ int 0
+ ==
+ &&
+`,
+ }
+
+ eval := l.nextBlock(t)
+ eval.txns(t, &prefund, &app)
+ vb := l.endBlock(t, eval)
+
+ require.Equal(t, appIndex, vb.blk.Payset[1].ApplicationID)
+
+ asaIndex := vb.blk.Payset[1].EvalDelta.InnerTxns[0].ConfigAsset
+ require.Equal(t, basics.AssetIndex(3), asaIndex)
+}
diff --git a/ledger/cow.go b/ledger/cow.go
index c5595169b..1234c191b 100644
--- a/ledger/cow.go
+++ b/ledger/cow.go
@@ -57,15 +57,16 @@ type roundCowState struct {
proto config.ConsensusParams
mods ledgercore.StateDelta
+ // count of transactions. Formerly, we used len(cb.mods), but that
+ // does not count inner transactions.
+ txnCount uint64
+
// storage deltas populated as side effects of AppCall transaction
// 1. Opt-in/Close actions (see Allocate/Deallocate)
// 2. Stateful TEAL evaluation (see SetKey/DelKey)
// must be incorporated into mods.accts before passing deltas forward
sdeltas map[basics.Address]map[storagePtr]*storageDelta
- // logs populated in AppCall transaction
- logs []basics.LogItem
-
// either or not maintain compatibility with original app refactoring behavior
// this is needed for generating old eval delta in new code
compatibilityMode bool
@@ -78,15 +79,14 @@ type roundCowState struct {
trackedCreatables map[int]basics.CreatableIndex
}
-func makeRoundCowState(b roundCowParent, hdr bookkeeping.BlockHeader, prevTimestamp int64, hint int) *roundCowState {
+func makeRoundCowState(b roundCowParent, hdr bookkeeping.BlockHeader, proto config.ConsensusParams, prevTimestamp int64, hint int) *roundCowState {
cb := roundCowState{
lookupParent: b,
commitParent: nil,
- proto: config.Consensus[hdr.CurrentProtocol],
+ proto: proto,
mods: ledgercore.MakeStateDelta(&hdr, prevTimestamp, hint, 0),
sdeltas: make(map[basics.Address]map[storagePtr]*storageDelta),
trackedCreatables: make(map[int]basics.CreatableIndex),
- logs: make([]basics.LogItem, 0),
}
// compatibilityMode retains producing application' eval deltas under the following rule:
@@ -184,7 +184,7 @@ func (cb *roundCowState) checkDup(firstValid, lastValid basics.Round, txid trans
}
func (cb *roundCowState) txnCounter() uint64 {
- return cb.lookupParent.txnCounter() + uint64(len(cb.mods.Txids))
+ return cb.lookupParent.txnCounter() + cb.txnCount
}
func (cb *roundCowState) compactCertNext() basics.Round {
@@ -202,8 +202,13 @@ func (cb *roundCowState) trackCreatable(creatableIndex basics.CreatableIndex) {
cb.trackedCreatables[cb.groupIdx] = creatableIndex
}
+func (cb *roundCowState) incTxnCount() {
+ cb.txnCount++
+}
+
func (cb *roundCowState) addTx(txn transactions.Transaction, txid transactions.Txid) {
cb.mods.Txids[txid] = txn.LastValid
+ cb.incTxnCount()
if txn.Lease != [32]byte{} {
cb.mods.Txleases[ledgercore.Txlease{Sender: txn.Sender, Lease: txn.Lease}] = txn.LastValid
}
@@ -246,6 +251,8 @@ func (cb *roundCowState) commitToParent() {
for txid, lv := range cb.mods.Txids {
cb.commitParent.mods.Txids[txid] = lv
}
+ cb.commitParent.txnCount += cb.txnCount
+
for txl, expires := range cb.mods.Txleases {
cb.commitParent.mods.Txleases[txl] = expires
}
diff --git a/ledger/cow_test.go b/ledger/cow_test.go
index 273ab3faa..3423db360 100644
--- a/ledger/cow_test.go
+++ b/ledger/cow_test.go
@@ -21,10 +21,12 @@ import (
"github.com/stretchr/testify/require"
+ "github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/bookkeeping"
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/ledger/ledgercore"
+ "github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/test/partitiontest"
)
@@ -112,7 +114,9 @@ func TestCowBalance(t *testing.T) {
accts0 := randomAccounts(20, true)
ml := mockLedger{balanceMap: accts0}
- c0 := makeRoundCowState(&ml, bookkeeping.BlockHeader{}, 0, 0)
+ c0 := makeRoundCowState(
+ &ml, bookkeeping.BlockHeader{}, config.Consensus[protocol.ConsensusCurrentVersion],
+ 0, 0)
checkCow(t, c0, accts0)
c1 := c0.child(0)
diff --git a/ledger/eval.go b/ledger/eval.go
index fbd287c5c..5730a4f22 100644
--- a/ledger/eval.go
+++ b/ledger/eval.go
@@ -41,6 +41,9 @@ import (
// ErrNoSpace indicates insufficient space for transaction in block
var ErrNoSpace = errors.New("block does not have space for transaction")
+// ErrRoundZero is self-explanatory
+var ErrRoundZero = errors.New("cannot start evaluator for round 0")
+
// maxPaysetHint makes sure that we don't allocate too much memory up front
// in the block evaluator, since there cannot reasonably be more than this
// many transactions in a block.
@@ -348,6 +351,7 @@ type BlockEvaluator struct {
block bookkeeping.Block
blockTxBytes int
+ specials transactions.SpecialAddresses
blockGenerated bool // prevent repeated GenerateBlock calls
@@ -383,6 +387,21 @@ func (l *Ledger) StartEvaluator(hdr bookkeeping.BlockHeader, paysetHint int) (*B
}
func startEvaluator(l ledgerForEvaluator, hdr bookkeeping.BlockHeader, proto config.ConsensusParams, paysetHint int, validate bool, generate bool) (*BlockEvaluator, error) {
+ if hdr.Round == 0 {
+ return nil, ErrRoundZero
+ }
+
+ prevHeader, err := l.BlockHdr(hdr.Round - 1)
+ if err != nil {
+ return nil, fmt.Errorf(
+ "can't evaluate block %d without previous header: %v", hdr.Round, err)
+ }
+
+ prevProto, ok := config.Consensus[prevHeader.CurrentProtocol]
+ if !ok {
+ return nil, protocol.Error(prevHeader.CurrentProtocol)
+ }
+
base := &roundCowBase{
l: l,
// round that lookups come from is previous block. We validate
@@ -390,14 +409,20 @@ func startEvaluator(l ledgerForEvaluator, hdr bookkeeping.BlockHeader, proto con
// If we are not validating, we must have previously checked
// an agreement.Certificate attesting that hdr is valid.
rnd: hdr.Round - 1,
+ txnCount: prevHeader.TxnCounter,
proto: proto,
accounts: make(map[basics.Address]basics.AccountData),
}
eval := &BlockEvaluator{
- validate: validate,
- generate: generate,
- block: bookkeeping.Block{BlockHeader: hdr},
+ validate: validate,
+ generate: generate,
+ prevHeader: prevHeader,
+ block: bookkeeping.Block{BlockHeader: hdr},
+ specials: transactions.SpecialAddresses{
+ FeeSink: hdr.FeeSink,
+ RewardsPool: hdr.RewardsPool,
+ },
proto: proto,
genesisHash: l.GenesisHash(),
l: l,
@@ -412,35 +437,18 @@ func startEvaluator(l ledgerForEvaluator, hdr bookkeeping.BlockHeader, proto con
eval.block.Payset = make([]transactions.SignedTxnInBlock, 0, paysetHint)
}
- prevProto := proto
+ base.compactCertNextRnd = eval.prevHeader.CompactCert[protocol.CompactCertBasic].CompactCertNextRound
- if hdr.Round > 0 {
- var err error
- eval.prevHeader, err = l.BlockHdr(base.rnd)
- if err != nil {
- return nil, fmt.Errorf("can't evaluate block %v without previous header: %v", hdr.Round, err)
- }
-
- base.txnCount = eval.prevHeader.TxnCounter
- base.compactCertNextRnd = eval.prevHeader.CompactCert[protocol.CompactCertBasic].CompactCertNextRound
-
- var ok bool
- prevProto, ok = config.Consensus[eval.prevHeader.CurrentProtocol]
- if !ok {
- return nil, protocol.Error(eval.prevHeader.CurrentProtocol)
- }
-
- // Check if compact certs are being enabled as of this block.
- if base.compactCertNextRnd == 0 && proto.CompactCertRounds != 0 {
- // Determine the first block that will contain a Merkle
- // commitment to the voters. We need to account for the
- // fact that the voters come from CompactCertVotersLookback
- // rounds ago.
- votersRound := (hdr.Round + basics.Round(proto.CompactCertVotersLookback)).RoundUpToMultipleOf(basics.Round(proto.CompactCertRounds))
+ // Check if compact certs are being enabled as of this block.
+ if base.compactCertNextRnd == 0 && proto.CompactCertRounds != 0 {
+ // Determine the first block that will contain a Merkle
+ // commitment to the voters. We need to account for the
+ // fact that the voters come from CompactCertVotersLookback
+ // rounds ago.
+ votersRound := (hdr.Round + basics.Round(proto.CompactCertVotersLookback)).RoundUpToMultipleOf(basics.Round(proto.CompactCertRounds))
- // The first compact cert will appear CompactCertRounds after that.
- base.compactCertNextRnd = votersRound + basics.Round(proto.CompactCertRounds)
- }
+ // The first compact cert will appear CompactCertRounds after that.
+ base.compactCertNextRnd = votersRound + basics.Round(proto.CompactCertRounds)
}
prevTotals, err := l.Totals(eval.prevHeader.Round)
@@ -465,7 +473,7 @@ func startEvaluator(l ledgerForEvaluator, hdr bookkeeping.BlockHeader, proto con
eval.block.BlockHeader.RewardsState = eval.prevHeader.NextRewardsState(hdr.Round, proto, incentivePoolData.MicroAlgos, prevTotals.RewardUnits())
}
// set the eval state with the current header
- eval.state = makeRoundCowState(base, eval.block.BlockHeader, eval.prevHeader.TimeStamp, paysetHint)
+ eval.state = makeRoundCowState(base, eval.block.BlockHeader, proto, eval.prevHeader.TimeStamp, paysetHint)
if validate {
err := eval.block.BlockHeader.PreCheck(eval.prevHeader)
@@ -551,8 +559,8 @@ func (eval *BlockEvaluator) workaroundOverspentRewards(rewardPoolBalance basics.
return
}
-// TxnCounter returns the number of transactions that have been added to the block evaluator so far.
-func (eval *BlockEvaluator) TxnCounter() int {
+// PaySetSize returns the number of top-level transactions that have been added to the block evaluator so far.
+func (eval *BlockEvaluator) PaySetSize() int {
return len(eval.block.Payset)
}
@@ -627,12 +635,7 @@ func (eval *BlockEvaluator) testTransaction(txn transactions.SignedTxn, cow *rou
return err
}
- // Well-formed on its own?
- spec := transactions.SpecialAddresses{
- FeeSink: eval.block.BlockHeader.FeeSink,
- RewardsPool: eval.block.BlockHeader.RewardsPool,
- }
- err = txn.Txn.WellFormed(spec, eval.proto)
+ err = txn.Txn.WellFormed(eval.specials, eval.proto)
if err != nil {
return fmt.Errorf("transaction %v: malformed: %v", txn.ID(), err)
}
@@ -668,12 +671,13 @@ func (eval *BlockEvaluator) TransactionGroup(txads []transactions.SignedTxnWithA
// prepareEvalParams creates a logic.EvalParams for each ApplicationCall
// transaction in the group
-func (eval *BlockEvaluator) prepareEvalParams(txgroup []transactions.SignedTxnWithAD) (res []*logic.EvalParams) {
+func (eval *BlockEvaluator) prepareEvalParams(txgroup []transactions.SignedTxnWithAD) []*logic.EvalParams {
var groupNoAD []transactions.SignedTxn
var pastSideEffects []logic.EvalSideEffects
var minTealVersion uint64
pooledApplicationBudget := uint64(0)
- res = make([]*logic.EvalParams, len(txgroup))
+ var credit uint64
+ res := make([]*logic.EvalParams, len(txgroup))
for i, txn := range txgroup {
// Ignore any non-ApplicationCall transactions
if txn.SignedTxn.Txn.Type != protocol.ApplicationCallTx {
@@ -693,19 +697,23 @@ func (eval *BlockEvaluator) prepareEvalParams(txgroup []transactions.SignedTxnWi
}
pastSideEffects = logic.MakePastSideEffects(len(txgroup))
minTealVersion = logic.ComputeMinTealVersion(groupNoAD)
+ credit, _ = transactions.FeeCredit(groupNoAD, eval.proto.MinTxnFee)
+ // intentionally ignoring error here, fees had to have been enough to get here
}
res[i] = &logic.EvalParams{
Txn: &groupNoAD[i],
Proto: &eval.proto,
TxnGroup: groupNoAD,
- GroupIndex: i,
+ GroupIndex: uint64(i),
PastSideEffects: pastSideEffects,
MinTealVersion: &minTealVersion,
PooledApplicationBudget: &pooledApplicationBudget,
+ FeeCredit: &credit,
+ Specials: &eval.specials,
}
}
- return
+ return res
}
// transactionGroup tentatively executes a group of transactions as part of this block evaluation.
@@ -726,8 +734,6 @@ func (eval *BlockEvaluator) transactionGroup(txgroup []transactions.SignedTxnWit
var groupTxBytes int
cow := eval.state.child(len(txgroup))
-
- // Prepare eval params for any ApplicationCall transactions in the group
evalParams := eval.prepareEvalParams(txgroup)
// Evaluate each transaction in the group
@@ -860,13 +866,8 @@ func (eval *BlockEvaluator) transaction(txn transactions.SignedTxn, evalParams *
}
}
- spec := transactions.SpecialAddresses{
- FeeSink: eval.block.BlockHeader.FeeSink,
- RewardsPool: eval.block.BlockHeader.RewardsPool,
- }
-
// Apply the transaction, updating the cow balances
- applyData, err := eval.applyTransaction(txn.Txn, cow, evalParams, spec, cow.txnCounter())
+ applyData, err := eval.applyTransaction(txn.Txn, cow, evalParams, cow.txnCounter())
if err != nil {
return fmt.Errorf("transaction %v: %v", txid, err)
}
@@ -903,6 +904,13 @@ func (eval *BlockEvaluator) transaction(txn transactions.SignedTxn, evalParams *
}
}
+ // We are not allowing InnerTxns to have InnerTxns yet. Error if that happens.
+ for _, itx := range applyData.EvalDelta.InnerTxns {
+ if len(itx.ApplyData.EvalDelta.InnerTxns) > 0 {
+ return fmt.Errorf("inner transaction has inner transactions %v", itx)
+ }
+ }
+
// Remember this txn
cow.addTx(txn.Txn, txid)
@@ -910,11 +918,11 @@ func (eval *BlockEvaluator) transaction(txn transactions.SignedTxn, evalParams *
}
// applyTransaction changes the balances according to this transaction.
-func (eval *BlockEvaluator) applyTransaction(tx transactions.Transaction, balances *roundCowState, evalParams *logic.EvalParams, spec transactions.SpecialAddresses, ctr uint64) (ad transactions.ApplyData, err error) {
+func (eval *BlockEvaluator) applyTransaction(tx transactions.Transaction, balances *roundCowState, evalParams *logic.EvalParams, ctr uint64) (ad transactions.ApplyData, err error) {
params := balances.ConsensusParams()
// move fee to pool
- err = balances.Move(tx.Sender, spec.FeeSink, tx.Fee, &ad.SenderRewards, nil)
+ err = balances.Move(tx.Sender, eval.specials.FeeSink, tx.Fee, &ad.SenderRewards, nil)
if err != nil {
return
}
@@ -942,19 +950,19 @@ func (eval *BlockEvaluator) applyTransaction(tx transactions.Transaction, balanc
switch tx.Type {
case protocol.PaymentTx:
- err = apply.Payment(tx.PaymentTxnFields, tx.Header, balances, spec, &ad)
+ err = apply.Payment(tx.PaymentTxnFields, tx.Header, balances, eval.specials, &ad)
case protocol.KeyRegistrationTx:
- err = apply.Keyreg(tx.KeyregTxnFields, tx.Header, balances, spec, &ad, balances.round())
+ err = apply.Keyreg(tx.KeyregTxnFields, tx.Header, balances, eval.specials, &ad, balances.round())
case protocol.AssetConfigTx:
- err = apply.AssetConfig(tx.AssetConfigTxnFields, tx.Header, balances, spec, &ad, ctr)
+ err = apply.AssetConfig(tx.AssetConfigTxnFields, tx.Header, balances, eval.specials, &ad, ctr)
case protocol.AssetTransferTx:
- err = apply.AssetTransfer(tx.AssetTransferTxnFields, tx.Header, balances, spec, &ad)
+ err = apply.AssetTransfer(tx.AssetTransferTxnFields, tx.Header, balances, eval.specials, &ad)
case protocol.AssetFreezeTx:
- err = apply.AssetFreeze(tx.AssetFreezeTxnFields, tx.Header, balances, spec, &ad)
+ err = apply.AssetFreeze(tx.AssetFreezeTxnFields, tx.Header, balances, eval.specials, &ad)
case protocol.ApplicationCallTx:
err = apply.ApplicationCall(tx.ApplicationCallTxnFields, tx.Header, balances, &ad, evalParams, ctr)
@@ -1116,7 +1124,14 @@ func (eval *BlockEvaluator) GenerateBlock() (*ValidatedBlock, error) {
delta: eval.state.deltas(),
}
eval.blockGenerated = true
- eval.state = makeRoundCowState(eval.state, eval.block.BlockHeader, eval.prevHeader.TimeStamp, len(eval.block.Payset))
+ proto, ok := config.Consensus[eval.block.BlockHeader.CurrentProtocol]
+ if !ok {
+ return nil, fmt.Errorf(
+ "unknown consensus version: %s", eval.block.BlockHeader.CurrentProtocol)
+ }
+ eval.state = makeRoundCowState(
+ eval.state, eval.block.BlockHeader, proto, eval.prevHeader.TimeStamp,
+ len(eval.block.Payset))
return &vb, nil
}
@@ -1275,7 +1290,7 @@ transactionGroupLoop:
return eval.state.deltas(), nil
}
-// loadedTransactionGroup is a helper struct to allow asyncronious loading of the account data needed by the transaction groups
+// loadedTransactionGroup is a helper struct to allow asynchronous loading of the account data needed by the transaction groups
type loadedTransactionGroup struct {
// group is the transaction group
group []transactions.SignedTxnWithAD
@@ -1286,6 +1301,21 @@ type loadedTransactionGroup struct {
err error
}
+// Return the maximum number of addresses referenced in any given transaction.
+func maxAddressesInTxn(proto *config.ConsensusParams) int {
+ return 7 + proto.MaxAppTxnAccounts
+}
+
+// Write the list of addresses referenced in `txn` to `out`. Addresses might repeat.
+func getTxnAddresses(txn *transactions.Transaction, out *[]basics.Address) {
+ *out = (*out)[:0]
+
+ *out = append(
+ *out, txn.Sender, txn.Receiver, txn.CloseRemainderTo, txn.AssetSender,
+ txn.AssetReceiver, txn.AssetCloseTo, txn.FreezeAccount)
+ *out = append(*out, txn.ApplicationCallTxnFields.Accounts...)
+}
+
// loadAccounts loads the account data for the provided transaction group list. It also loads the feeSink account and add it to the first returned transaction group.
// The order of the transaction groups returned by the channel is identical to the one in the input array.
func loadAccounts(ctx context.Context, l ledgerForEvaluator, rnd basics.Round, groups [][]transactions.SignedTxnWithAD, feeSinkAddr basics.Address, consensusParams config.ConsensusParams) chan loadedTransactionGroup {
@@ -1312,8 +1342,7 @@ func loadAccounts(ctx context.Context, l ledgerForEvaluator, rnd basics.Round, g
defer close(outChan)
accountTasks := make(map[basics.Address]*addrTask)
- maxAddressesPerTransaction := 7 + consensusParams.MaxAppTxnAccounts
- addressesCh := make(chan *addrTask, len(groups)*consensusParams.MaxTxGroupSize*maxAddressesPerTransaction)
+ addressesCh := make(chan *addrTask, len(groups)*consensusParams.MaxTxGroupSize*maxAddressesInTxn(&consensusParams))
// totalBalances counts the total number of balances over all the transaction groups
totalBalances := 0
@@ -1354,6 +1383,7 @@ func loadAccounts(ctx context.Context, l ledgerForEvaluator, rnd basics.Round, g
task := &groupTask{}
groupsReady[i] = task
for _, stxn := range group {
+ // If you add new addresses here, also add them in getTxnAddresses().
initAccount(stxn.Txn.Sender, task)
initAccount(stxn.Txn.Receiver, task)
initAccount(stxn.Txn.CloseRemainderTo, task)
@@ -1495,6 +1525,24 @@ func (vb ValidatedBlock) WithSeed(s committee.Seed) ValidatedBlock {
}
}
+// GetBlockAddresses returns all addresses referenced in `block`.
+func GetBlockAddresses(block *bookkeeping.Block) map[basics.Address]struct{} {
+ // Reserve a reasonable memory size for the map.
+ res := make(map[basics.Address]struct{}, len(block.Payset)+2)
+ res[block.FeeSink] = struct{}{}
+ res[block.RewardsPool] = struct{}{}
+
+ var refAddresses []basics.Address
+ for _, stib := range block.Payset {
+ getTxnAddresses(&stib.Txn, &refAddresses)
+ for _, address := range refAddresses {
+ res[address] = struct{}{}
+ }
+ }
+
+ return res
+}
+
// Eval evaluates a block without validation using the given `proto`. Return the state
// delta and transactions with modified apply data according to `proto`.
// This function is used by Indexer which modifies `proto` to retrieve the asset
diff --git a/ledger/eval_test.go b/ledger/eval_test.go
index 0f2aea2b3..9d3598250 100644
--- a/ledger/eval_test.go
+++ b/ledger/eval_test.go
@@ -20,11 +20,13 @@ import (
"context"
"errors"
"fmt"
+ "math/rand"
"os"
"path/filepath"
"reflect"
"runtime/pprof"
"strings"
+ "sync"
"testing"
"time"
@@ -72,6 +74,7 @@ func TestBlockEvaluator(t *testing.T) {
newBlock := bookkeeping.MakeBlock(genesisInitState.Block.BlockHeader)
eval, err := l.StartEvaluator(newBlock.BlockHeader, 0)
+ require.Equal(t, eval.specials.FeeSink, testSinkAddr)
require.NoError(t, err)
genHash := genesisInitState.Block.BlockHeader.GenesisHash
@@ -347,40 +350,24 @@ func TestPrepareEvalParams(t *testing.T) {
}
params := []config.ConsensusParams{
- config.ConsensusParams{Application: true, MaxAppProgramCost: 700},
+ {Application: true, MaxAppProgramCost: 700},
config.Consensus[protocol.ConsensusV29],
config.Consensus[protocol.ConsensusFuture],
}
// Create some sample transactions
- payment := transactions.SignedTxnWithAD{
- SignedTxn: transactions.SignedTxn{
- Txn: transactions.Transaction{
- Type: protocol.PaymentTx,
- Header: transactions.Header{
- Sender: basics.Address{1, 2, 3, 4},
- },
- PaymentTxnFields: transactions.PaymentTxnFields{
- Receiver: basics.Address{4, 3, 2, 1},
- Amount: basics.MicroAlgos{Raw: 100},
- },
- },
- },
- }
-
- appcall1 := transactions.SignedTxnWithAD{
- SignedTxn: transactions.SignedTxn{
- Txn: transactions.Transaction{
- Type: protocol.ApplicationCallTx,
- Header: transactions.Header{
- Sender: basics.Address{1, 2, 3, 4},
- },
- ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
- ApplicationID: basics.AppIndex(1),
- },
- },
- },
- }
+ payment := txntest.Txn{
+ Type: protocol.PaymentTx,
+ Sender: basics.Address{1, 2, 3, 4},
+ Receiver: basics.Address{4, 3, 2, 1},
+ Amount: 100,
+ }.SignedTxnWithAD()
+
+ appcall1 := txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: basics.Address{1, 2, 3, 4},
+ ApplicationID: basics.AppIndex(1),
+ }.SignedTxnWithAD()
appcall2 := appcall1
appcall2.SignedTxn.Txn.ApplicationCallTxnFields.ApplicationID = basics.AppIndex(2)
@@ -431,7 +418,7 @@ func TestPrepareEvalParams(t *testing.T) {
if present {
require.NotNil(t, res[k])
require.NotNil(t, res[k].PastSideEffects)
- require.Equal(t, res[k].GroupIndex, k)
+ require.Equal(t, res[k].GroupIndex, uint64(k))
require.Equal(t, res[k].TxnGroup, expGroupNoAD)
require.Equal(t, *res[k].Proto, eval.proto)
require.Equal(t, *res[k].Txn, testCase.group[k].SignedTxn)
@@ -536,14 +523,16 @@ ok:
{
SignedTxn: stxn1,
ApplyData: transactions.ApplyData{
- EvalDelta: basics.EvalDelta{GlobalDelta: map[string]basics.ValueDelta{
+ EvalDelta: transactions.EvalDelta{GlobalDelta: map[string]basics.ValueDelta{
"creator": {Action: basics.SetBytesAction, Bytes: string(addrs[0][:])}},
- }},
+ },
+ ApplicationID: 1,
+ },
},
{
SignedTxn: stxn2,
ApplyData: transactions.ApplyData{
- EvalDelta: basics.EvalDelta{GlobalDelta: map[string]basics.ValueDelta{
+ EvalDelta: transactions.EvalDelta{GlobalDelta: map[string]basics.ValueDelta{
"caller": {Action: basics.SetBytesAction, Bytes: string(addrs[0][:])}},
}},
},
@@ -583,86 +572,34 @@ func TestEvalAppAllocStateWithTxnGroup(t *testing.T) {
require.Equal(t, basics.TealValue{Type: basics.TealBytesType, Bytes: string(addr[:])}, state["creator"])
}
-func testEvalAppPoolingGroup(t *testing.T, schema basics.StateSchema, approvalProgram string, consensusVersion protocol.ConsensusVersion) (*BlockEvaluator, error) {
- genesisInitState, addrs, keys := genesis(10)
-
- dbName := fmt.Sprintf("%s.%d", t.Name(), crypto.RandUint64())
- const inMem = true
- cfg := config.GetDefaultLocal()
- l, err := OpenLedger(logging.Base(), dbName, inMem, genesisInitState, cfg)
- require.NoError(t, err)
+func testEvalAppPoolingGroup(t *testing.T, schema basics.StateSchema, approvalProgram string, consensusVersion protocol.ConsensusVersion) error {
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
defer l.Close()
- newBlock := bookkeeping.MakeBlock(genesisInitState.Block.BlockHeader)
- eval, err := l.StartEvaluator(newBlock.BlockHeader, 0)
- require.NoError(t, err)
- eval.validate = true
- eval.generate = false
+ eval := l.nextBlock(t)
eval.proto = config.Consensus[consensusVersion]
- ops, err := logic.AssembleString(approvalProgram)
- require.NoError(t, err, ops.Errors)
- approval := ops.Program
- ops, err = logic.AssembleString("#pragma version 4\nint 1")
- require.NoError(t, err)
- clear := ops.Program
-
- genHash := genesisInitState.Block.BlockHeader.GenesisHash
- header := transactions.Header{
- Sender: addrs[0],
- Fee: minFee,
- FirstValid: newBlock.Round(),
- LastValid: newBlock.Round(),
- GenesisHash: genHash,
- }
- appcall1 := transactions.Transaction{
- Type: protocol.ApplicationCallTx,
- Header: header,
- ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
- GlobalStateSchema: schema,
- ApprovalProgram: approval,
- ClearStateProgram: clear,
- },
+ appcall1 := txntest.Txn{
+ Sender: addrs[0],
+ Type: protocol.ApplicationCallTx,
+ GlobalStateSchema: schema,
+ ApprovalProgram: approvalProgram,
}
- appcall2 := transactions.Transaction{
- Type: protocol.ApplicationCallTx,
- Header: header,
- ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
- ApplicationID: basics.AppIndex(1),
- },
+ appcall2 := txntest.Txn{
+ Sender: addrs[0],
+ Type: protocol.ApplicationCallTx,
+ ApplicationID: basics.AppIndex(1),
}
- appcall3 := appcall2
- appcall3.Header.Sender = addrs[1]
-
- var group transactions.TxGroup
- group.TxGroupHashes = []crypto.Digest{crypto.HashObj(appcall1), crypto.HashObj(appcall2), crypto.HashObj(appcall3)}
- appcall1.Group = crypto.HashObj(group)
- appcall2.Group = crypto.HashObj(group)
- appcall3.Group = crypto.HashObj(group)
- stxn1 := appcall1.Sign(keys[0])
- stxn2 := appcall2.Sign(keys[0])
- stxn3 := appcall3.Sign(keys[1])
-
- g := []transactions.SignedTxnWithAD{
- {
- SignedTxn: stxn1,
- },
- {
- SignedTxn: stxn2,
- },
- {
- SignedTxn: stxn3,
- },
- }
- txgroup := []transactions.SignedTxn{stxn1, stxn2, stxn3}
- err = eval.TestTransactionGroup(txgroup)
- if err != nil {
- return eval, err
+ appcall3 := txntest.Txn{
+ Sender: addrs[1],
+ Type: protocol.ApplicationCallTx,
+ ApplicationID: basics.AppIndex(1),
}
- err = eval.transactionGroup(g)
- return eval, err
+
+ return eval.txgroup(t, &appcall1, &appcall2, &appcall3)
}
// TestEvalAppPooledBudgetWithTxnGroup ensures 3 app call txns can successfully pool
@@ -704,7 +641,7 @@ func TestEvalAppPooledBudgetWithTxnGroup(t *testing.T) {
for i, param := range params {
for j, testCase := range cases {
t.Run(fmt.Sprintf("i=%d,j=%d", i, j), func(t *testing.T) {
- _, err := testEvalAppPoolingGroup(t, basics.StateSchema{NumByteSlice: 3}, testCase.prog, param)
+ err := testEvalAppPoolingGroup(t, basics.StateSchema{NumByteSlice: 3}, testCase.prog, param)
if !testCase.isSuccessV29 && reflect.DeepEqual(param, protocol.ConsensusV29) {
require.Error(t, err)
require.Contains(t, err.Error(), testCase.expectedErrorV29)
@@ -717,30 +654,250 @@ func TestEvalAppPooledBudgetWithTxnGroup(t *testing.T) {
}
}
+// BenchTxnGenerator generates transactions as long as asked for
+type BenchTxnGenerator interface {
+ // Prepare should be used for making pre-benchmark ledger initialization
+ // like accounts funding, assets or apps creation
+ Prepare(tb testing.TB, addrs []basics.Address, keys []*crypto.SignatureSecrets, rnd basics.Round, gh crypto.Digest) ([]transactions.SignedTxn, int)
+ // Txn generates a single transaction
+ Txn(tb testing.TB, addrs []basics.Address, keys []*crypto.SignatureSecrets, rnd basics.Round, gh crypto.Digest) transactions.SignedTxn
+}
+
+// BenchPaymentTxnGenerator generates payment transactions
+type BenchPaymentTxnGenerator struct {
+ counter int
+}
+
+func (g *BenchPaymentTxnGenerator) Prepare(tb testing.TB, addrs []basics.Address, keys []*crypto.SignatureSecrets, rnd basics.Round, gh crypto.Digest) ([]transactions.SignedTxn, int) {
+ return nil, 0
+}
+
+func (g *BenchPaymentTxnGenerator) Txn(tb testing.TB, addrs []basics.Address, keys []*crypto.SignatureSecrets, rnd basics.Round, gh crypto.Digest) transactions.SignedTxn {
+ sender := g.counter % len(addrs)
+ receiver := (g.counter + 1) % len(addrs)
+ // The following would create more random selection of accounts, and prevent a cache of half of the accounts..
+ // iDigest := crypto.Hash([]byte{byte(i), byte(i >> 8), byte(i >> 16), byte(i >> 24)})
+ // sender := (uint64(iDigest[0]) + uint64(iDigest[1])*256 + uint64(iDigest[2])*256*256) % uint64(len(addrs))
+ // receiver := (uint64(iDigest[4]) + uint64(iDigest[5])*256 + uint64(iDigest[6])*256*256) % uint64(len(addrs))
+
+ txn := transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: transactions.Header{
+ Sender: addrs[sender],
+ Fee: minFee,
+ FirstValid: rnd,
+ LastValid: rnd,
+ GenesisHash: gh,
+ },
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: addrs[receiver],
+ Amount: basics.MicroAlgos{Raw: 100},
+ },
+ }
+ stxn := txn.Sign(keys[sender])
+ g.counter++
+ return stxn
+}
+
+// BenchAppTxnGenerator generates app opt in transactions
+type BenchAppOptInsTxnGenerator struct {
+ NumApps int
+ Proto protocol.ConsensusVersion
+ Program []byte
+ OptedInAccts []basics.Address
+ OptedInAcctsIndices []int
+}
+
+func (g *BenchAppOptInsTxnGenerator) Prepare(tb testing.TB, addrs []basics.Address, keys []*crypto.SignatureSecrets, rnd basics.Round, gh crypto.Digest) ([]transactions.SignedTxn, int) {
+ maxLocalSchemaEntries := config.Consensus[g.Proto].MaxLocalSchemaEntries
+ maxAppsOptedIn := config.Consensus[g.Proto].MaxAppsOptedIn
+
+ // this function might create too much transaction even to fit into a single block
+ // estimate number of smaller blocks needed in order to set LastValid properly
+ const numAccts = 10000
+ const maxTxnPerBlock = 10000
+ expectedTxnNum := g.NumApps + numAccts*maxAppsOptedIn
+ expectedNumOfBlocks := expectedTxnNum/maxTxnPerBlock + 1
+
+ createTxns := make([]transactions.SignedTxn, 0, g.NumApps)
+ for i := 0; i < g.NumApps; i++ {
+ creatorIdx := rand.Intn(len(addrs))
+ creator := addrs[creatorIdx]
+ txn := transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: transactions.Header{
+ Sender: creator,
+ Fee: minFee,
+ FirstValid: rnd,
+ LastValid: rnd + basics.Round(expectedNumOfBlocks),
+ GenesisHash: gh,
+ Note: randomNote(),
+ },
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApprovalProgram: g.Program,
+ ClearStateProgram: []byte{0x02, 0x20, 0x01, 0x01, 0x22},
+ LocalStateSchema: basics.StateSchema{NumByteSlice: maxLocalSchemaEntries},
+ },
+ }
+ stxn := txn.Sign(keys[creatorIdx])
+ createTxns = append(createTxns, stxn)
+ }
+
+ appsOptedIn := make(map[basics.Address]map[basics.AppIndex]struct{}, numAccts)
+
+ optInTxns := make([]transactions.SignedTxn, 0, numAccts*maxAppsOptedIn)
+
+ for i := 0; i < numAccts; i++ {
+ var senderIdx int
+ var sender basics.Address
+ for {
+ senderIdx = rand.Intn(len(addrs))
+ sender = addrs[senderIdx]
+ if len(appsOptedIn[sender]) < maxAppsOptedIn {
+ appsOptedIn[sender] = make(map[basics.AppIndex]struct{}, maxAppsOptedIn)
+ break
+ }
+ }
+ g.OptedInAccts = append(g.OptedInAccts, sender)
+ g.OptedInAcctsIndices = append(g.OptedInAcctsIndices, senderIdx)
+
+ acctOptIns := appsOptedIn[sender]
+ for j := 0; j < maxAppsOptedIn; j++ {
+ var appIdx basics.AppIndex
+ for {
+ appIdx = basics.AppIndex(rand.Intn(g.NumApps) + 1)
+ if _, ok := acctOptIns[appIdx]; !ok {
+ acctOptIns[appIdx] = struct{}{}
+ break
+ }
+ }
+
+ txn := transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: transactions.Header{
+ Sender: sender,
+ Fee: minFee,
+ FirstValid: rnd,
+ LastValid: rnd + basics.Round(expectedNumOfBlocks),
+ GenesisHash: gh,
+ },
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: basics.AppIndex(appIdx),
+ OnCompletion: transactions.OptInOC,
+ },
+ }
+ stxn := txn.Sign(keys[senderIdx])
+ optInTxns = append(optInTxns, stxn)
+ }
+ appsOptedIn[sender] = acctOptIns
+ }
+
+ return append(createTxns, optInTxns...), maxTxnPerBlock
+}
+
+func (g *BenchAppOptInsTxnGenerator) Txn(tb testing.TB, addrs []basics.Address, keys []*crypto.SignatureSecrets, rnd basics.Round, gh crypto.Digest) transactions.SignedTxn {
+ idx := rand.Intn(len(g.OptedInAcctsIndices))
+ senderIdx := g.OptedInAcctsIndices[idx]
+ sender := addrs[senderIdx]
+ receiverIdx := rand.Intn(len(addrs))
+
+ txn := transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: transactions.Header{
+ Sender: sender,
+ Fee: minFee,
+ FirstValid: rnd,
+ LastValid: rnd,
+ GenesisHash: gh,
+ Note: randomNote(),
+ },
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: addrs[receiverIdx],
+ Amount: basics.MicroAlgos{Raw: 100},
+ },
+ }
+ stxn := txn.Sign(keys[senderIdx])
+ return stxn
+}
+
func BenchmarkBlockEvaluatorRAMCrypto(b *testing.B) {
- benchmarkBlockEvaluator(b, true, true)
+ g := BenchPaymentTxnGenerator{}
+ benchmarkBlockEvaluator(b, true, true, protocol.ConsensusCurrentVersion, &g)
}
func BenchmarkBlockEvaluatorRAMNoCrypto(b *testing.B) {
- benchmarkBlockEvaluator(b, true, false)
+ g := BenchPaymentTxnGenerator{}
+ benchmarkBlockEvaluator(b, true, false, protocol.ConsensusCurrentVersion, &g)
}
func BenchmarkBlockEvaluatorDiskCrypto(b *testing.B) {
- benchmarkBlockEvaluator(b, false, true)
+ g := BenchPaymentTxnGenerator{}
+ benchmarkBlockEvaluator(b, false, true, protocol.ConsensusCurrentVersion, &g)
}
func BenchmarkBlockEvaluatorDiskNoCrypto(b *testing.B) {
- benchmarkBlockEvaluator(b, false, false)
+ g := BenchPaymentTxnGenerator{}
+ benchmarkBlockEvaluator(b, false, false, protocol.ConsensusCurrentVersion, &g)
+}
+
+func BenchmarkBlockEvaluatorDiskAppOptIns(b *testing.B) {
+ g := BenchAppOptInsTxnGenerator{
+ NumApps: 500,
+ Proto: protocol.ConsensusFuture,
+ Program: []byte{0x02, 0x20, 0x01, 0x01, 0x22},
+ }
+ benchmarkBlockEvaluator(b, false, false, protocol.ConsensusFuture, &g)
+}
+
+func BenchmarkBlockEvaluatorDiskFullAppOptIns(b *testing.B) {
+ // program sets all 16 available keys of len 64 bytes to same values of 64 bytes
+ source := `#pragma version 5
+ txn OnCompletion
+ int OptIn
+ ==
+ bz done
+ int 0
+ store 0 // save loop var
+loop:
+ int 0 // acct index
+ byte "012345678901234567890123456789012345678901234567890123456789ABC0"
+ int 63
+ load 0 // loop var
+ int 0x41
+ +
+ setbyte // str[63] = chr(i + 'A')
+ dup // value is the same as key
+ app_local_put
+ load 0 // loop var
+ int 1
+ +
+ dup
+ store 0 // save loop var
+ int 16
+ <
+ bnz loop
+done:
+ int 1
+`
+ ops, err := logic.AssembleString(source)
+ require.NoError(b, err)
+ prog := ops.Program
+ g := BenchAppOptInsTxnGenerator{
+ NumApps: 500,
+ Proto: protocol.ConsensusFuture,
+ Program: prog,
+ }
+ benchmarkBlockEvaluator(b, false, false, protocol.ConsensusFuture, &g)
}
// this variant focuses on benchmarking ledger.go `eval()`, the rest is setup, it runs eval() b.N times.
-func benchmarkBlockEvaluator(b *testing.B, inMem bool, withCrypto bool) {
+func benchmarkBlockEvaluator(b *testing.B, inMem bool, withCrypto bool, proto protocol.ConsensusVersion, txnSource BenchTxnGenerator) {
deadlockDisable := deadlock.Opts.Disable
deadlock.Opts.Disable = true
defer func() { deadlock.Opts.Disable = deadlockDisable }()
start := time.Now()
- genesisInitState, addrs, keys := genesis(100000)
+ genesisInitState, addrs, keys := genesisWithProto(100000, proto)
dbName := fmt.Sprintf("%s.%d", b.Name(), crypto.RandUint64())
- proto := config.Consensus[genesisInitState.Block.CurrentProtocol]
- proto.MaxTxnBytesPerBlock = 1000000000 // very big, no limit
- config.Consensus[protocol.ConsensusVersion(dbName)] = proto
+ cparams := config.Consensus[genesisInitState.Block.CurrentProtocol]
+ cparams.MaxTxnBytesPerBlock = 1000000000 // very big, no limit
+ config.Consensus[protocol.ConsensusVersion(dbName)] = cparams
genesisInitState.Block.CurrentProtocol = protocol.ConsensusVersion(dbName)
cfg := config.GetDefaultLocal()
cfg.Archival = true
@@ -753,10 +910,6 @@ func benchmarkBlockEvaluator(b *testing.B, inMem bool, withCrypto bool) {
require.NoError(b, err)
defer testLedgerCleanup(l2, dbName2, inMem)
- setupDone := time.Now()
- setupTime := setupDone.Sub(start)
- b.Logf("BenchmarkBlockEvaluator setup time %s", setupTime.String())
-
bepprof := os.Getenv("BLOCK_EVAL_PPROF")
if len(bepprof) > 0 {
profpath := dbName + "_cpuprof"
@@ -773,38 +926,83 @@ func benchmarkBlockEvaluator(b *testing.B, inMem bool, withCrypto bool) {
}()
}
- // test speed of block building
newBlock := bookkeeping.MakeBlock(genesisInitState.Block.BlockHeader)
bev, err := l.StartEvaluator(newBlock.BlockHeader, 0)
require.NoError(b, err)
genHash := genesisInitState.Block.BlockHeader.GenesisHash
+ backlogPool := execpool.MakeBacklog(nil, 0, execpool.LowPriority, nil)
+ defer backlogPool.Shutdown()
+
+ // apply initialization transations if any
+ initSignedTxns, maxTxnPerBlock := txnSource.Prepare(b, addrs, keys, newBlock.Round(), genHash)
+ if len(initSignedTxns) > 0 {
+ // all init transactions need to be written to ledger before reopening and benchmarking
+ for _, l := range []*Ledger{l, l2} {
+ l.accts.ctxCancel() // force commitSyncer to exit
+
+ // wait commitSyncer to exit
+ // the test calls commitRound directly and does not need commitSyncer/committedUpTo
+ select {
+ case <-l.accts.commitSyncerClosed:
+ break
+ }
+ }
+
+ var numBlocks uint64 = 0
+ var validatedBlock *ValidatedBlock
+
+ // there are might more transactions than MaxTxnBytesPerBlock allows
+ // so make smaller blocks to fit
+ for i, stxn := range initSignedTxns {
+ err = bev.Transaction(stxn, transactions.ApplyData{})
+ require.NoError(b, err)
+ if maxTxnPerBlock > 0 && i%maxTxnPerBlock == 0 || i == len(initSignedTxns)-1 {
+ validatedBlock, err = bev.GenerateBlock()
+ require.NoError(b, err)
+ for _, l := range []*Ledger{l, l2} {
+ err = l.AddValidatedBlock(*validatedBlock, agreement.Certificate{})
+ require.NoError(b, err)
+ }
+ newBlock = bookkeeping.MakeBlock(validatedBlock.blk.BlockHeader)
+ bev, err = l.StartEvaluator(newBlock.BlockHeader, 0)
+ require.NoError(b, err)
+ numBlocks++
+ }
+ }
+
+ // wait until everying is written and then reload ledgers in order
+ // to start reading accounts from DB and not from caches/deltas
+ var wg sync.WaitGroup
+ for _, l := range []*Ledger{l, l2} {
+ wg.Add(1)
+ // committing might take a long time, do it parallel
+ go func(l *Ledger) {
+ l.accts.accountsWriting.Add(1)
+ l.accts.commitRound(numBlocks, 0, 0)
+ l.accts.accountsWriting.Wait()
+ l.reloadLedger()
+ wg.Done()
+ }(l)
+ }
+ wg.Wait()
+
+ newBlock = bookkeeping.MakeBlock(validatedBlock.blk.BlockHeader)
+ bev, err = l.StartEvaluator(newBlock.BlockHeader, 0)
+ require.NoError(b, err)
+ }
+
+ setupDone := time.Now()
+ setupTime := setupDone.Sub(start)
+ b.Logf("BenchmarkBlockEvaluator setup time %s", setupTime.String())
+
+ // test speed of block building
numTxns := 50000
for i := 0; i < numTxns; i++ {
- sender := i % len(addrs)
- receiver := (i + 1) % len(addrs)
- // The following would create more random selection of accounts, and prevent a cache of half of the accounts..
- // iDigest := crypto.Hash([]byte{byte(i), byte(i >> 8), byte(i >> 16), byte(i >> 24)})
- // sender := (uint64(iDigest[0]) + uint64(iDigest[1])*256 + uint64(iDigest[2])*256*256) % uint64(len(addrs))
- // receiver := (uint64(iDigest[4]) + uint64(iDigest[5])*256 + uint64(iDigest[6])*256*256) % uint64(len(addrs))
- txn := transactions.Transaction{
- Type: protocol.PaymentTx,
- Header: transactions.Header{
- Sender: addrs[sender],
- Fee: minFee,
- FirstValid: newBlock.Round(),
- LastValid: newBlock.Round(),
- GenesisHash: genHash,
- },
- PaymentTxnFields: transactions.PaymentTxnFields{
- Receiver: addrs[receiver],
- Amount: basics.MicroAlgos{Raw: 100},
- },
- }
- st := txn.Sign(keys[sender])
- err = bev.Transaction(st, transactions.ApplyData{})
+ stxn := txnSource.Txn(b, addrs, keys, newBlock.Round(), genHash)
+ err = bev.Transaction(stxn, transactions.ApplyData{})
require.NoError(b, err)
}
@@ -815,15 +1013,13 @@ func benchmarkBlockEvaluator(b *testing.B, inMem bool, withCrypto bool) {
blockBuildTime := blockBuildDone.Sub(setupDone)
b.ReportMetric(float64(blockBuildTime)/float64(numTxns), "ns/block_build_tx")
- l.AddValidatedBlock(*validatedBlock, agreement.Certificate{})
+ err = l.AddValidatedBlock(*validatedBlock, agreement.Certificate{})
+ require.NoError(b, err)
avbDone := time.Now()
avbTime := avbDone.Sub(blockBuildDone)
b.ReportMetric(float64(avbTime)/float64(numTxns), "ns/AddValidatedBlock_tx")
- backlogPool := execpool.MakeBacklog(nil, 0, execpool.LowPriority, nil)
- defer backlogPool.Shutdown()
-
// test speed of block validation
// This should be the same as the eval line in ledger.go AddBlock()
// This is pulled out to isolate eval() time from db ops of AddValidatedBlock()
@@ -856,7 +1052,9 @@ func TestCowCompactCert(t *testing.T) {
blocks := make(map[basics.Round]bookkeeping.BlockHeader)
blockErr := make(map[basics.Round]error)
ml := mockLedger{balanceMap: accts0, blocks: blocks, blockErr: blockErr}
- c0 := makeRoundCowState(&ml, bookkeeping.BlockHeader{}, 0, 0)
+ c0 := makeRoundCowState(
+ &ml, bookkeeping.BlockHeader{}, config.Consensus[protocol.ConsensusCurrentVersion],
+ 0, 0)
certType = protocol.CompactCertType(1234) // bad cert type
err := c0.compactCert(certRnd, certType, cert, atRound, validate)
@@ -1040,7 +1238,7 @@ func TestModifiedAssetHoldings(t *testing.T) {
createTxn := txntest.Txn{
Type: "acfg",
Sender: addrs[0],
- Fee: basics.MicroAlgos{Raw: 2000},
+ Fee: 2000,
AssetParams: basics.AssetParams{
Total: 3,
Decimals: 0,
@@ -1054,7 +1252,7 @@ func TestModifiedAssetHoldings(t *testing.T) {
optInTxn := txntest.Txn{
Type: "axfer",
Sender: addrs[1],
- Fee: basics.MicroAlgos{Raw: 2000},
+ Fee: 2000,
XferAsset: assetid,
AssetAmount: 0,
AssetReceiver: addrs[1],
@@ -1086,7 +1284,7 @@ func TestModifiedAssetHoldings(t *testing.T) {
optOutTxn := txntest.Txn{
Type: "axfer",
Sender: addrs[1],
- Fee: basics.MicroAlgos{Raw: 1000},
+ Fee: 1000,
XferAsset: assetid,
AssetReceiver: addrs[0],
AssetCloseTo: addrs[0],
@@ -1095,7 +1293,7 @@ func TestModifiedAssetHoldings(t *testing.T) {
closeTxn := txntest.Txn{
Type: "acfg",
Sender: addrs[0],
- Fee: basics.MicroAlgos{Raw: 1000},
+ Fee: 1000,
ConfigAsset: assetid,
}
@@ -1164,7 +1362,9 @@ func newTestGenesis() (bookkeeping.GenesisBalances, []basics.Address, []*crypto.
Status: basics.NotParticipating,
}
- accts[rewards] = basics.AccountData{MicroAlgos: basics.MicroAlgos{Raw: amount}}
+ accts[rewards] = basics.AccountData{
+ MicroAlgos: basics.MicroAlgos{Raw: amount},
+ }
genBalances := bookkeeping.MakeGenesisBalances(accts, sink, rewards)
@@ -1174,22 +1374,31 @@ func newTestGenesis() (bookkeeping.GenesisBalances, []basics.Address, []*crypto.
// newTestLedger creates a in memory Ledger that is as realistic as
// possible. It has Rewards and FeeSink properly configured.
func newTestLedger(t testing.TB, balances bookkeeping.GenesisBalances) *Ledger {
+ l, _, _ := newTestLedgerImpl(t, balances, true)
+ return l
+}
+
+func newTestLedgerOnDisk(t testing.TB, balances bookkeeping.GenesisBalances) (*Ledger, string, bookkeeping.Block) {
+ return newTestLedgerImpl(t, balances, false)
+}
+
+func newTestLedgerImpl(t testing.TB, balances bookkeeping.GenesisBalances, inMem bool) (*Ledger, string, bookkeeping.Block) {
var genHash crypto.Digest
crypto.RandBytes(genHash[:])
genBlock, err := bookkeeping.MakeGenesisBlock(protocol.ConsensusFuture,
balances, "test", genHash)
-
+ require.False(t, genBlock.FeeSink.IsZero())
+ require.False(t, genBlock.RewardsPool.IsZero())
dbName := fmt.Sprintf("%s.%d", t.Name(), crypto.RandUint64())
cfg := config.GetDefaultLocal()
cfg.Archival = true
- const inMem = true
l, err := OpenLedger(logging.Base(), dbName, inMem, InitState{
Block: genBlock,
Accounts: balances.Balances,
GenesisHash: genHash,
}, cfg)
require.NoError(t, err)
- return l
+ return l, dbName, genBlock
}
// nextBlock begins evaluation of a new block, after ledger creation or endBlock()
@@ -1197,8 +1406,9 @@ func (ledger *Ledger) nextBlock(t testing.TB) *BlockEvaluator {
rnd := ledger.Latest()
hdr, err := ledger.BlockHdr(rnd)
require.NoError(t, err)
- eval, err := startEvaluator(ledger, bookkeeping.MakeBlock(hdr).BlockHeader,
- config.Consensus[hdr.CurrentProtocol], 0, false, true)
+
+ nextHdr := bookkeeping.MakeBlock(hdr).BlockHeader
+ eval, err := ledger.StartEvaluator(nextHdr, 0)
require.NoError(t, err)
return eval
}
@@ -1212,7 +1422,7 @@ func (ledger *Ledger) endBlock(t testing.TB, eval *BlockEvaluator) *ValidatedBlo
return validatedBlock
}
-// lookup gets the current accountdaa for an address
+// lookup gets the current accountdata for an address
func (ledger *Ledger) lookup(t testing.TB, addr basics.Address) basics.AccountData {
rnd := ledger.Latest()
ad, err := ledger.Lookup(rnd, addr)
@@ -1220,7 +1430,35 @@ func (ledger *Ledger) lookup(t testing.TB, addr basics.Address) basics.AccountDa
return ad
}
-func (eval *BlockEvaluator) txn(t testing.TB, txn *txntest.Txn) {
+// micros gets the current microAlgo balance for an address
+func (ledger *Ledger) micros(t testing.TB, addr basics.Address) uint64 {
+ return ledger.lookup(t, addr).MicroAlgos.Raw
+}
+
+// asa gets the current balance and optin status for some asa for an address
+func (ledger *Ledger) asa(t testing.TB, addr basics.Address, asset basics.AssetIndex) (uint64, bool) {
+ if holding, ok := ledger.lookup(t, addr).Assets[asset]; ok {
+ return holding.Amount, true
+ }
+ return 0, false
+}
+
+// asaParams gets the asset params for a given asa index
+func (ledger *Ledger) asaParams(t testing.TB, asset basics.AssetIndex) (basics.AssetParams, error) {
+ creator, ok, err := ledger.GetCreator(basics.CreatableIndex(asset), basics.AssetCreatable)
+ if err != nil {
+ return basics.AssetParams{}, err
+ }
+ if !ok {
+ return basics.AssetParams{}, fmt.Errorf("no asset (%d)", asset)
+ }
+ if params, ok := ledger.lookup(t, creator).AssetParams[asset]; ok {
+ return params, nil
+ }
+ return basics.AssetParams{}, fmt.Errorf("bad lookup (%d)", asset)
+}
+
+func (eval *BlockEvaluator) fillDefaults(txn *txntest.Txn) {
if txn.GenesisHash.IsZero() {
txn.GenesisHash = eval.genesisHash
}
@@ -1228,19 +1466,56 @@ func (eval *BlockEvaluator) txn(t testing.TB, txn *txntest.Txn) {
txn.FirstValid = eval.Round()
}
txn.FillDefaults(eval.proto)
+}
+
+func (eval *BlockEvaluator) txn(t testing.TB, txn *txntest.Txn, problem ...string) {
+ t.Helper()
+ eval.fillDefaults(txn)
stxn := txn.SignedTxn()
err := eval.testTransaction(stxn, eval.state.child(1))
- require.NoError(t, err)
- eval.Transaction(stxn, transactions.ApplyData{})
- require.NoError(t, err)
+ if err != nil {
+ if len(problem) == 1 {
+ require.Contains(t, err.Error(), problem[0])
+ } else {
+ require.NoError(t, err) // Will obviously fail
+ }
+ return
+ }
+ err = eval.Transaction(stxn, transactions.ApplyData{})
+ if err != nil {
+ if len(problem) == 1 {
+ require.Contains(t, err.Error(), problem[0])
+ } else {
+ require.NoError(t, err) // Will obviously fail
+ }
+ return
+ }
+ require.Len(t, problem, 0)
}
func (eval *BlockEvaluator) txns(t testing.TB, txns ...*txntest.Txn) {
+ t.Helper()
for _, txn := range txns {
eval.txn(t, txn)
}
}
+func (eval *BlockEvaluator) txgroup(t testing.TB, txns ...*txntest.Txn) error {
+ t.Helper()
+ for _, txn := range txns {
+ eval.fillDefaults(txn)
+ }
+ txgroup := txntest.SignedTxns(txns...)
+
+ err := eval.TestTransactionGroup(txgroup)
+ if err != nil {
+ return err
+ }
+
+ err = eval.transactionGroup(transactions.WrapSignedTxnsWithAD(txgroup))
+ return err
+}
+
func TestRewardsInAD(t *testing.T) {
partitiontest.PartitionTest(t)
@@ -1345,10 +1620,9 @@ func TestModifiedAppLocalStates(t *testing.T) {
const appid basics.AppIndex = 1
createTxn := txntest.Txn{
- Type: "appl",
- Sender: addrs[0],
- ApprovalProgram: []byte{0x02, 0x20, 0x01, 0x01, 0x22},
- ClearStateProgram: []byte{0x02, 0x20, 0x01, 0x01, 0x22},
+ Type: "appl",
+ Sender: addrs[0],
+ ApprovalProgram: "int 1",
}
optInTxn := txntest.Txn{
@@ -1402,3 +1676,156 @@ func TestModifiedAppLocalStates(t *testing.T) {
assert.False(t, created)
}
}
+
+// Test that overriding the consensus parameters effects the generated apply data.
+func TestCustomProtocolParams(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genesisBalances, addrs, _ := newTestGenesis()
+
+ var genHash crypto.Digest
+ crypto.RandBytes(genHash[:])
+ block, err := bookkeeping.MakeGenesisBlock(protocol.ConsensusV24,
+ genesisBalances, "test", genHash)
+
+ dbName := fmt.Sprintf("%s", t.Name())
+ cfg := config.GetDefaultLocal()
+ cfg.Archival = true
+ l, err := OpenLedger(logging.Base(), dbName, true, InitState{
+ Block: block,
+ Accounts: genesisBalances.Balances,
+ GenesisHash: genHash,
+ }, cfg)
+ require.NoError(t, err)
+ defer l.Close()
+
+ const assetid basics.AssetIndex = 1
+ proto := config.Consensus[protocol.ConsensusV24]
+
+ block = bookkeeping.MakeBlock(block.BlockHeader)
+
+ createTxn := txntest.Txn{
+ Type: "acfg",
+ Sender: addrs[0],
+ GenesisHash: block.GenesisHash(),
+ AssetParams: basics.AssetParams{
+ Total: 200,
+ Decimals: 0,
+ Manager: addrs[0],
+ Reserve: addrs[0],
+ Freeze: addrs[0],
+ Clawback: addrs[0],
+ },
+ }
+ createTxn.FillDefaults(proto)
+ createStib, err := block.BlockHeader.EncodeSignedTxn(
+ createTxn.SignedTxn(), transactions.ApplyData{})
+ require.NoError(t, err)
+
+ optInTxn := txntest.Txn{
+ Type: "axfer",
+ Sender: addrs[1],
+ GenesisHash: block.GenesisHash(),
+ XferAsset: assetid,
+ AssetAmount: 0,
+ AssetReceiver: addrs[1],
+ }
+ optInTxn.FillDefaults(proto)
+ optInStib, err := block.BlockHeader.EncodeSignedTxn(
+ optInTxn.SignedTxn(), transactions.ApplyData{})
+ require.NoError(t, err)
+
+ fundTxn := txntest.Txn{
+ Type: "axfer",
+ Sender: addrs[0],
+ GenesisHash: block.GenesisHash(),
+ XferAsset: assetid,
+ AssetAmount: 100,
+ AssetReceiver: addrs[1],
+ }
+ fundTxn.FillDefaults(proto)
+ fundStib, err := block.BlockHeader.EncodeSignedTxn(
+ fundTxn.SignedTxn(), transactions.ApplyData{})
+ require.NoError(t, err)
+
+ optOutTxn := txntest.Txn{
+ Type: "axfer",
+ Sender: addrs[1],
+ GenesisHash: block.GenesisHash(),
+ XferAsset: assetid,
+ AssetAmount: 30,
+ AssetReceiver: addrs[0],
+ AssetCloseTo: addrs[0],
+ }
+ optOutTxn.FillDefaults(proto)
+ optOutStib, err := block.BlockHeader.EncodeSignedTxn(
+ optOutTxn.SignedTxn(), transactions.ApplyData{})
+ require.NoError(t, err)
+
+ block.Payset = []transactions.SignedTxnInBlock{
+ createStib, optInStib, fundStib, optOutStib,
+ }
+
+ proto.EnableAssetCloseAmount = true
+ _, modifiedTxns, err := Eval(l, &block, proto)
+ require.NoError(t, err)
+
+ require.Equal(t, 4, len(modifiedTxns))
+ assert.Equal(t, uint64(70), modifiedTxns[3].AssetClosingAmount)
+}
+
+// TestAppInsMinBalance checks that accounts with MaxAppsOptedIn are accepted by block evaluator
+// and do not cause any MaximumMinimumBalance problems
+func TestAppInsMinBalance(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ genBalances, addrs, _ := newTestGenesis()
+ l := newTestLedger(t, genBalances)
+ defer l.Close()
+
+ const appid basics.AppIndex = 1
+
+ maxAppsOptedIn := config.Consensus[protocol.ConsensusFuture].MaxAppsOptedIn
+ require.Greater(t, maxAppsOptedIn, 0)
+ maxAppsCreated := config.Consensus[protocol.ConsensusFuture].MaxAppsCreated
+ require.Greater(t, maxAppsCreated, 0)
+ maxLocalSchemaEntries := config.Consensus[protocol.ConsensusFuture].MaxLocalSchemaEntries
+ require.Greater(t, maxLocalSchemaEntries, uint64(0))
+
+ txnsCreate := make([]*txntest.Txn, 0, maxAppsOptedIn)
+ txnsOptIn := make([]*txntest.Txn, 0, maxAppsOptedIn)
+ appsCreated := make(map[basics.Address]int, len(addrs)-1)
+
+ acctIdx := 0
+ for i := 0; i < maxAppsOptedIn; i++ {
+ creator := addrs[acctIdx]
+ createTxn := txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: creator,
+ ApprovalProgram: "int 1",
+ LocalStateSchema: basics.StateSchema{NumByteSlice: maxLocalSchemaEntries},
+ Note: randomNote(),
+ }
+ txnsCreate = append(txnsCreate, &createTxn)
+ count := appsCreated[creator]
+ count++
+ appsCreated[creator] = count
+ if count == maxAppsCreated {
+ acctIdx++
+ }
+
+ optInTxn := txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: addrs[9],
+ ApplicationID: appid + basics.AppIndex(i),
+ OnCompletion: transactions.OptInOC,
+ }
+ txnsOptIn = append(txnsOptIn, &optInTxn)
+ }
+
+ eval := l.nextBlock(t)
+ txns := append(txnsCreate, txnsOptIn...)
+ eval.txns(t, txns...)
+ vb := l.endBlock(t, eval)
+ assert.Len(t, vb.delta.ModifiedAppLocalStates, 50)
+}
diff --git a/ledger/ledger_test.go b/ledger/ledger_test.go
index 432e11848..ba2ac5a39 100644
--- a/ledger/ledger_test.go
+++ b/ledger/ledger_test.go
@@ -866,7 +866,7 @@ int 1
ApplicationCallTxnFields: appcreateFields,
}
- ad := transactions.ApplyData{EvalDelta: basics.EvalDelta{GlobalDelta: basics.StateDelta{
+ ad := transactions.ApplyData{EvalDelta: transactions.EvalDelta{GlobalDelta: basics.StateDelta{
"counter": basics.ValueDelta{Action: basics.SetUintAction, Uint: 1},
}}}
a.NoError(l.appendUnvalidatedTx(t, initAccounts, initSecrets, appcreate, ad))
@@ -891,7 +891,7 @@ int 1
ApplicationCallTxnFields: appcallFields,
}
appcall.ApplicationID = appIdx
- ad = transactions.ApplyData{EvalDelta: basics.EvalDelta{
+ ad = transactions.ApplyData{EvalDelta: transactions.EvalDelta{
GlobalDelta: basics.StateDelta{
"counter": basics.ValueDelta{Action: basics.SetUintAction, Uint: 2},
},
@@ -993,7 +993,7 @@ int 1 // [1]
ApplicationCallTxnFields: appcreateFields,
}
- ad := transactions.ApplyData{EvalDelta: basics.EvalDelta{GlobalDelta: basics.StateDelta{
+ ad := transactions.ApplyData{EvalDelta: transactions.EvalDelta{GlobalDelta: basics.StateDelta{
"key": basics.ValueDelta{Action: basics.SetUintAction, Uint: uint64(value)},
}}}
@@ -1032,7 +1032,7 @@ int 1 // [1]
Header: correctTxHeader,
ApplicationCallTxnFields: appcallFields1,
}
- ad1 := transactions.ApplyData{EvalDelta: basics.EvalDelta{GlobalDelta: basics.StateDelta{
+ ad1 := transactions.ApplyData{EvalDelta: transactions.EvalDelta{GlobalDelta: basics.StateDelta{
"key": basics.ValueDelta{Action: basics.SetUintAction, Uint: uint64(base + value1)},
}}}
@@ -1048,7 +1048,7 @@ int 1 // [1]
Header: correctTxHeader,
ApplicationCallTxnFields: appcallFields2,
}
- ad2 := transactions.ApplyData{EvalDelta: basics.EvalDelta{GlobalDelta: basics.StateDelta{
+ ad2 := transactions.ApplyData{EvalDelta: transactions.EvalDelta{GlobalDelta: basics.StateDelta{
"key": basics.ValueDelta{Action: basics.SetUintAction, Uint: uint64(base + value1 + value2)},
}}}
diff --git a/ledger/perf_test.go b/ledger/perf_test.go
index 908a90f0a..c1e520fef 100644
--- a/ledger/perf_test.go
+++ b/ledger/perf_test.go
@@ -36,8 +36,11 @@ import (
)
func genesis(naccts int) (InitState, []basics.Address, []*crypto.SignatureSecrets) {
+ return genesisWithProto(naccts, protocol.ConsensusCurrentVersion)
+}
+func genesisWithProto(naccts int, proto protocol.ConsensusVersion) (InitState, []basics.Address, []*crypto.SignatureSecrets) {
blk := bookkeeping.Block{}
- blk.CurrentProtocol = protocol.ConsensusCurrentVersion
+ blk.CurrentProtocol = proto
blk.BlockHeader.GenesisID = "test"
blk.FeeSink = testSinkAddr
blk.RewardsPool = testPoolAddr
diff --git a/ledger/persistedaccts_list_test.go b/ledger/persistedaccts_list_test.go
index 14860d27d..95b8b026d 100644
--- a/ledger/persistedaccts_list_test.go
+++ b/ledger/persistedaccts_list_test.go
@@ -17,8 +17,10 @@
package ledger
import (
- "github.com/algorand/go-algorand/data/basics"
"testing"
+
+ "github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func checkLen(list *persistedAccountDataList) int {
@@ -36,6 +38,7 @@ func countListSize(head *persistedAccountDataListNode) (counter int) {
}
func TestRemoveFromList(t *testing.T) {
+ partitiontest.PartitionTest(t)
l := newPersistedAccountList()
e1 := l.pushFront(&persistedAccountData{addr: basics.Address{1}})
e2 := l.pushFront(&persistedAccountData{addr: basics.Address{2}})
@@ -49,6 +52,7 @@ func TestRemoveFromList(t *testing.T) {
}
func TestAddingNewNodeWithAllocatedFreeList(t *testing.T) {
+ partitiontest.PartitionTest(t)
l := newPersistedAccountList().allocateFreeNodes(10)
checkListPointers(t, l, []*persistedAccountDataListNode{})
if countListSize(l.freeList) != 10 {
@@ -122,6 +126,7 @@ func pointerInspection(t *testing.T, es []*persistedAccountDataListNode, root *p
}
func TestMultielementListPositioning(t *testing.T) {
+ partitiontest.PartitionTest(t)
l := newPersistedAccountList()
checkListPointers(t, l, []*persistedAccountDataListNode{})
// test elements
@@ -180,6 +185,7 @@ func TestMultielementListPositioning(t *testing.T) {
}
func TestSingleElementListPositioning(t *testing.T) {
+ partitiontest.PartitionTest(t)
l := newPersistedAccountList()
checkListPointers(t, l, []*persistedAccountDataListNode{})
e := l.pushFront(&persistedAccountData{addr: basics.Address{1}})
@@ -191,6 +197,7 @@ func TestSingleElementListPositioning(t *testing.T) {
}
func TestRemovedNodeShouldBeMovedToFreeList(t *testing.T) {
+ partitiontest.PartitionTest(t)
l := newPersistedAccountList()
e1 := l.pushFront(&persistedAccountData{addr: basics.Address{1}})
e2 := l.pushFront(&persistedAccountData{addr: basics.Address{2}})
diff --git a/ledger/txtail_test.go b/ledger/txtail_test.go
index 97d5a5cbb..9d5d1c2bf 100644
--- a/ledger/txtail_test.go
+++ b/ledger/txtail_test.go
@@ -147,6 +147,7 @@ func makeTxTailTestTransaction(r basics.Round, txnIdx int) (txn transactions.Sig
}
func TestTxTailLoadFromDisk(t *testing.T) {
+ partitiontest.PartitionTest(t)
var ledger txTailTestLedger
txtail := txTail{}
diff --git a/libgoal/libgoal.go b/libgoal/libgoal.go
index 3193921dd..524ffc293 100644
--- a/libgoal/libgoal.go
+++ b/libgoal/libgoal.go
@@ -881,6 +881,16 @@ func (c *Client) GetPendingTransactions(maxTxns uint64) (resp v1.PendingTransact
return
}
+// GetPendingTransactionsByAddress gets a snapshot of current pending transactions on the node for the given address.
+// If maxTxns = 0, fetches as many transactions as possible.
+func (c *Client) GetPendingTransactionsByAddress(addr string, maxTxns uint64) (resp v1.PendingTransactions, err error) {
+ algod, err := c.ensureAlgodClient()
+ if err == nil {
+ resp, err = algod.PendingTransactionsByAddr(addr, maxTxns)
+ }
+ return
+}
+
// ExportKey exports the private key of the passed account, assuming it's available
func (c *Client) ExportKey(walletHandle []byte, password, account string) (resp kmdapi.APIV1POSTKeyExportResponse, err error) {
kmd, err := c.ensureKmdClient()
diff --git a/libgoal/libgoal_test.go b/libgoal/libgoal_test.go
index 53274e0db..5d0959fbe 100644
--- a/libgoal/libgoal_test.go
+++ b/libgoal/libgoal_test.go
@@ -19,10 +19,12 @@ package libgoal
import (
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestValidRounds(t *testing.T) {
+ partitiontest.PartitionTest(t)
t.Parallel()
a := require.New(t)
diff --git a/logging/cyclicWriter_test.go b/logging/cyclicWriter_test.go
index 9a33d5337..e3ea89530 100644
--- a/logging/cyclicWriter_test.go
+++ b/logging/cyclicWriter_test.go
@@ -21,10 +21,12 @@ import (
"os"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestCyclicWrite(t *testing.T) {
+ partitiontest.PartitionTest(t)
liveFileName := "live.test"
archiveFileName := "archive.test"
defer os.Remove(liveFileName)
diff --git a/logging/logBuffer_test.go b/logging/logBuffer_test.go
index 6a9b8fe84..9c0fba8b9 100644
--- a/logging/logBuffer_test.go
+++ b/logging/logBuffer_test.go
@@ -22,6 +22,7 @@ import (
"io"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -46,11 +47,13 @@ func createFixture(maxDepth uint) logBufferTestFixture {
}
func TestLogBufferEmpty(t *testing.T) {
+ partitiontest.PartitionTest(t)
fixture := createFixture(10)
require.Equal(t, "", fixture.lb.string())
}
func TestLogBufferString(t *testing.T) {
+ partitiontest.PartitionTest(t)
fixture := createFixture(10)
lb := fixture.lb
w := fixture.w
@@ -62,6 +65,7 @@ func TestLogBufferString(t *testing.T) {
}
func TestLogBufferStrings(t *testing.T) {
+ partitiontest.PartitionTest(t)
fixture := createFixture(10)
w := fixture.w
fmt.Fprint(w, testString1)
@@ -75,6 +79,7 @@ func TestLogBufferStrings(t *testing.T) {
}
func TestLogBufferZeroMaxDepth(t *testing.T) {
+ partitiontest.PartitionTest(t)
fixture := createFixture(0)
w := fixture.w
fmt.Fprint(w, testString1)
@@ -86,6 +91,7 @@ func TestLogBufferZeroMaxDepth(t *testing.T) {
}
func TestLogBufferMaxDepth(t *testing.T) {
+ partitiontest.PartitionTest(t)
fixture := createFixture(2)
w := fixture.w
fmt.Fprint(w, testString1)
@@ -101,6 +107,7 @@ func TestLogBufferMaxDepth(t *testing.T) {
}
func TestLogBufferTrim(t *testing.T) {
+ partitiontest.PartitionTest(t)
maxDepth := uint(9)
entryCount := maxDepth + 2
lb := createLogBuffer(maxDepth)
diff --git a/logging/log_test.go b/logging/log_test.go
index c4142fb01..363791be1 100644
--- a/logging/log_test.go
+++ b/logging/log_test.go
@@ -21,6 +21,7 @@ import (
"encoding/json"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
@@ -42,6 +43,7 @@ func isJSON(s string) bool {
}
func TestFileOutputNewLogger(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
// Create a buffer (mimics a file) for the output
@@ -59,6 +61,7 @@ func TestFileOutputNewLogger(t *testing.T) {
}
func TestSetLevelNewLogger(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
//Create a buffer (mimics a file) for the output
@@ -79,6 +82,7 @@ func TestSetLevelNewLogger(t *testing.T) {
}
func TestWithFieldsNewLogger(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
// Create a buffer (mimics a file) for the output
@@ -93,6 +97,7 @@ func TestWithFieldsNewLogger(t *testing.T) {
}
func TestSetJSONFormatter(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
// Create a buffer (mimics a file) for the output
diff --git a/logging/telemetryConfig_test.go b/logging/telemetryConfig_test.go
index 6e040d146..28cfef613 100644
--- a/logging/telemetryConfig_test.go
+++ b/logging/telemetryConfig_test.go
@@ -23,10 +23,12 @@ import (
"path/filepath"
"testing"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func Test_loadTelemetryConfig(t *testing.T) {
+ partitiontest.PartitionTest(t)
sample := TelemetryConfig{
Enable: true,
@@ -58,6 +60,7 @@ func Test_loadTelemetryConfig(t *testing.T) {
}
func Test_CreateSaveLoadTelemetryConfig(t *testing.T) {
+ partitiontest.PartitionTest(t)
testDir := os.Getenv("TESTDIR")
@@ -92,6 +95,7 @@ func Test_CreateSaveLoadTelemetryConfig(t *testing.T) {
}
func Test_SanitizeTelemetryString(t *testing.T) {
+ partitiontest.PartitionTest(t)
type testcase struct {
input string
expected string
@@ -110,6 +114,7 @@ func Test_SanitizeTelemetryString(t *testing.T) {
}
func TestLoadTelemetryConfig(t *testing.T) {
+ partitiontest.PartitionTest(t)
testLoggingConfigFileName := "../test/testdata/configs/logging/logging.config.test1"
tc, err := loadTelemetryConfig(testLoggingConfigFileName)
require.NoError(t, err)
@@ -122,7 +127,7 @@ func TestLoadTelemetryConfig(t *testing.T) {
}
func TestLoadTelemetryConfigBlankUsernamePassword(t *testing.T) {
-
+ partitiontest.PartitionTest(t)
testLoggingConfigFileName := "../test/testdata/configs/logging/logging.config.test2"
tc, err := loadTelemetryConfig(testLoggingConfigFileName)
require.NoError(t, err)
@@ -133,6 +138,7 @@ func TestLoadTelemetryConfigBlankUsernamePassword(t *testing.T) {
}
func TestSaveTelemetryConfigBlankUsernamePassword(t *testing.T) {
+ partitiontest.PartitionTest(t)
testDir := os.Getenv("TESTDIR")
diff --git a/logging/telemetry_test.go b/logging/telemetry_test.go
index fce2e6d9e..039ddf4f0 100644
--- a/logging/telemetry_test.go
+++ b/logging/telemetry_test.go
@@ -29,6 +29,7 @@ import (
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/logging/telemetryspec"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
type mockTelemetryHook struct {
@@ -133,6 +134,7 @@ func (h *mockTelemetryHook) entries() []string {
}
func TestCreateHookError(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
cfg := createTelemetryConfig()
@@ -147,6 +149,7 @@ func TestCreateHookError(t *testing.T) {
}
func TestTelemetryHook(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
f := makeTelemetryTestFixture(logrus.InfoLevel)
@@ -169,6 +172,7 @@ func TestTelemetryHook(t *testing.T) {
}
func TestNilMetrics(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
f := makeTelemetryTestFixture(logrus.InfoLevel)
@@ -178,6 +182,7 @@ func TestNilMetrics(t *testing.T) {
}
func TestMultipleOperationStop(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
f := makeTelemetryTestFixture(logrus.InfoLevel)
@@ -194,6 +199,7 @@ func TestMultipleOperationStop(t *testing.T) {
}
func TestDetails(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
f := makeTelemetryTestFixture(logrus.InfoLevel)
@@ -216,6 +222,7 @@ func (m testMetrics) Identifier() telemetryspec.Metric {
}
func TestMetrics(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
f := makeTelemetryTestFixture(logrus.InfoLevel)
@@ -231,6 +238,7 @@ func TestMetrics(t *testing.T) {
}
func TestLogHook(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
f := makeTelemetryTestFixture(logrus.InfoLevel)
@@ -248,6 +256,7 @@ func TestLogHook(t *testing.T) {
}
func TestLogLevels(t *testing.T) {
+ partitiontest.PartitionTest(t)
runLogLevelsTest(t, logrus.DebugLevel, 7)
runLogLevelsTest(t, logrus.InfoLevel, 6)
runLogLevelsTest(t, logrus.WarnLevel, 5)
@@ -281,6 +290,7 @@ func runLogLevelsTest(t *testing.T, minLevel logrus.Level, expected int) {
}
func TestLogHistoryLevels(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
cfg := createTelemetryConfig()
cfg.MinLogLevel = logrus.DebugLevel
@@ -320,6 +330,7 @@ func TestLogHistoryLevels(t *testing.T) {
}
func TestReadTelemetryConfigOrDefaultNoDataDir(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
tempDir := os.TempDir()
originalGlobalConfigFileRoot, _ := config.GetGlobalConfigFileRoot()
diff --git a/logging/telemetryhook_test.go b/logging/telemetryhook_test.go
index c60275f95..083df03c5 100644
--- a/logging/telemetryhook_test.go
+++ b/logging/telemetryhook_test.go
@@ -26,9 +26,11 @@ import (
"github.com/stretchr/testify/require"
"github.com/algorand/go-algorand/config"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func TestTelemetryConfig(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
cfg := createTelemetryConfig()
@@ -41,6 +43,7 @@ func TestTelemetryConfig(t *testing.T) {
}
func TestLoadDefaultConfig(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
configDir, err := ioutil.TempDir("", "testdir")
@@ -64,6 +67,7 @@ func isDefault(cfg TelemetryConfig) bool {
}
func TestLoggingConfigDataDirFirst(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
globalConfigRoot, err := ioutil.TempDir("", "globalConfigRoot")
@@ -108,6 +112,7 @@ func TestLoggingConfigDataDirFirst(t *testing.T) {
}
func TestLoggingConfigGlobalSecond(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
globalConfigRoot, err := ioutil.TempDir("", "globalConfigRoot")
@@ -139,6 +144,7 @@ func TestLoggingConfigGlobalSecond(t *testing.T) {
}
func TestSaveLoadConfig(t *testing.T) {
+ partitiontest.PartitionTest(t)
a := require.New(t)
globalConfigRoot, err := ioutil.TempDir("", "globalConfigRoot")
@@ -170,6 +176,7 @@ func TestSaveLoadConfig(t *testing.T) {
}
func TestAsyncTelemetryHook_CloseDrop(t *testing.T) {
+ partitiontest.PartitionTest(t)
const entryCount = 100
filling := make(chan struct{})
@@ -195,6 +202,7 @@ func TestAsyncTelemetryHook_CloseDrop(t *testing.T) {
}
func TestAsyncTelemetryHook_QueueDepth(t *testing.T) {
+ partitiontest.PartitionTest(t)
const entryCount = 100
const maxDepth = 10
diff --git a/logging/telemetryspec/metric_test.go b/logging/telemetryspec/metric_test.go
index 3f1aceef5..0e096e72b 100644
--- a/logging/telemetryspec/metric_test.go
+++ b/logging/telemetryspec/metric_test.go
@@ -21,10 +21,12 @@ import (
"testing"
"time"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
func TestTransactionProcessingTimeDistibutionFormatting(t *testing.T) {
+ partitiontest.PartitionTest(t)
var processingTime transactionProcessingTimeDistibution
processingTime.AddTransaction(50000 * time.Nanosecond)
processingTime.AddTransaction(80000 * time.Nanosecond)
diff --git a/netdeploy/remote/bootstrappedNetwork.go b/netdeploy/remote/bootstrappedNetwork.go
index 374d85780..9cdf934fe 100644
--- a/netdeploy/remote/bootstrappedNetwork.go
+++ b/netdeploy/remote/bootstrappedNetwork.go
@@ -23,12 +23,13 @@ import (
//BootstrappedNetwork contains the specs for generating db files
type BootstrappedNetwork struct {
- NumRounds uint64 `json:"numRounds"`
- RoundTransactionsCount uint64 `json:"roundTransactionsCount"`
- GeneratedAccountsCount uint64 `json:"generatedAccountsCount"`
- GeneratedAssetsCount uint64 `json:"generatedAssetsCount"`
- GeneratedApplicationCount uint64 `json:"generatedApplicationCount"`
- SourceWalletName string `json:"sourceWalletName"`
+ NumRounds uint64 `json:"numRounds"`
+ RoundTransactionsCount uint64 `json:"roundTransactionsCount"`
+ GeneratedAccountsCount uint64 `json:"generatedAccountsCount"`
+ GeneratedAssetsCount uint64 `json:"generatedAssetsCount"`
+ GeneratedApplicationCount uint64 `json:"generatedApplicationCount"`
+ SourceWalletName string `json:"sourceWalletName"`
+ BalanceRange []int64 `json:"acctBalanceRange"`
}
// LoadBootstrappedData loads a bootstrappedFile structure from a json file
diff --git a/netdeploy/remote/deployedNetwork.go b/netdeploy/remote/deployedNetwork.go
index 331a101c0..36b4618f5 100644
--- a/netdeploy/remote/deployedNetwork.go
+++ b/netdeploy/remote/deployedNetwork.go
@@ -414,7 +414,11 @@ func (cfg DeployedNetwork) GenerateDatabaseFiles(fileCfgs BootstrappedNetwork, g
}
//fund src account with enough funding
- bootstrappedNet.fundPerAccount = basics.MicroAlgos{Raw: uint64(bootstrappedNet.nAssets) * params.MinBalance * 2}
+ rand.Seed(time.Now().UnixNano())
+ min := fileCfgs.BalanceRange[0]
+ max := fileCfgs.BalanceRange[1]
+ bal := rand.Int63n(max-min) + min
+ bootstrappedNet.fundPerAccount = basics.MicroAlgos{Raw: uint64(bal)}
totalFunds := accounts[src].MicroAlgos.Raw + bootstrappedNet.fundPerAccount.Raw*bootstrappedNet.nAccounts + bootstrappedNet.roundTxnCnt*fileCfgs.NumRounds
accounts[src] = basics.MakeAccountData(basics.Online, basics.MicroAlgos{Raw: totalFunds})
diff --git a/network/wsNetwork.go b/network/wsNetwork.go
index 0a0006531..ace79c5b0 100644
--- a/network/wsNetwork.go
+++ b/network/wsNetwork.go
@@ -1913,6 +1913,8 @@ var errBcastQFull = errors.New("broadcast queue full")
var errURLNoHost = errors.New("could not parse a host from url")
+var errURLColonHost = errors.New("host name starts with a colon")
+
// HostColonPortPattern matches "^[-a-zA-Z0-9.]+:\\d+$" e.g. "foo.com.:1234"
var HostColonPortPattern = regexp.MustCompile("^[-a-zA-Z0-9.]+:\\d+$")
@@ -1937,6 +1939,11 @@ func ParseHostOrURL(addr string) (*url.URL, error) {
// This turns "[::]:4601" into "http://[::]:4601" which url.Parse can do
parsed, e2 := url.Parse("http://" + addr)
if e2 == nil {
+ // https://datatracker.ietf.org/doc/html/rfc1123#section-2
+ // first character is relaxed to allow either a letter or a digit
+ if parsed.Host[0] == ':' && (len(parsed.Host) < 2 || parsed.Host[1] != ':') {
+ return nil, errURLColonHost
+ }
return parsed, nil
}
return parsed, err /* return original err, not our prefix altered try */
diff --git a/network/wsNetwork_test.go b/network/wsNetwork_test.go
index 55f1e33a5..d1d719b36 100644
--- a/network/wsNetwork_test.go
+++ b/network/wsNetwork_test.go
@@ -2053,6 +2053,7 @@ type urlCase struct {
}
func TestParseHostOrURL(t *testing.T) {
+ partitiontest.PartitionTest(t)
urlTestCases := []urlCase{
{"localhost:123", url.URL{Scheme: "http", Host: "localhost:123"}},
{"http://localhost:123", url.URL{Scheme: "http", Host: "localhost:123"}},
@@ -2067,6 +2068,7 @@ func TestParseHostOrURL(t *testing.T) {
{"1.2.3.4:123", url.URL{Scheme: "http", Host: "1.2.3.4:123"}},
{"[::]:123", url.URL{Scheme: "http", Host: "[::]:123"}},
{"r2-devnet.devnet.algodev.network:4560", url.URL{Scheme: "http", Host: "r2-devnet.devnet.algodev.network:4560"}},
+ {"::11.22.33.44:123", url.URL{Scheme: "http", Host: "::11.22.33.44:123"}},
}
badUrls := []string{
"justahost",
@@ -2078,6 +2080,15 @@ func TestParseHostOrURL(t *testing.T) {
"//localhost:WAT",
"://badaddress", // See rpcs/blockService_test.go TestRedirectFallbackEndpoints
"://localhost:1234",
+ ":xxx",
+ ":xxx:1234",
+ "::11.22.33.44",
+ ":a:1",
+ ":a:",
+ ":1",
+ ":a",
+ ":",
+ "",
}
for _, tc := range urlTestCases {
t.Run(tc.text, func(t *testing.T) {
diff --git a/protocol/codec_tester.go b/protocol/codec_tester.go
index 883b3028f..9fcbf7c35 100644
--- a/protocol/codec_tester.go
+++ b/protocol/codec_tester.go
@@ -203,6 +203,14 @@ func randomizeValue(v reflect.Value, datapath string, tag string) error {
return nil
}
+ /* Consider cutting off recursive structures by stopping at some datapath depth.
+
+ if len(datapath) > 200 {
+ // Cut off recursive structures
+ return nil
+ }
+ */
+
switch v.Kind() {
case reflect.Uint, reflect.Uintptr, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
v.SetUint(rand.Uint64())
diff --git a/protocol/consensus.go b/protocol/consensus.go
index 47e6148eb..3af634534 100644
--- a/protocol/consensus.go
+++ b/protocol/consensus.go
@@ -158,6 +158,12 @@ const ConsensusV29 = ConsensusVersion(
"https://github.com/algorandfoundation/specs/tree/abc54f79f9ad679d2d22f0fb9909fb005c16f8a1",
)
+// ConsensusV30 introduces AVM 1.0 and TEAL 5, increases the app opt in limit to 50,
+// and allows costs to be pooled in grouped stateful transactions.
+const ConsensusV30 = ConsensusVersion(
+ "https://github.com/algorandfoundation/specs/tree/bc36005dbd776e6d1eaf0c560619bb183215645c",
+)
+
// ConsensusFuture is a protocol that should not appear in any production
// network, but is used to test features before they are released.
const ConsensusFuture = ConsensusVersion(
@@ -170,7 +176,7 @@ const ConsensusFuture = ConsensusVersion(
// ConsensusCurrentVersion is the latest version and should be used
// when a specific version is not provided.
-const ConsensusCurrentVersion = ConsensusV29
+const ConsensusCurrentVersion = ConsensusV30
// Error is used to indicate that an unsupported protocol has been detected.
type Error ConsensusVersion
diff --git a/protocol/hash.go b/protocol/hash.go
index 1f70fc683..846b03c27 100644
--- a/protocol/hash.go
+++ b/protocol/hash.go
@@ -20,8 +20,10 @@ package protocol
// This ensures, for example, the hash of a transaction will never collide with the hash of a vote
type HashID string
-// Hash IDs for specific object types, in lexicographic order to avoid dups.
+// Hash IDs for specific object types, in lexicographic order.
+// Hash IDs must be PREFIX-FREE (no hash ID is a prefix of another).
const (
+ AppIndex HashID = "appID"
AuctionBid HashID = "aB"
AuctionDeposit HashID = "aD"
AuctionOutcomes HashID = "aO"
diff --git a/protocol/tags.go b/protocol/tags.go
index 7f448a762..0cab25628 100644
--- a/protocol/tags.go
+++ b/protocol/tags.go
@@ -23,6 +23,7 @@ type Tag string
// Tags, in lexicographic sort order of tag values to avoid duplicates.
// These tags must not contain a comma character because lists of tags
// are encoded using a comma separator (see network/msgOfInterest.go).
+// The tags must be 2 bytes long.
const (
UnknownMsgTag Tag = "??"
AgreementVoteTag Tag = "AV"
diff --git a/rpcs/blockService.go b/rpcs/blockService.go
index c5b3668d7..2df26223c 100644
--- a/rpcs/blockService.go
+++ b/rpcs/blockService.go
@@ -252,7 +252,7 @@ func (bs *BlockService) listenForCatchupReq(reqs <-chan network.IncomingMessage,
const noRoundNumberErrMsg = "can't find the round number"
const noDataTypeErrMsg = "can't find the data-type"
const roundNumberParseErrMsg = "unable to parse round number"
-const blockNotAvailabeErrMsg = "requested block is not available"
+const blockNotAvailableErrMsg = "requested block is not available"
const datatypeUnsupportedErrMsg = "requested data type is unsupported"
// a blocking function for handling a catchup request
@@ -360,7 +360,7 @@ func topicBlockBytes(log logging.Logger, dataLedger *data.Ledger, round basics.R
log.Infof("BlockService topicBlockBytes: %s", err)
}
return network.Topics{
- network.MakeTopic(network.ErrorKey, []byte(blockNotAvailabeErrMsg))}
+ network.MakeTopic(network.ErrorKey, []byte(blockNotAvailableErrMsg))}
}
switch requestType {
case BlockAndCertValue:
diff --git a/rpcs/txSyncer_test.go b/rpcs/txSyncer_test.go
index c141eb7bb..9b89fda1b 100644
--- a/rpcs/txSyncer_test.go
+++ b/rpcs/txSyncer_test.go
@@ -276,15 +276,22 @@ func TestNoClientsSync(t *testing.T) {
func TestStartAndStop(t *testing.T) {
partitiontest.PartitionTest(t)
- t.Skip("TODO: replace this test in new client paradigm")
- pool := makeMockPendingTxAggregate(3)
+ pool := makeMockPendingTxAggregate(1)
+ nodeA := basicRPCNode{}
+ txservice := makeTxService(pool, "test genesisID", config.GetDefaultLocal().TxPoolSize, config.GetDefaultLocal().TxSyncServeResponseSize)
+ nodeA.RegisterHTTPHandler(TxServiceHTTPPath, txservice)
+ nodeA.start()
+ nodeAURL := nodeA.rootURL()
+
runner := mockRunner{failWithNil: false, failWithError: false, txgroups: pool.PendingTxGroups()[len(pool.PendingTxGroups())-1:], done: make(chan *rpc.Call)}
- client := mockRPCClient{client: &runner, log: logging.TestingLog(t)}
+ client := mockRPCClient{client: &runner, rootURL: nodeAURL, log: logging.TestingLog(t)}
clientAgg := mockClientAggregator{peers: []network.Peer{&client}}
handler := mockHandler{}
+
+ syncerPool := makeMockPendingTxAggregate(0)
syncInterval := time.Second
syncTimeout := time.Second
- syncer := MakeTxSyncer(pool, &clientAgg, &handler, syncInterval, syncTimeout, config.GetDefaultLocal().TxSyncServeResponseSize)
+ syncer := MakeTxSyncer(syncerPool, &clientAgg, &handler, syncInterval, syncTimeout, config.GetDefaultLocal().TxSyncServeResponseSize)
syncer.log = logging.TestingLog(t)
// ensure that syncing doesn't start
@@ -295,7 +302,12 @@ func TestStartAndStop(t *testing.T) {
// signal that syncing can start
close(canStart)
- time.Sleep(2 * time.Second)
+ for x := 0; x < 20; x++ {
+ time.Sleep(100 * time.Millisecond)
+ if atomic.LoadInt32(&handler.messageCounter) != 0 {
+ break
+ }
+ }
require.Equal(t, int32(1), atomic.LoadInt32(&handler.messageCounter))
// stop syncing and ensure it doesn't happen
diff --git a/scripts/buildtools/check_tests.py b/scripts/buildtools/check_tests.py
new file mode 100755
index 000000000..d34bb7038
--- /dev/null
+++ b/scripts/buildtools/check_tests.py
@@ -0,0 +1,116 @@
+print("===== STARTED RUNNING check_tests.py =====\n")
+
+import json
+import sys
+import argparse
+
+# Arguments parsing / help menu
+parser = argparse.ArgumentParser(description='Check test results for intentionally and unintentionally skipped tests, as well as tests that ran multiple times.')
+parser.add_argument('tests_results_filepath', metavar='RESULTS_FILE',
+ help='json format test results file path (e.g. /tmp/results/testresults.json)')
+args = parser.parse_args()
+
+# Go through the given file one json object at a time, and record into a dict
+AllTestResults = {}
+with open(args.tests_results_filepath) as f:
+ for jsonObj in f:
+ testDict = json.loads(jsonObj)
+ if 'Test' not in testDict:
+ continue
+
+ fullTestName = testDict['Package'] + ' ' + testDict['Test']
+ if fullTestName not in AllTestResults:
+ AllTestResults[fullTestName] = {}
+ AllTestResults[fullTestName]['ran'] = 0
+ AllTestResults[fullTestName]['last_output'] = ''
+ AllTestResults[fullTestName]['skipped_intentionally'] = False
+ AllTestResults[fullTestName]['skipped_reason'] = ''
+
+ # actions can be: output, run, skip, pass
+ if 'pass' in testDict["Action"]:
+ AllTestResults[fullTestName]['ran'] += 1
+ elif 'output' in testDict["Action"]:
+ if '--- SKIP' in testDict['Output'] and 'due to partitioning' not in AllTestResults[fullTestName]['last_output']:
+ AllTestResults[fullTestName]['skipped_intentionally'] = True
+ if '=== RUN' in AllTestResults[fullTestName]['last_output']:
+ AllTestResults[fullTestName]['skipped_reason'] = 'No reason given. PLEASE CHECK!!!'
+ else:
+ AllTestResults[fullTestName]['skipped_reason'] = AllTestResults[fullTestName]['last_output'].strip()
+
+ AllTestResults[fullTestName]['last_output'] = testDict['Output']
+
+
+
+f.close()
+
+# === Calculate results ===
+
+# Sort and print messages with colored prefix
+RED_TEXT_COLOR = "\033[0;31m"
+GREEN_TEXT_COLOR = "\033[0;32m"
+YELLOW_TEXT_COLOR = "\033[0;33m"
+NORMAL_TEXT_COLOR = "\033[0;0m"
+def printColor(message, color=NORMAL_TEXT_COLOR):
+ print(f"{color}{message}{NORMAL_TEXT_COLOR}")
+
+# Record error message for sys.exit(errorMessage)
+errorMessage = ''
+
+# Check for tests that ran multiple times
+printColor("=========== RAN MULTIPLE TIMES ===================", YELLOW_TEXT_COLOR)
+listOfMultipleRuns = []
+for x in AllTestResults:
+ if AllTestResults[x]['ran'] > 1:
+ listOfMultipleRuns.append(x + " -- ran " + str(AllTestResults[x]['ran']) + " times. (Can probably be fixed by adding \"partitiontest.PartitionTest()\")")
+countMultipleRuns = len(listOfMultipleRuns)
+if countMultipleRuns:
+ printColor(f"The above {countMultipleRuns} tests ran multiple times:", RED_TEXT_COLOR)
+ [printColor(f"{x}", RED_TEXT_COLOR) for x in sorted(listOfMultipleRuns)]
+ printColor(f"The above {countMultipleRuns} tests ran multiple times:", RED_TEXT_COLOR)
+else:
+ printColor("All tests that ran, ran only once ... OK", GREEN_TEXT_COLOR)
+printColor("==================================================\n", YELLOW_TEXT_COLOR)
+
+# Check intentionally skipped tests
+printColor("============= INTENTIONALLY SKIPPED ==============", YELLOW_TEXT_COLOR)
+listOfSkippedIntentionally = []
+[listOfSkippedIntentionally.append(x) for x in AllTestResults if (AllTestResults[x]['ran'] == 0 and AllTestResults[x]['skipped_intentionally'] == True )]
+countSkippedIntentionally = len(listOfSkippedIntentionally)
+if countSkippedIntentionally:
+ printColor(f"The following {countSkippedIntentionally} tests were skipped intentionally:", YELLOW_TEXT_COLOR)
+ [printColor(f"{x} -- skipped intentionally (please double check) Reason: {AllTestResults[x]['skipped_reason']}", YELLOW_TEXT_COLOR) for x in sorted(listOfSkippedIntentionally)]
+ printColor(f"The above {countSkippedIntentionally} tests were skipped intentionally:", YELLOW_TEXT_COLOR)
+else:
+ printColor("No tests skipped intentionally.", GREEN_TEXT_COLOR)
+printColor("==================================================\n", YELLOW_TEXT_COLOR)
+
+# Check unintentionally skipped tests (due to partition)
+printColor("============= UNINTENTIONALLY SKIPPED ============", YELLOW_TEXT_COLOR)
+listOfSkippedUnintentionally = []
+[listOfSkippedUnintentionally.append(x) for x in AllTestResults if (AllTestResults[x]['ran'] == 0 and AllTestResults[x]['skipped_intentionally'] == False)]
+countSkippedUnintentionally = len(listOfSkippedUnintentionally)
+if countSkippedUnintentionally:
+ printColor(f"{countSkippedUnintentionally} tests were skipped unintentionally", RED_TEXT_COLOR)
+ [printColor(f"{x} -- skipped unintentionally. (due to partitiontest.PartitionTest() being called twice?)", RED_TEXT_COLOR) for x in sorted(listOfSkippedUnintentionally)]
+ printColor(f"{countSkippedUnintentionally} tests were skipped unintentionally.", RED_TEXT_COLOR)
+ errorMessage += f"{countSkippedUnintentionally} tests were skipped unintentionally";
+else:
+ printColor("No tests skipped unintentionally (due to partitioning).", GREEN_TEXT_COLOR)
+printColor("==================================================\n", YELLOW_TEXT_COLOR)
+
+# === Summary ===
+printColor("==================== SUMMARY =====================", YELLOW_TEXT_COLOR)
+countUniqueTests = len(AllTestResults)
+countTotalSkipped = countSkippedIntentionally + countSkippedUnintentionally
+countRanTests = sum(1 for x in AllTestResults if AllTestResults[x]['ran'] > 0)
+
+printColor(f"Saw {countUniqueTests} unique tests", GREEN_TEXT_COLOR if countUniqueTests != 0 else RED_TEXT_COLOR)
+printColor(f"{countTotalSkipped} total skipped tests", GREEN_TEXT_COLOR if countTotalSkipped == 0 else YELLOW_TEXT_COLOR)
+printColor(f"{countRanTests} tests ran", GREEN_TEXT_COLOR if countRanTests != 0 else RED_TEXT_COLOR)
+printColor(f"{countSkippedIntentionally} tests were skipped intentionally. (They were probably disabled, please double check)", GREEN_TEXT_COLOR if countSkippedIntentionally == 0 else YELLOW_TEXT_COLOR)
+printColor(f"{countSkippedUnintentionally} tests were skipped unintentionally. (Due to partitioning multiple times? maybe due to partitiontest.PartitionTest() being called twice?)", GREEN_TEXT_COLOR if countSkippedUnintentionally == 0 else RED_TEXT_COLOR)
+printColor(f"{countMultipleRuns} tests ran multiple times. (Can probably be fixed by adding \"partitiontest.PartitionTest()\")", GREEN_TEXT_COLOR if countMultipleRuns == 0 else RED_TEXT_COLOR)
+printColor("==================================================\n", YELLOW_TEXT_COLOR)
+
+print("===== FINISHED RUNNING check_tests.py =====")
+sys.exit(0 if not errorMessage else errorMessage)
diff --git a/scripts/check_license.sh b/scripts/check_license.sh
index c6f794ee5..51f83d7d4 100755
--- a/scripts/check_license.sh
+++ b/scripts/check_license.sh
@@ -11,6 +11,8 @@ EXCLUDE=(
"Go Authors"
"Google Inc"
"Prometheus Authors"
+ "Jeffrey Wilcke"
+ "dummy.go"
)
FILTER=$(IFS="|" ; echo "${EXCLUDE[*]}")
INPLACE=false
diff --git a/scripts/travis/run_tests.sh b/scripts/travis/run_tests.sh
index cf47b0b97..10b145575 100755
--- a/scripts/travis/run_tests.sh
+++ b/scripts/travis/run_tests.sh
@@ -3,6 +3,11 @@
set -e
if [ "${BUILD_TYPE}" = "integration" ]; then
+ # Travis has trouble with the expect tests.
+ if [ "${TRAVIS}" = "true" ]; then
+ export RUN_EXPECT="FALSE"
+ fi
+
# Run short tests when doing pull requests; leave the long testing for nightly runs.
if [[ "${TRAVIS_BRANCH}" =~ ^rel/nightly ]] || [[ "${TRAVIS_BRANCH}" =~ ^hotfix/ ]]; then
SHORTTEST=
@@ -11,7 +16,7 @@ if [ "${BUILD_TYPE}" = "integration" ]; then
fi
export SHORTTEST
make integration
-elif [ "${TRAVIS_EVENT_TYPE}" = "cron" ] || [[ "${TRAVIS_BRANCH}" =~ ^rel/ ]] || [[ "${TRAVIS_BRANCH}" =~ ^hotfix/ ]]; then
+elif [ "${TRAVIS_EVENT_TYPE}" = "cron" ] || [[ "${TRAVIS_BRANCH}" =~ ^rel/ ]] || [[ "${TRAVIS_BRANCH}" =~ ^hotfix/ ]]; then
make fulltest -j2
else
make shorttest -j2
diff --git a/shared/pingpong/accounts.go b/shared/pingpong/accounts.go
index 39db221b3..ba208abcc 100644
--- a/shared/pingpong/accounts.go
+++ b/shared/pingpong/accounts.go
@@ -128,29 +128,12 @@ func (pps *WorkerState) ensureAccounts(ac libgoal.Client, initCfg PpConfig) (acc
fmt.Printf("Located Source Account: %s -> %v\n", cfg.SrcAccount, accounts[cfg.SrcAccount])
}
- // Only reuse existing accounts for non asset testing and non app testing.
- // For asset testing, new participant accounts will be created since accounts are limited to 1000 assets.
- // For app testing, new participant accounts will be created since accounts are limited to 10 aps.
- if cfg.NumAsset == 0 && cfg.NumApp == 0 {
- // If we have more accounts than requested, pick the top N (not including src)
- if len(accounts) > int(cfg.NumPartAccounts+1) {
- fmt.Printf("Finding the richest %d accounts to use for transacting\n", cfg.NumPartAccounts)
- accounts = takeTopAccounts(accounts, cfg.NumPartAccounts, cfg.SrcAccount)
- } else {
- // Not enough accounts yet (or just enough). Create more if needed
- if len(accounts) != int(cfg.NumPartAccounts+1) {
- fmt.Printf("Not enough accounts - creating %d more\n", int(cfg.NumPartAccounts+1)-len(accounts))
- }
- accounts = generateAccounts(accounts, cfg.NumPartAccounts)
- }
- }
-
return
}
// throttle transaction rate
func throttleTransactionRate(startTime time.Time, cfg PpConfig, totalSent uint64) {
- localTimeDelta := time.Now().Sub(startTime)
+ localTimeDelta := time.Since(startTime)
currentTps := float64(totalSent) / localTimeDelta.Seconds()
if currentTps > float64(cfg.TxnPerSec) {
sleepSec := float64(totalSent)/float64(cfg.TxnPerSec) - localTimeDelta.Seconds()
@@ -163,9 +146,7 @@ func throttleTransactionRate(startTime time.Time, cfg PpConfig, totalSent uint64
// Step 1) Create X assets for each of the participant accounts
// Step 2) For each participant account, opt-in to assets of all other participant accounts
// Step 3) Evenly distribute the assets across all participant accounts
-func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount, client libgoal.Client) (resultAssetMaps map[uint64]v1.AssetParams, optIns map[uint64][]string, err error) {
- accounts := assetAccounts
- cfg := pps.cfg
+func (pps *WorkerState) prepareAssets(accounts map[string]*pingPongAccount, client libgoal.Client) (resultAssetMaps map[uint64]v1.AssetParams, optIns map[uint64][]string, err error) {
proto, err := getProto(client)
if err != nil {
return
@@ -180,6 +161,9 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
numCreatedAssetsByAddr := make(map[string]int, len(accounts))
// 1) Create X assets for each of the participant accounts
for addr := range accounts {
+ if addr == pps.cfg.SrcAccount {
+ continue
+ }
addrAccount, addrErr := client.AccountInformation(addr)
if addrErr != nil {
fmt.Printf("Cannot lookup source account %v\n", addr)
@@ -187,25 +171,25 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
return
}
- toCreate := int(cfg.NumAsset) - len(addrAccount.AssetParams)
+ toCreate := int(pps.cfg.NumAsset) - len(addrAccount.AssetParams)
numCreatedAssetsByAddr[addr] = toCreate
fmt.Printf("Creating %v create asset transaction for account %v \n", toCreate, addr)
- fmt.Printf("cfg.NumAsset %v, addrAccount.AssetParams %v\n", cfg.NumAsset, addrAccount.AssetParams)
+ fmt.Printf("cfg.NumAsset %v, addrAccount.AssetParams %v\n", pps.cfg.NumAsset, addrAccount.AssetParams)
+ totalSupply := pps.cfg.MinAccountAsset * uint64(pps.cfg.NumPartAccounts) * 9 * uint64(pps.cfg.GroupSize) * uint64(pps.cfg.RefreshTime.Seconds()) / pps.cfg.TxnPerSec
// create assets in participant account
for i := 0; i < toCreate; i++ {
var metaLen = 32
- meta := make([]byte, metaLen, metaLen)
+ meta := make([]byte, metaLen)
crypto.RandBytes(meta[:])
- totalSupply := cfg.MinAccountAsset * uint64(cfg.NumPartAccounts) * 9
- if totalSupply < cfg.MinAccountAsset { //overflow
+ if totalSupply < pps.cfg.MinAccountAsset { // overflow
fmt.Printf("Too many NumPartAccounts\n")
return
}
assetName := fmt.Sprintf("pong%d", i)
- if !cfg.Quiet {
+ if !pps.cfg.Quiet {
fmt.Printf("Creating asset %s\n", assetName)
}
tx, createErr := client.MakeUnsignedAssetCreateTx(totalSupply, false, addr, addr, addr, addr, "ping", assetName, "", meta, 0)
@@ -214,32 +198,29 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
err = createErr
return
}
- tx, err = client.FillUnsignedTxTemplate(addr, 0, 0, cfg.MaxFee, tx)
+ tx, err = client.FillUnsignedTxTemplate(addr, 0, 0, pps.cfg.MaxFee, tx)
if err != nil {
fmt.Printf("Cannot fill asset creation txn\n")
return
}
tx.Note = pps.makeNextUniqueNoteField()
- _, err = signAndBroadcastTransaction(accounts, addr, tx, client, cfg)
+ _, err = signAndBroadcastTransaction(accounts[addr], tx, client)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "signing and broadcasting asset creation failed with error %v\n", err)
return
}
totalSent++
- throttleTransactionRate(startTime, cfg, totalSent)
+ throttleTransactionRate(startTime, pps.cfg, totalSent)
}
}
// wait until all the assets created
- r, err := client.Status()
- if err != nil {
- fmt.Printf("Error: failed to obtain last round after assets creation")
- return
- }
- nextRound := r.LastRound + 1
- allAssets := make(map[uint64]string, int(cfg.NumAsset)*len(accounts))
+ allAssets := make(map[uint64]string, int(pps.cfg.NumAsset)*len(accounts))
for addr := range accounts {
+ if addr == pps.cfg.SrcAccount {
+ continue
+ }
var account v1.Account
deadline := time.Now().Add(3 * time.Minute)
for {
@@ -257,16 +238,10 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
fmt.Printf("Error: %s\n", err.Error())
return
}
- r, err = client.WaitForRound(nextRound)
- if err != nil {
- fmt.Printf("Warning: failed to wait for round %d after assets creation", nextRound)
- time.Sleep(1 * time.Second)
- continue
- }
- nextRound = r.LastRound + 1
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
}
assetParams := account.AssetParams
- if !cfg.Quiet {
+ if !pps.cfg.Quiet {
fmt.Printf("Configured %d assets %+v\n", len(assetParams), assetParams)
}
// add own asset to opt-ins since asset creators are auto-opted in
@@ -279,9 +254,16 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
// optInsByAddr tracks only explicitly opted-in assetsA
optInsByAddr := make(map[string]map[uint64]bool)
+ // reset rate-control
+ startTime = time.Now()
+ totalSent = 0
+
// 2) For each participant account, opt-in up to proto.MaxAssetsPerAccount assets of all other participant accounts
for addr := range accounts {
- if !cfg.Quiet {
+ if addr == pps.cfg.SrcAccount {
+ continue
+ }
+ if !pps.cfg.Quiet {
fmt.Printf("Opting to account %v\n", addr)
}
@@ -292,11 +274,16 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
return
}
numSlots := proto.MaxAssetsPerAccount - len(acct.Assets)
- i := 0
+ optInsByAddr[addr] = make(map[uint64]bool)
for k, creator := range allAssets {
if creator == addr {
continue
}
+ // do we have any more asset slots for this?
+ if numSlots <= 0 {
+ break
+ }
+ numSlots--
// opt-in asset k for addr
tx, sendErr := client.MakeUnsignedAssetSendTx(k, 0, addr, "", "")
@@ -306,42 +293,33 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
return
}
- tx, err = client.FillUnsignedTxTemplate(addr, 0, 0, cfg.MaxFee, tx)
+ tx, err = client.FillUnsignedTxTemplate(addr, 0, 0, pps.cfg.MaxFee, tx)
if err != nil {
fmt.Printf("Cannot fill asset optin %v in account %v\n", k, addr)
return
}
tx.Note = pps.makeNextUniqueNoteField()
- _, err = signAndBroadcastTransaction(accounts, addr, tx, client, cfg)
+ _, err = signAndBroadcastTransaction(accounts[addr], tx, client)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "signing and broadcasting asset optin failed with error %v\n", err)
return
}
+ totalSent++
+
optIns[k] = append(optIns[k], addr)
- if _, ok := optInsByAddr[addr]; !ok {
- optInsByAddr[addr] = make(map[uint64]bool)
- }
optInsByAddr[addr][k] = true
- if i >= numSlots-1 {
- break
- }
- i++
-
- totalSent++
- throttleTransactionRate(startTime, cfg, totalSent)
+ throttleTransactionRate(startTime, pps.cfg, totalSent)
}
}
// wait until all opt-ins completed
- r, err = client.Status()
- if err != nil {
- fmt.Printf("Error: failed to obtain last round after assets opt in")
- return
- }
- nextRound = r.LastRound + 1
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
for addr := range accounts {
+ if addr == pps.cfg.SrcAccount {
+ continue
+ }
expectedAssets := numCreatedAssetsByAddr[addr] + len(optInsByAddr[addr])
var account v1.Account
deadline := time.Now().Add(3 * time.Minute)
@@ -352,27 +330,29 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
time.Sleep(1 * time.Second)
continue
}
- if len(account.Assets) >= expectedAssets {
+ if len(account.Assets) == expectedAssets {
break
+ } else if len(account.Assets) > expectedAssets {
+ err = fmt.Errorf("account %v has too many assets %d > %d ", addr, len(account.Assets), expectedAssets)
+ return
}
+
if time.Now().After(deadline) {
err = fmt.Errorf("asset opting in took too long")
fmt.Printf("Error: %s\n", err.Error())
return
}
- r, err = client.WaitForRound(nextRound)
- if err != nil {
- fmt.Printf("Warning: failed to wait for round %d after assets opt in", nextRound)
- time.Sleep(1 * time.Second)
- continue
- }
- nextRound = r.LastRound + 1
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
}
}
+ // reset rate-control
+ startTime = time.Now()
+ totalSent = 0
+
// Step 3) Evenly distribute the assets across all opted-in accounts
for k, creator := range allAssets {
- if !cfg.Quiet {
+ if !pps.cfg.Quiet {
fmt.Printf("Distributing asset %+v from account %v\n", k, creator)
}
creatorAccount, creatorErr := client.AccountInformation(creator)
@@ -385,38 +365,51 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
for _, addr := range optIns[k] {
assetAmt := assetParams[k].Total / uint64(len(optIns[k]))
- if !cfg.Quiet {
+ if !pps.cfg.Quiet {
fmt.Printf("Distributing assets from %v to %v \n", creator, addr)
}
- tx, signer, sendErr := pps.constructTxn(creator, addr, cfg.MaxFee, assetAmt, k, client)
+ tx, sendErr := client.MakeUnsignedAssetSendTx(k, assetAmt, addr, "", "")
if sendErr != nil {
- fmt.Printf("Cannot transfer asset %v from account %v\n", k, creator)
- err = sendErr
+ _, _ = fmt.Fprintf(os.Stdout, "error making unsigned asset send tx %v\n", sendErr)
+ err = fmt.Errorf("error making unsigned asset send tx : %w", sendErr)
return
}
-
tx.Note = pps.makeNextUniqueNoteField()
- _, err = signAndBroadcastTransaction(accounts, signer, tx, client, cfg)
+ tx, sendErr = client.FillUnsignedTxTemplate(creator, 0, 0, pps.cfg.MaxFee, tx)
+ if sendErr != nil {
+ _, _ = fmt.Fprintf(os.Stdout, "error making unsigned asset send tx %v\n", sendErr)
+ err = fmt.Errorf("error making unsigned asset send tx : %w", sendErr)
+ return
+ }
+ tx.LastValid = tx.FirstValid + 5
+ if pps.cfg.MaxFee == 0 {
+ var suggestedFee uint64
+ suggestedFee, err = client.SuggestedFee()
+ if err != nil {
+ _, _ = fmt.Fprintf(os.Stdout, "error retrieving suggestedFee: %v\n", err)
+ return
+ }
+ if suggestedFee > tx.Fee.Raw {
+ tx.Fee.Raw = suggestedFee
+ }
+ }
+
+ _, err = signAndBroadcastTransaction(accounts[creator], tx, client)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "signing and broadcasting asset distribution failed with error %v\n", err)
return
}
totalSent++
- throttleTransactionRate(startTime, cfg, totalSent)
+ throttleTransactionRate(startTime, pps.cfg, totalSent)
}
// append the asset to the result assets
resultAssetMaps[k] = assetParams[k]
}
// wait for all transfers acceptance
- r, err = client.Status()
- if err != nil {
- fmt.Printf("Error: failed to obtain last round after assets distribution")
- return
- }
- nextRound = r.LastRound + 1
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
deadline := time.Now().Add(3 * time.Minute)
var pending v1.PendingTransactions
for {
@@ -433,34 +426,19 @@ func (pps *WorkerState) prepareAssets(assetAccounts map[string]*pingPongAccount,
fmt.Printf("Warning: assets distribution took too long")
break
}
- r, err = client.WaitForRound(nextRound)
- if err != nil {
- fmt.Printf("Warning: failed to wait for round %d after assets distribution", nextRound)
- time.Sleep(1 * time.Second)
- continue
- }
- nextRound = r.LastRound + 1
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
}
return
}
-func signAndBroadcastTransaction(accounts map[string]*pingPongAccount, sender string, tx transactions.Transaction, client libgoal.Client, cfg PpConfig) (txID string, err error) {
- var signedTx transactions.SignedTxn
- signedTx, err = signTxn(sender, tx, accounts, cfg)
- if err != nil {
- fmt.Printf("Cannot sign trx %+v with account %v\nerror %v\n", tx, sender, err)
- return
- }
+func signAndBroadcastTransaction(senderAccount *pingPongAccount, tx transactions.Transaction, client libgoal.Client) (txID string, err error) {
+ signedTx := tx.Sign(senderAccount.sk)
txID, err = client.BroadcastTransaction(signedTx)
if err != nil {
fmt.Printf("Cannot broadcast transaction %+v\nerror %v \n", signedTx, err)
return
}
- if !cfg.Quiet {
- fmt.Printf("Broadcast transaction %v\n", txID)
- }
- accounts[sender].balance -= tx.Fee.Raw
-
+ senderAccount.addBalance(-int64(tx.Fee.Raw))
return
}
@@ -621,6 +599,17 @@ func genAppProgram(numOps uint32, numHashes uint32, hashSize string, numGlobalKe
return ops.Program, progAsm
}
+func waitForNextRoundOrSleep(client libgoal.Client, waitTime time.Duration) {
+ status, err := client.Status()
+ if err == nil {
+ status, err = client.WaitForRound(status.LastRound)
+ if err == nil {
+ return
+ }
+ }
+ time.Sleep(waitTime)
+}
+
func (pps *WorkerState) sendAsGroup(txgroup []transactions.Transaction, client libgoal.Client, senders []string) (err error) {
if len(txgroup) == 0 {
err = fmt.Errorf("sendAsGroup: empty group")
@@ -631,26 +620,20 @@ func (pps *WorkerState) sendAsGroup(txgroup []transactions.Transaction, client l
err = gidErr
return
}
- var stxgroup []transactions.SignedTxn
+ stxgroup := make([]transactions.SignedTxn, len(txgroup))
for i, txn := range txgroup {
txn.Group = gid
- signedTxn, signErr := signTxn(senders[i], txn, pps.accounts, pps.cfg)
- if err != nil {
- fmt.Printf("Cannot sign trx %+v with account %v\nerror %v\n", txn, senders[i], err)
- return
- }
-
- if signErr != nil {
- fmt.Printf("Cannot sign app creation txn\n")
- err = signErr
- return
- }
- stxgroup = append(stxgroup, signedTxn)
+ stxgroup[i] = txn.Sign(pps.accounts[senders[i]].sk)
}
-
+repeat:
broadcastErr := client.BroadcastTransactionGroup(stxgroup)
if broadcastErr != nil {
- fmt.Printf("Cannot broadcast app creation txn group\n")
+ if strings.Contains(broadcastErr.Error(), "broadcast queue full") {
+ fmt.Printf("failed to send broadcast app creation txn group, broadcast queue full. sleeping & retrying.\n")
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
+ goto repeat
+ }
+ fmt.Printf("Cannot broadcast app creation txn group - %#v\n", stxgroup)
err = broadcastErr
return
}
@@ -695,30 +678,32 @@ func (pps *WorkerState) prepareApps(accounts map[string]*pingPongAccount, client
acctNeeded++
}
if acctNeeded >= len(accounts) { // >= because cfg.SrcAccount is skipped
- err = fmt.Errorf("Need %d accts to create %d apps but got only %d accts", acctNeeded, toCreate, len(accounts))
+ err = fmt.Errorf("need %d accts to create %d apps but got only %d accts", acctNeeded, toCreate, len(accounts))
return
}
maxOptIn := uint32(config.Consensus[protocol.ConsensusCurrentVersion].MaxAppsOptedIn)
if cfg.NumAppOptIn > maxOptIn {
- err = fmt.Errorf("Each acct can only opt in to %d but %d requested", maxOptIn, cfg.NumAppOptIn)
+ err = fmt.Errorf("each acct can only opt in to %d but %d requested", maxOptIn, cfg.NumAppOptIn)
return
}
- var appAccounts []v1.Account
- for tempAccount := range accounts {
- if tempAccount != cfg.SrcAccount {
- var appAccount v1.Account
- appAccount, err = client.AccountInformation(tempAccount)
- if err != nil {
- fmt.Printf("Warning, cannot lookup tempAccount account %s", tempAccount)
- return
- }
- appAccounts = append(appAccounts, appAccount)
- if len(appAccounts) == acctNeeded {
- break
- }
+ appAccounts := make([]v1.Account, len(accounts))
+ accountsCount := 0
+ for acctAddr := range accounts {
+ if acctAddr == cfg.SrcAccount {
+ continue
+ }
+ appAccounts[accountsCount], err = client.AccountInformation(acctAddr)
+ if err != nil {
+ fmt.Printf("Warning, cannot lookup acctAddr account %s", acctAddr)
+ return
+ }
+ accountsCount++
+ if accountsCount == acctNeeded {
+ break
}
}
+ appAccounts = appAccounts[:accountsCount]
if !cfg.Quiet {
fmt.Printf("Selected temp account:\n")
@@ -727,6 +712,17 @@ func (pps *WorkerState) prepareApps(accounts map[string]*pingPongAccount, client
}
}
+ // generate app program with roughly some number of operations
+ prog, asm := genAppProgram(cfg.AppProgOps, cfg.AppProgHashes, cfg.AppProgHashSize, cfg.AppGlobKeys, cfg.AppLocalKeys)
+ if !cfg.Quiet {
+ fmt.Printf("generated program: \n%s\n", asm)
+ }
+ globSchema := basics.StateSchema{NumByteSlice: proto.MaxGlobalSchemaEntries}
+ locSchema := basics.StateSchema{NumByteSlice: proto.MaxLocalSchemaEntries}
+
+ // for each account, store the number of expected applications.
+ accountsApplicationCount := make(map[string]int)
+
// create apps
for idx, appAccount := range appAccounts {
begin := idx * appsPerAcct
@@ -734,44 +730,45 @@ func (pps *WorkerState) prepareApps(accounts map[string]*pingPongAccount, client
if end > toCreate {
end = toCreate
}
+
var txgroup []transactions.Transaction
var senders []string
for i := begin; i < end; i++ {
var tx transactions.Transaction
- // generate app program with roughly some number of operations
- prog, asm := genAppProgram(cfg.AppProgOps, cfg.AppProgHashes, cfg.AppProgHashSize, cfg.AppGlobKeys, cfg.AppLocalKeys)
- if !cfg.Quiet {
- fmt.Printf("generated program: \n%s\n", asm)
- }
-
- globSchema := basics.StateSchema{NumByteSlice: proto.MaxGlobalSchemaEntries}
- locSchema := basics.StateSchema{NumByteSlice: proto.MaxLocalSchemaEntries}
tx, err = client.MakeUnsignedAppCreateTx(transactions.NoOpOC, prog, prog, globSchema, locSchema, nil, nil, nil, nil, 0)
if err != nil {
fmt.Printf("Cannot create app txn\n")
panic(err)
+ // TODO : if we fail here for too long, we should re-create new accounts, etc.
}
tx, err = client.FillUnsignedTxTemplate(appAccount.Address, 0, 0, cfg.MaxFee, tx)
if err != nil {
fmt.Printf("Cannot fill app creation txn\n")
panic(err)
+ // TODO : if we fail here for too long, we should re-create new accounts, etc.
}
// Ensure different txids
tx.Note = pps.makeNextUniqueNoteField()
txgroup = append(txgroup, tx)
- accounts[appAccount.Address].balance -= tx.Fee.Raw
+ accounts[appAccount.Address].addBalance(-int64(tx.Fee.Raw))
senders = append(senders, appAccount.Address)
+ accountsApplicationCount[appAccount.Address]++
}
err = pps.sendAsGroup(txgroup, client, senders)
if err != nil {
+ balance, err2 := client.GetBalance(appAccount.Address)
+ if err2 == nil {
+ fmt.Printf("account %v balance is %d, logged balance is %d\n", appAccount.Address, balance, accounts[appAccount.Address].getBalance())
+ } else {
+ fmt.Printf("account %v balance cannot be determined : %v\n", appAccount.Address, err2)
+ }
return
}
-
if !cfg.Quiet {
fmt.Printf("Created new %d apps\n", len(txgroup))
}
@@ -788,17 +785,16 @@ func (pps *WorkerState) prepareApps(accounts map[string]*pingPongAccount, client
fmt.Printf("Warning, cannot lookup source account")
return
}
- if len(account.AppParams) >= appsPerAcct || len(aidxs) >= int(cfg.NumApp) {
+ if len(account.AppParams) >= accountsApplicationCount[appAccount.Address] {
break
}
- time.Sleep(time.Second)
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
+ // TODO : if we fail here for too long, we should re-create new accounts, etc.
}
- for idx := range account.AppParams {
+ for idx, v := range account.AppParams {
+ appParams[idx] = v
aidxs = append(aidxs, idx)
}
- for k, v := range account.AppParams {
- appParams[k] = v
- }
}
if len(aidxs) != len(appParams) {
err = fmt.Errorf("duplicates in aidxs, %d != %d", len(aidxs), len(appParams))
@@ -809,6 +805,9 @@ func (pps *WorkerState) prepareApps(accounts map[string]*pingPongAccount, client
if cfg.NumAppOptIn > 0 {
optIns = make(map[uint64][]string)
for addr := range accounts {
+ if addr == cfg.SrcAccount {
+ continue
+ }
var txgroup []transactions.Transaction
var senders []string
permAppIndices := rand.Perm(len(aidxs))
@@ -841,6 +840,7 @@ func (pps *WorkerState) prepareApps(accounts map[string]*pingPongAccount, client
return
}
txgroup = txgroup[:0]
+ senders = senders[:0]
}
}
// broadcast leftovers
@@ -867,7 +867,7 @@ func takeTopAccounts(allAccounts map[string]*pingPongAccount, numAccounts uint32
sort.SliceStable(allAddrs, func(i, j int) bool {
amt1 := allAccounts[allAddrs[i]]
amt2 := allAccounts[allAddrs[j]]
- return amt1.balance > amt2.balance
+ return amt1.getBalance() > amt2.getBalance()
})
// Now populate a new map with just the accounts needed
@@ -883,15 +883,10 @@ func takeTopAccounts(allAccounts map[string]*pingPongAccount, numAccounts uint32
return
}
-func generateAccounts(allAccounts map[string]*pingPongAccount, numAccounts uint32) map[string]*pingPongAccount {
- // Compute the number of accounts to generate
- accountsRequired := int(numAccounts+1) - len(allAccounts)
-
+func generateAccounts(allAccounts map[string]*pingPongAccount, numAccounts uint32) {
var seed crypto.Seed
- for accountsRequired > 0 {
- accountsRequired--
-
+ for accountsRequired := int(numAccounts+1) - len(allAccounts); accountsRequired > 0; accountsRequired-- {
crypto.RandBytes(seed[:])
privateKey := crypto.GenerateSignatureSecrets(seed)
publicKey := basics.Address(privateKey.SignatureVerifier)
@@ -901,6 +896,4 @@ func generateAccounts(allAccounts map[string]*pingPongAccount, numAccounts uint3
pk: publicKey,
}
}
-
- return allAccounts
}
diff --git a/shared/pingpong/pingpong.go b/shared/pingpong/pingpong.go
index eb774b5d0..6780d13b3 100644
--- a/shared/pingpong/pingpong.go
+++ b/shared/pingpong/pingpong.go
@@ -23,8 +23,11 @@ import (
"math"
"math/rand"
"os"
+ "strings"
"time"
+ "github.com/algorand/go-deadlock"
+
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/crypto"
v1 "github.com/algorand/go-algorand/daemon/algod/api/spec/v1"
@@ -32,6 +35,7 @@ import (
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
"github.com/algorand/go-algorand/libgoal"
+ "github.com/algorand/go-algorand/protocol"
)
// CreatablesInfo has information about created assets, apps and opting in
@@ -44,9 +48,30 @@ type CreatablesInfo struct {
// pingPongAccount represents the account state for each account in the pingpong application
// This includes the current balance and public/private keys tied to the account
type pingPongAccount struct {
- balance uint64
- sk *crypto.SignatureSecrets
- pk basics.Address
+ deadlock.Mutex
+ sk *crypto.SignatureSecrets
+ pk basics.Address
+
+ balance uint64
+ balanceRound uint64
+}
+
+func (ppa *pingPongAccount) getBalance() uint64 {
+ ppa.Lock()
+ defer ppa.Unlock()
+ return ppa.balance
+}
+
+func (ppa *pingPongAccount) setBalance(balance uint64) {
+ ppa.Lock()
+ defer ppa.Unlock()
+ ppa.balance = balance
+}
+
+func (ppa *pingPongAccount) addBalance(offset int64) {
+ ppa.Lock()
+ defer ppa.Unlock()
+ ppa.balance = uint64(int64(ppa.balance) + offset)
}
// WorkerState object holds a running pingpong worker
@@ -59,6 +84,10 @@ type WorkerState struct {
localNftIndex uint64
nftHolders map[string]int
incTransactionSalt uint64
+
+ muSuggestedParams deadlock.Mutex
+ suggestedParams v1.TransactionParams
+ pendingTxns v1.PendingTransactions
}
// PrepareAccounts to set up accounts and asset accounts required for Ping Pong run
@@ -75,7 +104,7 @@ func (pps *WorkerState) PrepareAccounts(ac libgoal.Client) (err error) {
cfg.MaxAmt = 0
var assetAccounts map[string]*pingPongAccount
- assetAccounts, err = pps.prepareNewAccounts(ac, cfg, pps.accounts)
+ assetAccounts, err = pps.prepareNewAccounts(ac)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "prepare new accounts failed: %v\n", err)
return
@@ -88,14 +117,15 @@ func (pps *WorkerState) PrepareAccounts(ac libgoal.Client) (err error) {
}
if !cfg.Quiet {
- for addr := range pps.accounts {
- fmt.Printf("final prepareAccounts, account addr: %s, balance: %d\n", addr, pps.accounts[addr].balance)
+ for addr := range assetAccounts {
+ if addr != pps.cfg.SrcAccount {
+ fmt.Printf("final prepareAccounts, account addr: %s, balance: %d\n", addr, pps.accounts[addr].getBalance())
+ }
}
}
} else if cfg.NumApp > 0 {
-
var appAccounts map[string]*pingPongAccount
- appAccounts, err = pps.prepareNewAccounts(ac, cfg, pps.accounts)
+ appAccounts, err = pps.prepareNewAccounts(ac)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "prepare new accounts failed: %v\n", err)
return
@@ -105,11 +135,24 @@ func (pps *WorkerState) PrepareAccounts(ac libgoal.Client) (err error) {
return
}
if !cfg.Quiet {
- for addr := range pps.accounts {
- fmt.Printf("final prepareAccounts, account addr: %s, balance: %d\n", addr, pps.accounts[addr].balance)
+ for addr := range appAccounts {
+ if addr != pps.cfg.SrcAccount {
+ fmt.Printf("final prepareAccounts, account addr: %s, balance: %d\n", addr, pps.accounts[addr].getBalance())
+ }
}
}
} else {
+ // If we have more accounts than requested, pick the top N (not including src)
+ if len(pps.accounts) > int(cfg.NumPartAccounts+1) {
+ fmt.Printf("Finding the richest %d accounts to use for transacting\n", cfg.NumPartAccounts)
+ pps.accounts = takeTopAccounts(pps.accounts, cfg.NumPartAccounts, cfg.SrcAccount)
+ } else {
+ // Not enough accounts yet (or just enough). Create more if needed
+ fmt.Printf("Not enough accounts - creating %d more\n", int(cfg.NumPartAccounts+1)-len(pps.accounts))
+ generateAccounts(pps.accounts, cfg.NumPartAccounts)
+ }
+ go pps.roundMonitor(ac)
+
err = pps.fundAccounts(pps.accounts, ac, cfg)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "fund accounts failed %v\n", err)
@@ -121,21 +164,18 @@ func (pps *WorkerState) PrepareAccounts(ac libgoal.Client) (err error) {
return
}
-func (pps *WorkerState) prepareNewAccounts(client libgoal.Client, cfg PpConfig, accounts map[string]*pingPongAccount) (newAccounts map[string]*pingPongAccount, err error) {
- // remove existing accounts except for src account
- for k := range accounts {
- if k != cfg.SrcAccount {
- delete(accounts, k)
- }
- }
+func (pps *WorkerState) prepareNewAccounts(client libgoal.Client) (newAccounts map[string]*pingPongAccount, err error) {
// create new accounts for testing
newAccounts = make(map[string]*pingPongAccount)
- newAccounts = generateAccounts(newAccounts, cfg.NumPartAccounts-1)
-
- for k := range newAccounts {
- accounts[k] = newAccounts[k]
+ generateAccounts(newAccounts, pps.cfg.NumPartAccounts)
+ // copy the source account, as needed.
+ if srcAcct, has := pps.accounts[pps.cfg.SrcAccount]; has {
+ newAccounts[pps.cfg.SrcAccount] = srcAcct
}
- err = pps.fundAccounts(accounts, client, cfg)
+ pps.accounts = newAccounts
+ go pps.roundMonitor(client)
+
+ err = pps.fundAccounts(newAccounts, client, pps.cfg)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "fund accounts failed %v\n", err)
return
@@ -145,7 +185,7 @@ func (pps *WorkerState) prepareNewAccounts(client libgoal.Client, cfg PpConfig,
}
// determine the min balance per participant account
-func computeAccountMinBalance(client libgoal.Client, cfg PpConfig) (requiredBalance uint64, err error) {
+func computeAccountMinBalance(client libgoal.Client, cfg PpConfig) (fundingRequiredBalance uint64, runningRequiredBalance uint64, err error) {
proto, err := getProto(client)
if err != nil {
return
@@ -153,11 +193,6 @@ func computeAccountMinBalance(client libgoal.Client, cfg PpConfig) (requiredBala
minActiveAccountBalance := proto.MinBalance
- if cfg.NumApp > 0 {
- requiredBalance = (cfg.MinAccountFunds + (cfg.MaxAmt+cfg.MaxFee)*10) * 2
- fmt.Printf("required min balance for app accounts: %d\n", requiredBalance)
- return
- }
var fee uint64
if cfg.MaxFee != 0 {
fee = cfg.MaxFee
@@ -167,8 +202,22 @@ func computeAccountMinBalance(client libgoal.Client, cfg PpConfig) (requiredBala
if err != nil {
return
}
+ fee *= uint64(cfg.GroupSize)
+ }
+
+ if cfg.NumApp > 0 {
+ amount := uint64(0)
+
+ runningRequiredBalance = (amount + fee) * 10 * 2
+ setupCost := uint64(proto.MaxTxGroupSize) * (uint64(proto.AppFlatParamsMinBalance*2) + fee)
+ // todo: add the cfg.NumAppOptIn to the setup cost.
+ fundingRequiredBalance = proto.MinBalance + cfg.MinAccountFunds + (amount+fee)*10*2*cfg.TxnPerSec*uint64(math.Ceil(cfg.RefreshTime.Seconds())) + setupCost
+ fmt.Printf("required min balance for app accounts: %d\n", fundingRequiredBalance)
+ return
}
- requiredBalance = minActiveAccountBalance
+
+ fundingRequiredBalance = minActiveAccountBalance
+ runningRequiredBalance = minActiveAccountBalance
// add cost of assets
if cfg.NumAsset > 0 {
@@ -176,7 +225,8 @@ func computeAccountMinBalance(client libgoal.Client, cfg PpConfig) (requiredBala
(fee)*uint64(cfg.NumAsset) + // asset creations
(fee)*uint64(cfg.NumAsset)*uint64(cfg.NumPartAccounts) + // asset opt-ins
(fee)*uint64(cfg.NumAsset)*uint64(cfg.NumPartAccounts) // asset distributions
- requiredBalance += assetCost
+ fundingRequiredBalance += assetCost
+ runningRequiredBalance += assetCost
}
if cfg.NumApp > 0 {
creationCost := uint64(cfg.NumApp) * proto.AppFlatParamsMinBalance * uint64(proto.MaxAppsCreated)
@@ -185,21 +235,25 @@ func computeAccountMinBalance(client libgoal.Client, cfg PpConfig) (requiredBala
maxLocalSchema := basics.StateSchema{NumUint: proto.MaxLocalSchemaEntries, NumByteSlice: proto.MaxLocalSchemaEntries}
schemaCost := uint64(cfg.NumApp) * (maxGlobalSchema.MinBalance(&proto).Raw*uint64(proto.MaxAppsCreated) +
maxLocalSchema.MinBalance(&proto).Raw*uint64(proto.MaxAppsOptedIn))
- requiredBalance += creationCost + optInCost + schemaCost
+ fundingRequiredBalance += creationCost + optInCost + schemaCost
+ runningRequiredBalance += creationCost + optInCost + schemaCost
}
// add cost of transactions
- requiredBalance += (cfg.MaxAmt + fee) * 2 * cfg.TxnPerSec * uint64(math.Ceil(cfg.RefreshTime.Seconds()))
+ fundingRequiredBalance += (cfg.MaxAmt + fee) * 2 * cfg.TxnPerSec * uint64(math.Ceil(cfg.RefreshTime.Seconds()))
// override computed value if less than configured value
- if cfg.MinAccountFunds > requiredBalance {
- requiredBalance = cfg.MinAccountFunds
+ if cfg.MinAccountFunds > fundingRequiredBalance {
+ fundingRequiredBalance = cfg.MinAccountFunds
}
return
}
func (pps *WorkerState) fundAccounts(accounts map[string]*pingPongAccount, client libgoal.Client, cfg PpConfig) error {
- srcFunds, err := client.GetBalance(cfg.SrcAccount)
+ var srcFunds, minFund uint64
+ var err error
+ var tx transactions.Transaction
+ srcFunds, err = client.GetBalance(cfg.SrcAccount)
if err != nil {
return err
@@ -211,23 +265,27 @@ func (pps *WorkerState) fundAccounts(accounts map[string]*pingPongAccount, clien
// Fee of 0 will make cause the function to use the suggested one by network
fee := uint64(0)
- minFund, err := computeAccountMinBalance(client, cfg)
+ minFund, _, err = computeAccountMinBalance(client, cfg)
if err != nil {
return err
}
fmt.Printf("adjusting account balance to %d\n", minFund)
- for addr, acct := range accounts {
-
- if addr == pps.cfg.SrcAccount {
- continue
- }
+ for {
+ accountsAdjusted := 0
+ for addr, acct := range accounts {
- if !cfg.Quiet {
- fmt.Printf("adjusting balance of account %v\n", addr)
- }
- if acct.balance < minFund {
- toSend := minFund - acct.balance
+ if addr == pps.cfg.SrcAccount {
+ continue
+ }
+ repeat:
+ if acct.getBalance() >= minFund {
+ continue
+ }
+ if !cfg.Quiet {
+ fmt.Printf("adjusting balance of account %v\n", addr)
+ }
+ toSend := minFund - acct.getBalance()
if srcFunds <= toSend {
return fmt.Errorf("source account %s has insufficient funds %d - needs %d", cfg.SrcAccount, srcFunds, toSend)
}
@@ -235,20 +293,37 @@ func (pps *WorkerState) fundAccounts(accounts map[string]*pingPongAccount, clien
if !cfg.Quiet {
fmt.Printf("adjusting balance of account %v by %d\n ", addr, toSend)
}
- _, err := pps.sendPaymentFromSourceAccount(client, addr, fee, toSend)
+
+ tx, err = pps.sendPaymentFromSourceAccount(client, addr, fee, toSend)
if err != nil {
+ if strings.Contains(err.Error(), "broadcast queue full") {
+ fmt.Printf("failed to send payment, broadcast queue full. sleeping & retrying.\n")
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
+ goto repeat
+ }
return err
}
- accounts[addr].balance = minFund
+ srcFunds -= tx.Fee.Raw
+ accountsAdjusted++
if !cfg.Quiet {
- fmt.Printf("account balance for key %s is %d\n", addr, accounts[addr].balance)
+ fmt.Printf("account balance for key %s will be %d\n", addr, minFund)
}
totalSent++
throttleTransactionRate(startTime, cfg, totalSent)
}
+ accounts[cfg.SrcAccount].setBalance(srcFunds)
+ // wait until all the above transactions are sent, or that we have no more transactions
+ // in our pending transaction pool coming from the source account.
+ err = waitPendingTransactions(map[string]*pingPongAccount{cfg.SrcAccount: nil}, client)
+ if err != nil {
+ return err
+ }
+ if accountsAdjusted == 0 {
+ break
+ }
}
- return nil
+ return err
}
func (pps *WorkerState) sendPaymentFromSourceAccount(client libgoal.Client, to string, fee, amount uint64) (transactions.Transaction, error) {
@@ -256,13 +331,16 @@ func (pps *WorkerState) sendPaymentFromSourceAccount(client libgoal.Client, to s
note := pps.makeNextUniqueNoteField()
from := pps.cfg.SrcAccount
- tx, err := client.ConstructPayment(from, to, fee, amount, note[:], "", [32]byte{}, 0, 0)
+ var txn transactions.Transaction
+ var stxn transactions.SignedTxn
+ var err error
+ txn, err = client.ConstructPayment(from, to, fee, amount, note, "", [32]byte{}, 0, 0)
if err != nil {
return transactions.Transaction{}, err
}
- stxn, err := signTxn(from, tx, pps.accounts, pps.cfg)
+ stxn, err = signTxn(from, txn, pps.accounts, pps.cfg)
if err != nil {
return transactions.Transaction{}, err
@@ -273,10 +351,45 @@ func (pps *WorkerState) sendPaymentFromSourceAccount(client libgoal.Client, to s
return transactions.Transaction{}, err
}
- return tx, nil
+ return txn, nil
+}
+
+// waitPendingTransactions waits until all the pending transactions coming from the given
+// accounts map have been cleared out of the transaction pool. A prerequesite for this is that
+// there is no other source who might be generating transactions that would come from these account
+// addresses.
+func waitPendingTransactions(accounts map[string]*pingPongAccount, client libgoal.Client) error {
+ for from := range accounts {
+ repeat:
+ pendingTxns, err := client.GetPendingTransactionsByAddress(from, 0)
+ if err != nil {
+ fmt.Printf("failed to check pending transaction pool status : %v\n", err)
+ return err
+ }
+ for _, txn := range pendingTxns.TruncatedTxns.Transactions {
+ if txn.From != from {
+ // we found a transaction where the receiver was the given account. We don't
+ // care about these.
+ continue
+ }
+ // the transaction is still in the transaction pool.
+ // this would wait for the next round, when we will perform the check again.
+ waitForNextRoundOrSleep(client, 500*time.Millisecond)
+ goto repeat
+ }
+ }
+ return nil
}
func (pps *WorkerState) refreshAccounts(accounts map[string]*pingPongAccount, client libgoal.Client, cfg PpConfig) error {
+ // wait until all the pending transactions have been sent; otherwise, getting the balance
+ // is pretty much meaningless.
+ fmt.Printf("waiting for all transactions to be accepted before refreshing accounts.\n")
+ err := waitPendingTransactions(accounts, client)
+ if err != nil {
+ return err
+ }
+
for addr := range accounts {
amount, err := client.GetBalance(addr)
if err != nil {
@@ -284,7 +397,7 @@ func (pps *WorkerState) refreshAccounts(accounts map[string]*pingPongAccount, cl
return err
}
- accounts[addr].balance = amount
+ accounts[addr].setBalance(amount)
}
return pps.fundAccounts(accounts, client, cfg)
@@ -297,11 +410,11 @@ func listSufficientAccounts(accounts map[string]*pingPongAccount, minimumAmount
if key == except {
continue
}
- if value.balance >= minimumAmount {
+ if value.getBalance() >= minimumAmount {
out = append(out, key)
}
}
- rand.Shuffle(len(out), func(i, j int) { t := out[i]; out[i] = out[j]; out[j] = t })
+ rand.Shuffle(len(out), func(i, j int) { out[i], out[j] = out[j], out[i] })
return out
}
@@ -413,7 +526,7 @@ func (pps *WorkerState) RunPingPong(ctx context.Context, ac libgoal.Client) {
throttleTransactionRate(startTime, cfg, totalSent)
}
- timeDelta := time.Now().Sub(startTime)
+ timeDelta := time.Since(startTime)
_, _ = fmt.Fprintf(os.Stdout, "Sent %d transactions (%d attempted) in %d seconds\n", totalSucceeded, totalSent, int(math.Round(timeDelta.Seconds())))
if cfg.RestTime > 0 {
_, _ = fmt.Fprintf(os.Stdout, "Pausing %d seconds before sending more transactions\n", int(math.Round(cfg.RestTime.Seconds())))
@@ -427,7 +540,7 @@ func NewPingpong(cfg PpConfig) *WorkerState {
return &WorkerState{cfg: cfg, nftHolders: make(map[string]int)}
}
-func getCreatableID(cfg PpConfig, cinfo CreatablesInfo) (aidx uint64) {
+func randomizeCreatableID(cfg PpConfig, cinfo CreatablesInfo) (aidx uint64) {
if cfg.NumAsset > 0 {
rindex := rand.Intn(len(cinfo.AssetParams))
i := 0
@@ -463,6 +576,7 @@ func (pps *WorkerState) fee() uint64 {
func (pps *WorkerState) makeNftTraffic(client libgoal.Client) (sentCount uint64, err error) {
fee := pps.fee()
+ var srcCost uint64
if (len(pps.nftHolders) == 0) || ((float64(int(pps.cfg.NftAsaAccountInFlight)-len(pps.nftHolders)) / float64(pps.cfg.NftAsaAccountInFlight)) >= rand.Float64()) {
var addr string
@@ -486,14 +600,17 @@ func (pps *WorkerState) makeNftTraffic(client libgoal.Client) (sentCount uint64,
// enough for the per-asa minbalance and more than enough for the txns to create them
toSend := proto.MinBalance * uint64(pps.cfg.NftAsaPerAccount+1) * 2
pps.nftHolders[addr] = 0
- _, err = pps.sendPaymentFromSourceAccount(client, addr, fee, toSend)
+ var tx transactions.Transaction
+ tx, err = pps.sendPaymentFromSourceAccount(client, addr, fee, toSend)
if err != nil {
return
}
+ srcCost += tx.Fee.Raw + toSend
sentCount++
// we ran one txn above already to fund the new addr,
// we'll run a second txn below
}
+ pps.accounts[pps.cfg.SrcAccount].addBalance(-int64(srcCost))
// pick a random sender from nft holder sub accounts
pick := rand.Intn(len(pps.nftHolders))
pos := 0
@@ -531,8 +648,12 @@ func (pps *WorkerState) makeNftTraffic(client libgoal.Client) (sentCount uint64,
if err != nil {
return
}
- sentCount++
+
_, err = client.BroadcastTransaction(stxn)
+ if err != nil {
+ return
+ }
+ sentCount++
return
}
@@ -545,15 +666,37 @@ func (pps *WorkerState) sendFromTo(
cfg := pps.cfg
amt := cfg.MaxAmt
+ var minAccountRunningBalance uint64
+ _, minAccountRunningBalance, err = computeAccountMinBalance(client, cfg)
+ if err != nil {
+ return 0, 0, err
+ }
+ belowMinBalanceAccounts := make(map[string] /*basics.Address*/ bool)
assetsByCreator := make(map[string][]*v1.AssetParams)
for _, p := range cinfo.AssetParams {
c := p.Creator
- assetsByCreator[c] = append(assetsByCreator[c], &p)
+ ap := &v1.AssetParams{}
+ *ap = p
+ assetsByCreator[c] = append(assetsByCreator[c], ap)
}
- for i, from := range fromList {
+ lastTransactionTime := time.Now()
+ timeCredit := time.Duration(0)
+ for i := 0; i < len(fromList); i = (i + 1) % len(fromList) {
+ from := fromList[i]
+
+ // keep going until the balances of at least 20% of the accounts is too low.
+ if len(belowMinBalanceAccounts)*5 > len(fromList) {
+ fmt.Printf("quitting sendFromTo: too many accounts below threshold")
+ return
+ }
+
+ if belowMinBalanceAccounts[from] {
+ continue
+ }
+
if cfg.RandomizeAmt {
- amt = rand.Uint64()%cfg.MaxAmt + 1
+ amt = ((rand.Uint64() % cfg.MaxAmt) + 1) % cfg.MaxAmt
}
fee := pps.fee()
@@ -563,6 +706,14 @@ func (pps *WorkerState) sendFromTo(
var addr basics.Address
crypto.RandBytes(addr[:])
to = addr.String()
+ } else if len(belowMinBalanceAccounts) > 0 && (crypto.RandUint64()%100 < 50) {
+ // make 50% of the calls attempt to refund low-balanced accounts.
+ // ( if there is any )
+ // pick the first low balance account
+ for acct := range belowMinBalanceAccounts {
+ to = acct
+ break
+ }
}
// Broadcast transaction
@@ -571,11 +722,13 @@ func (pps *WorkerState) sendFromTo(
toBalanceChange := int64(0)
if cfg.NumAsset > 0 {
amt = 1
+ } else if cfg.NumApp > 0 {
+ amt = 0
}
if cfg.GroupSize == 1 {
// generate random assetID or appId if we send asset/app txns
- aidx := getCreatableID(cfg, cinfo)
+ aidx := randomizeCreatableID(cfg, cinfo)
var txn transactions.Transaction
var consErr error
// Construct single txn
@@ -587,8 +740,9 @@ func (pps *WorkerState) sendFromTo(
}
// would we have enough money after taking into account the current updated fees ?
- if accounts[from].balance <= (txn.Fee.Raw + amt + cfg.MinAccountFunds) {
- _, _ = fmt.Fprintf(os.Stdout, "Skipping sending %d : %s -> %s; Current cost too high.\n", amt, from, to)
+ if accounts[from].getBalance() <= (txn.Fee.Raw + amt + minAccountRunningBalance) {
+ _, _ = fmt.Fprintf(os.Stdout, "Skipping sending %d: %s -> %s; Current cost too high(%d <= %d + %d + %d).\n", amt, from, to, accounts[from].getBalance(), txn.Fee.Raw, amt, minAccountRunningBalance)
+ belowMinBalanceAccounts[from] = true
continue
}
@@ -605,9 +759,6 @@ func (pps *WorkerState) sendFromTo(
sentCount++
_, sendErr = client.BroadcastTransaction(stxn)
- if sendErr != nil {
- fmt.Printf("Warning, cannot broadcast txn, %s\n", sendErr)
- }
} else {
// Generate txn group
@@ -631,16 +782,15 @@ func (pps *WorkerState) sendFromTo(
toBalanceChange += int64(amt)
signer = to
} else {
- txn, _, err = pps.constructTxn(to, from, fee, amt, 0, client)
+ txn, signer, err = pps.constructTxn(to, from, fee, amt, 0, client)
toBalanceChange -= int64(txn.Fee.Raw + amt)
fromBalanceChange += int64(amt)
- signer = to
}
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "group tx failed: %v\n", err)
return
}
- if cfg.RandomizeAmt {
+ if cfg.RandomizeAmt && j%2 == 1 {
amt = rand.Uint64()%cfg.MaxAmt + 1
}
if cfg.Rekey {
@@ -661,11 +811,11 @@ func (pps *WorkerState) sendFromTo(
}
// would we have enough money after taking into account the current updated fees ?
- if int64(accounts[from].balance)+fromBalanceChange <= int64(cfg.MinAccountFunds) {
+ if int64(accounts[from].getBalance())+fromBalanceChange <= int64(cfg.MinAccountFunds) {
_, _ = fmt.Fprintf(os.Stdout, "Skipping sending %d : %s -> %s; Current cost too high.\n", amt, from, to)
continue
}
- if int64(accounts[to].balance)+toBalanceChange <= int64(cfg.MinAccountFunds) {
+ if int64(accounts[to].getBalance())+toBalanceChange <= int64(cfg.MinAccountFunds) {
_, _ = fmt.Fprintf(os.Stdout, "Skipping sending back %d : %s -> %s; Current cost too high.\n", amt, to, from)
continue
}
@@ -682,15 +832,15 @@ func (pps *WorkerState) sendFromTo(
}
// Sign each transaction
- var stxGroup []transactions.SignedTxn
+ stxGroup := make([]transactions.SignedTxn, len(txGroup))
+ var signErr error
for j, txn := range txGroup {
txn.Group = gid
- stxn, signErr := signTxn(txSigners[j], txn, pps.accounts, cfg)
+ stxGroup[j], signErr = signTxn(txSigners[j], txn, pps.accounts, cfg)
if signErr != nil {
err = signErr
return
}
- stxGroup = append(stxGroup, stxn)
}
sentCount++
@@ -705,11 +855,33 @@ func (pps *WorkerState) sendFromTo(
}
successCount++
- accounts[from].balance = uint64(fromBalanceChange + int64(accounts[from].balance))
- accounts[to].balance = uint64(toBalanceChange + int64(accounts[to].balance))
+ accounts[from].addBalance(fromBalanceChange)
+ // avoid updating the "to" account.
+
+ // the logic here would sleep for the remaining of time to match the desired cfg.DelayBetweenTxn
if cfg.DelayBetweenTxn > 0 {
time.Sleep(cfg.DelayBetweenTxn)
}
+ if cfg.TxnPerSec > 0 {
+ timeCredit += time.Second / time.Duration(cfg.TxnPerSec)
+
+ now := time.Now()
+ took := now.Sub(lastTransactionTime)
+ timeCredit -= took
+ if timeCredit > 0 {
+ time.Sleep(timeCredit)
+ timeCredit = time.Duration(0)
+ } else if timeCredit < -1000*time.Millisecond {
+ // cap the "time debt" to 1000 ms.
+ timeCredit = -1000 * time.Millisecond
+ }
+ lastTransactionTime = time.Now()
+
+ // since we just slept enough here, we can take it off the counters
+ sentCount--
+ successCount--
+ // fmt.Printf("itration took %v\n", took)
+ }
}
return
}
@@ -723,11 +895,62 @@ func (pps *WorkerState) nftSpamAssetName() string {
}
func (pps *WorkerState) makeNextUniqueNoteField() []byte {
noteField := make([]byte, binary.MaxVarintLen64)
- usedBytes := binary.PutUvarint(noteField[:], pps.incTransactionSalt)
+ usedBytes := binary.PutUvarint(noteField, pps.incTransactionSalt)
pps.incTransactionSalt++
return noteField[:usedBytes]
}
+func (pps *WorkerState) roundMonitor(client libgoal.Client) {
+ var minFund uint64
+ var err error
+ for {
+ minFund, _, err = computeAccountMinBalance(client, pps.cfg)
+ if err == nil {
+ break
+ }
+ }
+ var newBalance uint64
+ for {
+ paramsResp, err := client.SuggestedParams()
+ if err != nil {
+ time.Sleep(5 * time.Millisecond)
+ continue
+ }
+ pendingTxns, err := client.GetPendingTransactions(0)
+ if err != nil {
+ time.Sleep(5 * time.Millisecond)
+ continue
+ }
+ pps.muSuggestedParams.Lock()
+ pps.suggestedParams = paramsResp
+ pps.pendingTxns = pendingTxns
+ pps.muSuggestedParams.Unlock()
+
+ for _, acct := range pps.accounts {
+ acct.Lock()
+ needRefresh := acct.balance < minFund && acct.balanceRound < paramsResp.LastRound
+ acct.Unlock()
+ if needRefresh {
+ newBalance, err = client.GetBalance(acct.pk.String())
+ if err == nil {
+ acct.Lock()
+ acct.balanceRound, acct.balance = paramsResp.LastRound, newBalance
+ acct.Unlock()
+ }
+ }
+ }
+
+ // wait for the next round.
+ waitForNextRoundOrSleep(client, 200*time.Millisecond)
+ }
+}
+
+func (pps *WorkerState) getSuggestedParams() v1.TransactionParams {
+ pps.muSuggestedParams.Lock()
+ defer pps.muSuggestedParams.Unlock()
+ return pps.suggestedParams
+}
+
func (pps *WorkerState) constructTxn(from, to string, fee, amt, aidx uint64, client libgoal.Client) (txn transactions.Transaction, sender string, err error) {
cfg := pps.cfg
cinfo := pps.cinfo
@@ -755,16 +978,33 @@ func (pps *WorkerState) constructTxn(from, to string, fee, amt, aidx uint64, cli
if cfg.NumApp > 0 { // Construct app transaction
// select opted-in accounts for Txn.Accounts field
var accounts []string
- if len(cinfo.OptIns[aidx]) > 0 {
- indices := rand.Perm(len(cinfo.OptIns[aidx]))
- limit := 4
+ assetOptIns := cinfo.OptIns[aidx]
+ if len(assetOptIns) > 0 {
+ indices := rand.Perm(len(assetOptIns))
+ limit := 5
if len(indices) < limit {
limit = len(indices)
}
for i := 0; i < limit; i++ {
idx := indices[i]
- accounts = append(accounts, cinfo.OptIns[aidx][idx])
+ accounts = append(accounts, assetOptIns[idx])
+ }
+ if cinfo.AssetParams[aidx].Creator == from {
+ // if the application was created by the "from" account, then we don't need to worry about it being opted-in.
+ } else {
+ fromIsOptedIn := false
+ for i := 0; i < len(assetOptIns); i++ {
+ if assetOptIns[i] == from {
+ fromIsOptedIn = true
+ break
+ }
+ }
+ if !fromIsOptedIn {
+ sender = accounts[0]
+ from = sender
+ }
}
+ accounts = accounts[1:]
}
txn, err = client.MakeUnsignedAppNoOpTx(aidx, nil, accounts, nil, nil)
if err != nil {
@@ -779,11 +1019,17 @@ func (pps *WorkerState) constructTxn(from, to string, fee, amt, aidx uint64, cli
} else if cfg.NumAsset > 0 { // Construct asset transaction
// select a pair of random opted-in accounts by aidx
// use them as from/to addresses
- if len(cinfo.OptIns[aidx]) > 0 {
- indices := rand.Perm(len(cinfo.OptIns[aidx]))
- from = cinfo.OptIns[aidx][indices[0]]
- to = cinfo.OptIns[aidx][indices[1]]
- sender = from
+ if from != to {
+ if len(cinfo.OptIns[aidx]) > 0 {
+ indices := rand.Perm(len(cinfo.OptIns[aidx]))
+ from = cinfo.OptIns[aidx][indices[0]]
+ to = cinfo.OptIns[aidx][indices[1]]
+ sender = from
+ } else {
+ err = fmt.Errorf("asset %d has not been opted in by any account", aidx)
+ _, _ = fmt.Fprintf(os.Stdout, "error constructing transaction - %v\n", err)
+ return
+ }
}
txn, err = client.MakeUnsignedAssetSendTx(aidx, amt, to, "", "")
if err != nil {
@@ -792,12 +1038,12 @@ func (pps *WorkerState) constructTxn(from, to string, fee, amt, aidx uint64, cli
}
txn.Note = noteField[:]
txn.Lease = lease
- txn, err = client.FillUnsignedTxTemplate(from, 0, 0, cfg.MaxFee, txn)
+ txn, err = client.FillUnsignedTxTemplate(sender, 0, 0, cfg.MaxFee, txn)
if !cfg.Quiet {
- _, _ = fmt.Fprintf(os.Stdout, "Sending %d asset %d: %s -> %s\n", amt, aidx, from, to)
+ _, _ = fmt.Fprintf(os.Stdout, "Sending %d asset %d: %s -> %s\n", amt, aidx, sender, to)
}
} else {
- txn, err = client.ConstructPayment(from, to, fee, amt, noteField[:], "", lease, 0, 0)
+ txn, err = pps.constructPayment(from, to, fee, amt, noteField, "", lease)
if !cfg.Quiet {
_, _ = fmt.Fprintf(os.Stdout, "Sending %d : %s -> %s\n", amt, from, to)
}
@@ -825,6 +1071,87 @@ func (pps *WorkerState) constructTxn(from, to string, fee, amt, aidx uint64, cli
return
}
+// ConstructPayment builds a payment transaction to be signed
+// If the fee is 0, the function will use the suggested one form the network
+// Although firstValid and lastValid come pre-computed in a normal flow,
+// additional validation is done by computeValidityRounds:
+// if the lastValid is 0, firstValid + maxTxnLifetime will be used
+// if the firstValid is 0, lastRound + 1 will be used
+func (pps *WorkerState) constructPayment(from, to string, fee, amount uint64, note []byte, closeTo string, lease [32]byte) (transactions.Transaction, error) {
+ fromAddr, err := basics.UnmarshalChecksumAddress(from)
+ if err != nil {
+ return transactions.Transaction{}, err
+ }
+
+ var toAddr basics.Address
+ if to != "" {
+ toAddr, err = basics.UnmarshalChecksumAddress(to)
+ if err != nil {
+ return transactions.Transaction{}, err
+ }
+ }
+
+ // Get current round, protocol, genesis ID
+ var params v1.TransactionParams
+ for params.LastRound == 0 {
+ params = pps.getSuggestedParams()
+ }
+
+ cp, ok := config.Consensus[protocol.ConsensusVersion(params.ConsensusVersion)]
+ if !ok {
+ return transactions.Transaction{}, fmt.Errorf("ConstructPayment: unknown consensus protocol %s", params.ConsensusVersion)
+ }
+ fv := params.LastRound + 1
+ lv := fv + cp.MaxTxnLife - 1
+
+ tx := transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: transactions.Header{
+ Sender: fromAddr,
+ Fee: basics.MicroAlgos{Raw: fee},
+ FirstValid: basics.Round(fv),
+ LastValid: basics.Round(lv),
+ Lease: lease,
+ Note: note,
+ },
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: toAddr,
+ Amount: basics.MicroAlgos{Raw: amount},
+ },
+ }
+
+ // If requesting closing, put it in the transaction. The protocol might
+ // not support it, but in that case, better to fail the transaction,
+ // because the user explicitly asked for it, and it's not supported.
+ if closeTo != "" {
+ closeToAddr, err := basics.UnmarshalChecksumAddress(closeTo)
+ if err != nil {
+ return transactions.Transaction{}, err
+ }
+
+ tx.PaymentTxnFields.CloseRemainderTo = closeToAddr
+ }
+
+ tx.Header.GenesisID = params.GenesisID
+
+ // Check if the protocol supports genesis hash
+ if cp.SupportGenesisHash {
+ copy(tx.Header.GenesisHash[:], params.GenesisHash)
+ }
+
+ // Default to the suggested fee, if the caller didn't supply it
+ // Fee is tricky, should taken care last. We encode the final transaction to get the size post signing and encoding
+ // Then, we multiply it by the suggested fee per byte.
+ if fee == 0 {
+ tx.Fee = basics.MulAIntSaturate(basics.MicroAlgos{Raw: params.Fee}, tx.EstimateEncodedSize())
+ }
+ if tx.Fee.Raw < cp.MinTxnFee {
+ tx.Fee.Raw = cp.MinTxnFee
+ }
+
+ return tx, nil
+}
+
func signTxn(signer string, txn transactions.Transaction, accounts map[string]*pingPongAccount, cfg PpConfig) (stxn transactions.SignedTxn, err error) {
var psig crypto.Signature
diff --git a/test/e2e-go/cli/algod/cleanup_test.go b/test/e2e-go/cli/algod/cleanup_test.go
index ed8b8d0dd..bfad64877 100644
--- a/test/e2e-go/cli/algod/cleanup_test.go
+++ b/test/e2e-go/cli/algod/cleanup_test.go
@@ -29,6 +29,7 @@ import (
func TestNodeControllerCleanup(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/cli/algod/expect/algod_expect_test.go b/test/e2e-go/cli/algod/expect/algod_expect_test.go
index d7201b3f1..fd1568096 100644
--- a/test/e2e-go/cli/algod/expect/algod_expect_test.go
+++ b/test/e2e-go/cli/algod/expect/algod_expect_test.go
@@ -19,10 +19,14 @@ import (
"testing"
"github.com/algorand/go-algorand/test/framework/fixtures"
+ "github.com/algorand/go-algorand/test/partitiontest"
)
// TestAlgodWithExpect Process all expect script files with suffix Test.exp within the test/e2e-go/cli/algod/expect directory
func TestAlgodWithExpect(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
+
et := fixtures.MakeExpectTest(t)
et.Run()
}
diff --git a/test/e2e-go/cli/algod/stdstreams_test.go b/test/e2e-go/cli/algod/stdstreams_test.go
index 8e77ffd6c..08f2a3613 100644
--- a/test/e2e-go/cli/algod/stdstreams_test.go
+++ b/test/e2e-go/cli/algod/stdstreams_test.go
@@ -30,6 +30,7 @@ import (
func TestAlgodLogsToFile(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
diff --git a/test/e2e-go/cli/algoh/expect/algoh_expect_test.go b/test/e2e-go/cli/algoh/expect/algoh_expect_test.go
index 682183c49..004473ce7 100644
--- a/test/e2e-go/cli/algoh/expect/algoh_expect_test.go
+++ b/test/e2e-go/cli/algoh/expect/algoh_expect_test.go
@@ -23,6 +23,9 @@ import (
// TestAlgohWithExpect Process all expect script files with suffix Test.exp within the test/e2e-go/cli/algoh/expect directory
func TestAlgohWithExpect(t *testing.T) {
+ // partitiontest.PartitionTest(t)
+ // Causes double partition, so commented out on purpose
+ defer fixtures.ShutdownSynchronizedTest(t)
et := fixtures.MakeExpectTest(t)
et.Run()
}
diff --git a/test/e2e-go/cli/goal/account_test.go b/test/e2e-go/cli/goal/account_test.go
index 492b4c29d..d35e30705 100644
--- a/test/e2e-go/cli/goal/account_test.go
+++ b/test/e2e-go/cli/goal/account_test.go
@@ -28,6 +28,7 @@ const statusOffline = "[offline]"
const statusOnline = "[online]"
func TestAccountNew(t *testing.T) {
+ defer fixtures.ShutdownSynchronizedTest(t)
defer fixture.SetTestContext(t)()
a := require.New(fixtures.SynchronizedTest(t))
@@ -53,6 +54,7 @@ func TestAccountNew(t *testing.T) {
}
func TestAccountNewDuplicateFails(t *testing.T) {
+ defer fixtures.ShutdownSynchronizedTest(t)
defer fixture.SetTestContext(t)()
a := require.New(fixtures.SynchronizedTest(t))
@@ -68,6 +70,7 @@ func TestAccountNewDuplicateFails(t *testing.T) {
}
func TestAccountRename(t *testing.T) {
+ defer fixtures.ShutdownSynchronizedTest(t)
defer fixture.SetTestContext(t)()
a := require.New(fixtures.SynchronizedTest(t))
@@ -98,6 +101,7 @@ func TestAccountRename(t *testing.T) {
// Importing an account multiple times should not be considered an error by goal
func TestAccountMultipleImportRootKey(t *testing.T) {
+ defer fixtures.ShutdownSynchronizedTest(t)
defer fixture.SetTestContext(t)()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/cli/goal/clerk_test.go b/test/e2e-go/cli/goal/clerk_test.go
index 67aa79464..73fd2daa0 100644
--- a/test/e2e-go/cli/goal/clerk_test.go
+++ b/test/e2e-go/cli/goal/clerk_test.go
@@ -27,6 +27,7 @@ import (
)
func TestClerkSendNoteEncoding(t *testing.T) {
+ defer fixtures.ShutdownSynchronizedTest(t)
defer fixture.SetTestContext(t)()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/cli/goal/expect/catchpointCatchupWebProxy/webproxy.go b/test/e2e-go/cli/goal/expect/catchpointCatchupWebProxy/webproxy.go
index 77b7dac6e..8f7e2edaa 100644
--- a/test/e2e-go/cli/goal/expect/catchpointCatchupWebProxy/webproxy.go
+++ b/test/e2e-go/cli/goal/expect/catchpointCatchupWebProxy/webproxy.go
@@ -73,7 +73,7 @@ func main() {
fmt.Printf("%s\n", wp.GetListenAddress())
// Handle signals cleanly
- c := make(chan os.Signal)
+ c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
signal.Ignore(syscall.SIGHUP)
diff --git a/test/e2e-go/cli/goal/expect/goalAccountInfoTest.exp b/test/e2e-go/cli/goal/expect/goalAccountInfoTest.exp
index 063651a9a..4ba7ce173 100644
--- a/test/e2e-go/cli/goal/expect/goalAccountInfoTest.exp
+++ b/test/e2e-go/cli/goal/expect/goalAccountInfoTest.exp
@@ -111,7 +111,8 @@ Opted In Apps:
puts "Creating global state app"
set GSTATE_GLOBAL_BYTE_SLICES 10
set GSTATE_LOCAL_BYTE_SLICES 0
- set GSTATE_APP_ID [::AlgorandGoal::AppCreate $PRIMARY_WALLET_NAME "" $PRIMARY_ACCOUNT_ADDRESS ${TEAL_PROGS_DIR}/globwrite.teal "str:value_to_write" $GSTATE_GLOBAL_BYTE_SLICES $GSTATE_LOCAL_BYTE_SLICES ${TEAL_PROGS_DIR}/clear_program_state.teal $TEST_PRIMARY_NODE_DIR]
+ set GSTATE_EXTRA_PAGES 2
+ set GSTATE_APP_ID [::AlgorandGoal::AppCreateExPages $PRIMARY_WALLET_NAME "" $PRIMARY_ACCOUNT_ADDRESS ${TEAL_PROGS_DIR}/globwrite.teal "str:value_to_write" $GSTATE_GLOBAL_BYTE_SLICES $GSTATE_LOCAL_BYTE_SLICES ${TEAL_PROGS_DIR}/clear_program_state.teal $TEST_PRIMARY_NODE_DIR $GSTATE_EXTRA_PAGES]
puts "Creating local state app"
set LSTATE_GLOBAL_BYTE_SLICES 0
@@ -133,7 +134,7 @@ Held Assets:
\tID $CCOIN_ASSET_ID, C-Coin, balance 1000 units
\tID $DCOIN_ASSET_ID, D-Coin, balance 10.00 $DCOIN_UNIT_NAME (frozen)
Created Apps:
-\tID $GSTATE_APP_ID, global state used 0/0 uints, 1/$GSTATE_GLOBAL_BYTE_SLICES byte slices
+\tID $GSTATE_APP_ID, $GSTATE_EXTRA_PAGES extra pages, global state used 0/0 uints, 1/$GSTATE_GLOBAL_BYTE_SLICES byte slices
\tID $LSTATE_APP_ID, global state used 0/0 uints, 0/$LSTATE_GLOBAL_BYTE_SLICES byte slices
Opted In Apps:
\tID $LSTATE_APP_ID, local state used 0/1 uints, 1/$LSTATE_LOCAL_BYTE_SLICES byte slices"
diff --git a/test/e2e-go/cli/goal/expect/goalAccountTest.exp b/test/e2e-go/cli/goal/expect/goalAccountTest.exp
index c8add5a77..234ef5cec 100644
--- a/test/e2e-go/cli/goal/expect/goalAccountTest.exp
+++ b/test/e2e-go/cli/goal/expect/goalAccountTest.exp
@@ -32,6 +32,8 @@ if { [catch {
# Determine primary account
set PRIMARY_ACCOUNT_ADDRESS [::AlgorandGoal::GetHighestFundedAccountForWallet $PRIMARY_WALLET_NAME $TEST_PRIMARY_NODE_DIR]
+ set timeout 30
+
# try to generate an expired transaction for 5 times before giving up.
set TEST_TRANSACTION_EXPIRATION 5
while {$TEST_TRANSACTION_EXPIRATION > 0} {
diff --git a/test/e2e-go/cli/goal/expect/goalClerkGroupTest.exp b/test/e2e-go/cli/goal/expect/goalClerkGroupTest.exp
index 7a86effbd..c1f6f4d5e 100644
--- a/test/e2e-go/cli/goal/expect/goalClerkGroupTest.exp
+++ b/test/e2e-go/cli/goal/expect/goalClerkGroupTest.exp
@@ -28,6 +28,7 @@ if { [catch {
# Determine primary account
set PRIMARY_ACCOUNT_ADDRESS [::AlgorandGoal::GetHighestFundedAccountForWallet $PRIMARY_WALLET_NAME $TEST_PRIMARY_NODE_DIR]
+ set timeout 30
set FEE_AMOUNT 1000
set TXN_FILE1 "$TEST_PRIMARY_NODE_DIR/txns1"
diff --git a/test/e2e-go/cli/goal/expect/goalCmdFlagsTest.exp b/test/e2e-go/cli/goal/expect/goalCmdFlagsTest.exp
index 99638add5..d86cef47b 100644
--- a/test/e2e-go/cli/goal/expect/goalCmdFlagsTest.exp
+++ b/test/e2e-go/cli/goal/expect/goalCmdFlagsTest.exp
@@ -24,7 +24,7 @@ if { [catch {
TestGoalCommandLineFlags "goal node start -p :xxx:445" ".*is not a valid peer address.*"
TestGoalCommandLineFlags "goal node start -p {http://1.2.3.4:5050;:xxx:445}" ".*is not a valid peer address.*"
TestGoalCommandLineFlags "goal node start -p http://1.2.3.4:5050" "^Data directory not specified.*"
- TestGoalCommandLineFlags "goal node start -p {http://1.2.3.4:5050;5.6.7.8}" "^Data directory not specified.*"
+ TestGoalCommandLineFlags "goal node start -p {http://1.2.3.4:5050;5.6.7.8:1234}" "^Data directory not specified.*"
} EXCEPTION ] } {
puts "ERROR in Goal Start Validity test: $EXCEPTION"
diff --git a/test/e2e-go/cli/goal/expect/goalDryrunRestTest.exp b/test/e2e-go/cli/goal/expect/goalDryrunRestTest.exp
index 0d580723a..75d81faeb 100644
--- a/test/e2e-go/cli/goal/expect/goalDryrunRestTest.exp
+++ b/test/e2e-go/cli/goal/expect/goalDryrunRestTest.exp
@@ -4,13 +4,18 @@ log_user 1
proc TestGoalDryrun { DRREQ_FILE TEST_PRIMARY_NODE_DIR } {
set PASSED 0
+ set COST 0
set PROGRAM_TYPE ""
spawn goal clerk dryrun-remote -d $TEST_PRIMARY_NODE_DIR -D $DRREQ_FILE -v
expect {
timeout { ::AlgorandGoal::Abort "goal clerk dryrun-remote timeout" }
+ "cost:" {set COST 1; exp_continue}
-re {(ApprovalProgram)} {set PROGRAM_TYPE $expect_out(1,string); exp_continue}
"PASS" {set PASSED 1; close}
}
+ if { $COST == 0 } {
+ ::AlgorandGoal::Abort "Response does not have cost"
+ }
if { $PASSED == 0 } {
::AlgorandGoal::Abort "Program did not pass"
}
diff --git a/test/e2e-go/cli/goal/expect/goalExpectCommon.exp b/test/e2e-go/cli/goal/expect/goalExpectCommon.exp
index 1d8f9d0ed..273d02db9 100644
--- a/test/e2e-go/cli/goal/expect/goalExpectCommon.exp
+++ b/test/e2e-go/cli/goal/expect/goalExpectCommon.exp
@@ -112,7 +112,7 @@ proc ::AlgorandGoal::StartNode { TEST_ALGO_DIR {SYSTEMD_MANAGED "False"} {PEER_A
if { $SYSTEMD_MANAGED eq "True" } {
expect {
timeout { close; ::AlgorandGoal::Abort "Did not receive appropriate message during node start" }
- "^This node is managed by systemd, you must run the following command to make your desired state change to your node:*" { puts "Goal showed correct error message for systemd" ; close}
+ "^This node is using systemd and should be managed with systemctl*" { puts "Goal showed correct error message for systemd" ; close}
eof { ::AlgorandGoal::CheckEOF "Unable to start network" }
}
} else {
@@ -146,7 +146,7 @@ proc ::AlgorandGoal::StopNode { TEST_ALGO_DIR {SYSTEMD_MANAGED ""} } {
spawn goal node stop -d $TEST_ALGO_DIR
expect {
timeout { close; ::AlgorandGoal::Abort "Did not receive appropriate message during node stop" }
- "*This node is managed by systemd, you must run the following command to make your desired state change to your node:*" { puts "Goal showed correct error message for systemd" ; close}
+ "^This node is using systemd and should be managed with systemctl*" { puts "Goal showed correct error message for systemd" ; close}
eof { close; ::AlgorandGoal::Abort "Did not receive appropriate message before goal command completion" }
}
}
@@ -173,7 +173,7 @@ proc ::AlgorandGoal::RestartNode { TEST_ALGO_DIR {SYSTEMD_MANAGED ""} } {
spawn goal node restart -d $TEST_ALGO_DIR
expect {
timeout { close; ::AlgorandGoal::Abort "Did not receive appropriate message during node restart" }
- "^This node is managed by systemd, you must run the following command to make your desired state change to your node:*" { puts "Goal showed correct error message for systemd" ; close}
+ "^This node is using systemd and should be managed with systemctl*" { puts "Goal showed correct error message for systemd" ; close}
}
}
} EXCEPTION] } {
diff --git a/test/e2e-go/cli/goal/expect/goalNodeTest.exp b/test/e2e-go/cli/goal/expect/goalNodeTest.exp
index deb0a5466..efab678f1 100644
--- a/test/e2e-go/cli/goal/expect/goalNodeTest.exp
+++ b/test/e2e-go/cli/goal/expect/goalNodeTest.exp
@@ -79,7 +79,7 @@ if { [catch {
spawn goal node start -d $TEST_PRIMARY_NODE_DIR
expect {
timeout { close; ::AlgorandGoal::Abort "starting node exceeded timeout" }
- -re {^Algorand node failed to start: node exited with an error code, check node\.log for more details : exit status 1} {
+ -re {^Algorand node failed to start: node exited with an error code, check node\.log for more details : exit status \d+} {
puts "\nExpected failuire : node failed to start"
# wait until the eof signal is received
expect {
diff --git a/test/e2e-go/cli/goal/expect/goal_expect_test.go b/test/e2e-go/cli/goal/expect/goal_expect_test.go
index c094c4543..69964b03d 100644
--- a/test/e2e-go/cli/goal/expect/goal_expect_test.go
+++ b/test/e2e-go/cli/goal/expect/goal_expect_test.go
@@ -24,7 +24,9 @@ import (
// TestGoalWithExpect Process all expect script files with suffix Test.exp within the test/e2e-go/cli/goal/expect directory
func TestGoalWithExpect(t *testing.T) {
- t.Skip("goal expect test are disabled due to flakiness")
+ // partitiontest.PartitionTest(t)
+ // Causes double partition, so commented out on purpose
+ defer fixtures.ShutdownSynchronizedTest(t)
et := fixtures.MakeExpectTest(t)
et.Run()
}
diff --git a/test/e2e-go/cli/goal/expect/tealConsensusTest.exp b/test/e2e-go/cli/goal/expect/tealConsensusTest.exp
index a3c24d579..cd2b81cfd 100755
--- a/test/e2e-go/cli/goal/expect/tealConsensusTest.exp
+++ b/test/e2e-go/cli/goal/expect/tealConsensusTest.exp
@@ -68,7 +68,8 @@ if { [catch {
"\n" { ::AlgorandGoal::Abort $expect_out(buffer) }
}
- teal "$TEST_ROOT_DIR/big-app.teal" 2 4097 1 "int 0\nbalance\npop\n"
+ # MaxAppProgramLen = 2K * (1 + 3 pages max)
+ teal "$TEST_ROOT_DIR/big-app.teal" 2 8192 1 "int 0\nbalance\npop\n"
spawn goal clerk compile "$TEST_ROOT_DIR/big-app.teal"
expect {
-re {[A-Z2-9]{58}} { ::AlgorandGoal::Abort "hash" }
diff --git a/test/e2e-go/cli/goal/node_cleanup_test.go b/test/e2e-go/cli/goal/node_cleanup_test.go
index 857ad76c3..8a7b8f164 100644
--- a/test/e2e-go/cli/goal/node_cleanup_test.go
+++ b/test/e2e-go/cli/goal/node_cleanup_test.go
@@ -26,7 +26,9 @@ import (
)
func TestGoalNodeCleanup(t *testing.T) {
+ defer fixtures.ShutdownSynchronizedTest(t)
defer fixture.SetTestContext(t)()
+
a := require.New(fixtures.SynchronizedTest(t))
primaryDir := fixture.PrimaryDataDir()
diff --git a/test/e2e-go/cli/tealdbg/expect/tealdbgTest.exp b/test/e2e-go/cli/tealdbg/expect/tealdbgTest.exp
index a4fc773eb..7d7b84ab4 100644
--- a/test/e2e-go/cli/tealdbg/expect/tealdbgTest.exp
+++ b/test/e2e-go/cli/tealdbg/expect/tealdbgTest.exp
@@ -81,7 +81,7 @@ if { [catch {
spawn tealdbg debug -v $TEAL_PROG_FILE -p $PROTOCOL_VERSION_2 --remote-debugging-port 9392 --listen 127.0.0.1
expect {
timeout { puts "tealdbg debug timed out"; exit 1 }
- -re {Debug error: Program version \([0-9]+\) is beyond the maximum supported protocol version \([0-9]+\)} { set FAILED 1; close }
+ -re {Debug error: program version \([0-9]+\) is beyond the maximum supported protocol version \([0-9]+\)} { set FAILED 1; close }
}
if { $FAILED == 0 } {
puts "ERROR: the command should have failed"
diff --git a/test/e2e-go/cli/tealdbg/expect/tealdbg_expect_test.go b/test/e2e-go/cli/tealdbg/expect/tealdbg_expect_test.go
index 633e8f133..401344a06 100644
--- a/test/e2e-go/cli/tealdbg/expect/tealdbg_expect_test.go
+++ b/test/e2e-go/cli/tealdbg/expect/tealdbg_expect_test.go
@@ -23,6 +23,9 @@ import (
// TestTealdbgWithExpect processes all expect script files with suffix Test.exp within the test/e2e-go/cli/tealdbg/expect directory
func TestTealdbgWithExpect(t *testing.T) {
+ // partitiontest.PartitionTest(t)
+ // Causes double partition, so commented out on purpose
+ defer fixtures.ShutdownSynchronizedTest(t)
et := fixtures.MakeExpectTest(t)
et.Run()
}
diff --git a/test/e2e-go/features/catchup/basicCatchup_test.go b/test/e2e-go/features/catchup/basicCatchup_test.go
index ebb8870e2..ab77ec7b8 100644
--- a/test/e2e-go/features/catchup/basicCatchup_test.go
+++ b/test/e2e-go/features/catchup/basicCatchup_test.go
@@ -33,6 +33,7 @@ import (
func TestBasicCatchup(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
@@ -80,6 +81,7 @@ func TestBasicCatchup(t *testing.T) {
// The current versions are the original v1 and the upgraded to v2.1
func TestCatchupOverGossip(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
@@ -201,6 +203,7 @@ const consensusTestUnupgradedToProtocol = protocol.ConsensusVersion("test-unupgr
func TestStoppedCatchupOnUnsupported(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
diff --git a/test/e2e-go/features/catchup/catchpointCatchup_test.go b/test/e2e-go/features/catchup/catchpointCatchup_test.go
index 3d1e35ef2..1548f5599 100644
--- a/test/e2e-go/features/catchup/catchpointCatchup_test.go
+++ b/test/e2e-go/features/catchup/catchpointCatchup_test.go
@@ -81,6 +81,7 @@ func (ec *nodeExitErrorCollector) Print() {
func TestBasicCatchpointCatchup(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
diff --git a/test/e2e-go/features/compactcert/compactcert_test.go b/test/e2e-go/features/compactcert/compactcert_test.go
index e5f35c4fa..b56897e08 100644
--- a/test/e2e-go/features/compactcert/compactcert_test.go
+++ b/test/e2e-go/features/compactcert/compactcert_test.go
@@ -37,6 +37,7 @@ import (
func TestCompactCerts(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Skip("Disabling since they need work and shouldn't block releases")
t.Parallel()
diff --git a/test/e2e-go/features/multisig/multisig_test.go b/test/e2e-go/features/multisig/multisig_test.go
index 7e4958674..14673110f 100644
--- a/test/e2e-go/features/multisig/multisig_test.go
+++ b/test/e2e-go/features/multisig/multisig_test.go
@@ -33,6 +33,7 @@ import (
// try to transact with 3 sigs: expect success
func TestBasicMultisig(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
@@ -110,6 +111,7 @@ func TestBasicMultisig(t *testing.T) {
// create a 0-of-3 multisig address: expect failure
func TestZeroThreshold(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
@@ -139,6 +141,7 @@ func TestZeroThreshold(t *testing.T) {
// create a 3-of-0 multisig address: expect failure
func TestZeroSigners(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
@@ -164,6 +167,7 @@ func TestZeroSigners(t *testing.T) {
// then try to transact
func TestDuplicateKeys(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
diff --git a/test/e2e-go/features/participation/onlineOfflineParticipation_test.go b/test/e2e-go/features/participation/onlineOfflineParticipation_test.go
index bcb2b5551..7c817974e 100644
--- a/test/e2e-go/features/participation/onlineOfflineParticipation_test.go
+++ b/test/e2e-go/features/participation/onlineOfflineParticipation_test.go
@@ -34,6 +34,7 @@ import (
func TestParticipationKeyOnlyAccountParticipatesCorrectly(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -108,6 +109,8 @@ func waitForAccountToProposeBlock(a *require.Assertions, fixture *fixtures.RestC
// - When the account balance receives enough stake, it should be proposing after lookback rounds
func TestNewAccountCanGoOnlineAndParticipate(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
+
if testing.Short() {
t.Skip()
}
diff --git a/test/e2e-go/features/participation/overlappingParticipationKeys_test.go b/test/e2e-go/features/participation/overlappingParticipationKeys_test.go
index e3b9ca45b..c98cf7a9e 100644
--- a/test/e2e-go/features/participation/overlappingParticipationKeys_test.go
+++ b/test/e2e-go/features/participation/overlappingParticipationKeys_test.go
@@ -41,6 +41,7 @@ import (
func TestOverlappingParticipationKeys(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/participation/participationRewards_test.go b/test/e2e-go/features/participation/participationRewards_test.go
index 6faa5c7b3..b41b29397 100644
--- a/test/e2e-go/features/participation/participationRewards_test.go
+++ b/test/e2e-go/features/participation/participationRewards_test.go
@@ -78,6 +78,7 @@ func spendToNonParticipating(t *testing.T, fixture *fixtures.RestClientFixture,
func TestOnlineOfflineRewards(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
r := require.New(fixtures.SynchronizedTest(t))
@@ -136,6 +137,7 @@ func TestOnlineOfflineRewards(t *testing.T) {
func TestPartkeyOnlyRewards(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if runtime.GOOS == "darwin" {
t.Skip()
@@ -187,6 +189,7 @@ func TestPartkeyOnlyRewards(t *testing.T) {
func TestRewardUnitThreshold(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
r := require.New(fixtures.SynchronizedTest(t))
@@ -308,6 +311,7 @@ var defaultPoolAddr = basics.Address{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0
func TestRewardRateRecalculation(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
r := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/partitionRecovery/partitionRecovery_test.go b/test/e2e-go/features/partitionRecovery/partitionRecovery_test.go
index 7e7823093..d686ed798 100644
--- a/test/e2e-go/features/partitionRecovery/partitionRecovery_test.go
+++ b/test/e2e-go/features/partitionRecovery/partitionRecovery_test.go
@@ -32,6 +32,7 @@ const inducePartitionTime = 6 * time.Second // Try to minimize change of proc
func TestBasicPartitionRecovery(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
@@ -78,6 +79,7 @@ func TestBasicPartitionRecovery(t *testing.T) {
func TestPartitionRecoverySwapStartup(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
@@ -100,6 +102,7 @@ func TestPartitionRecoverySwapStartup(t *testing.T) {
func TestPartitionRecoveryStaggerRestart(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
@@ -135,6 +138,10 @@ func runTestWithStaggeredStopStart(t *testing.T, fixture *fixtures.RestClientFix
// Stop Node1
nc1.FullStop()
+ status, err := fixture.LibGoalClient.Status()
+ a.NoError(err)
+ roundAfterStop := status.LastRound
+
time.Sleep(inducePartitionTime)
// Use the fixture to start the node again so it supplies the correct peer addresses
@@ -152,10 +159,10 @@ func runTestWithStaggeredStopStart(t *testing.T, fixture *fixtures.RestClientFix
a.NoError(err)
// Now wait for us to make progress again.
- status, err := fixture.LibGoalClient.Status()
+ status, err = fixture.LibGoalClient.Status()
a.NoError(err)
- a.Equal(waitForRound, status.LastRound, "We should not have made progress since stopping the first node")
+ a.Equal(roundAfterStop, status.LastRound, "We should not have made progress since stopping the first node")
err = fixture.WaitForRound(status.LastRound+1, partitionRecoveryTime)
a.NoError(err)
@@ -163,6 +170,7 @@ func runTestWithStaggeredStopStart(t *testing.T, fixture *fixtures.RestClientFix
func TestBasicPartitionRecoveryPartOffline(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
@@ -193,6 +201,10 @@ func TestBasicPartitionRecoveryPartOffline(t *testing.T) {
// Stop Node1
nc1.FullStop()
+ status, err := fixture.LibGoalClient.Status()
+ a.NoError(err)
+ roundAfterStop := status.LastRound
+
// Stop the 2nd node and give network a chance to stall
nc2, err := fixture.GetNodeController("Node2")
a.NoError(err)
@@ -205,10 +217,10 @@ func TestBasicPartitionRecoveryPartOffline(t *testing.T) {
a.NoError(err)
// Now wait for us to make progress again.
- status, err := fixture.LibGoalClient.Status()
+ status, err = fixture.LibGoalClient.Status()
a.NoError(err)
- a.Equal(waitForRound, status.LastRound, "We should not have made progress since stopping the first node")
+ a.Equal(roundAfterStop, status.LastRound, "We should not have made progress since stopping the first node")
err = fixture.WaitForRound(status.LastRound+1, partitionRecoveryTime)
a.NoError(err)
@@ -216,6 +228,7 @@ func TestBasicPartitionRecoveryPartOffline(t *testing.T) {
func TestPartitionHalfOffline(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
@@ -253,12 +266,16 @@ func TestPartitionHalfOffline(t *testing.T) {
a.NoError(err)
nc3.FullStop()
+ status, err := client.Status()
+ a.NoError(err)
+ roundAfterStop := status.LastRound
+
time.Sleep(inducePartitionTime)
// Get main client to monitor
- status, err := client.Status()
+ status, err = client.Status()
a.NoError(err)
- a.Equal(waitForRound, status.LastRound, "We should not have made progress since stopping the nodes")
+ a.Equal(roundAfterStop, status.LastRound, "We should not have made progress since stopping the nodes")
// Start 40 of 50% of the stake
_, err = fixture.StartNode(nc1.GetDataDir())
diff --git a/test/e2e-go/features/teal/compile_test.go b/test/e2e-go/features/teal/compile_test.go
index f042d318f..4db988bd4 100644
--- a/test/e2e-go/features/teal/compile_test.go
+++ b/test/e2e-go/features/teal/compile_test.go
@@ -30,6 +30,7 @@ import (
func TestTealCompile(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
diff --git a/test/e2e-go/features/transactions/accountv2_test.go b/test/e2e-go/features/transactions/accountv2_test.go
index a0b0db464..b5cd81afb 100644
--- a/test/e2e-go/features/transactions/accountv2_test.go
+++ b/test/e2e-go/features/transactions/accountv2_test.go
@@ -77,6 +77,7 @@ func checkEvalDelta(t *testing.T, client *libgoal.Client, startRnd, endRnd uint6
func TestAccountInformationV2(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/transactions/app_pages_test.go b/test/e2e-go/features/transactions/app_pages_test.go
index e76e88888..2387ecfad 100644
--- a/test/e2e-go/features/transactions/app_pages_test.go
+++ b/test/e2e-go/features/transactions/app_pages_test.go
@@ -33,6 +33,7 @@ import (
func TestExtraProgramPages(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/transactions/application_test.go b/test/e2e-go/features/transactions/application_test.go
index 5ad255790..19de8ad39 100644
--- a/test/e2e-go/features/transactions/application_test.go
+++ b/test/e2e-go/features/transactions/application_test.go
@@ -32,12 +32,12 @@ import (
"github.com/algorand/go-algorand/test/partitiontest"
)
-func checkEqual(expected []basics.LogItem, actual []basics.LogItem) bool {
+func checkEqual(expected []string, actual []string) bool {
if len(expected) != len(actual) {
return false
}
for i, e := range expected {
- if !e.Equal(actual[i]) {
+ if e != actual[i] {
return false
}
}
@@ -46,6 +46,7 @@ func checkEqual(expected []basics.LogItem, actual []basics.LogItem) bool {
func TestApplication(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -113,12 +114,12 @@ log
round, err = client.CurrentRound()
a.NoError(err)
- logs := make([]basics.LogItem, 32)
+ logs := make([]string, 32)
for i := range logs {
- logs[i] = basics.LogItem{ID: 0, Message: "a"}
+ logs[i] = "a"
}
- logs[30] = basics.LogItem{ID: 0, Message: "b"}
- logs[31] = basics.LogItem{ID: 0, Message: "c"}
+ logs[30] = "b"
+ logs[31] = "c"
b, err := client.BookkeepingBlock(round)
for _, ps := range b.Payset {
diff --git a/test/e2e-go/features/transactions/asset_test.go b/test/e2e-go/features/transactions/asset_test.go
index ca09258f5..03cf40744 100644
--- a/test/e2e-go/features/transactions/asset_test.go
+++ b/test/e2e-go/features/transactions/asset_test.go
@@ -55,6 +55,7 @@ func helperFillSignBroadcast(client libgoal.Client, wh []byte, sender string, tx
func TestAssetValidRounds(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -188,6 +189,7 @@ func TestAssetValidRounds(t *testing.T) {
func TestAssetConfig(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
@@ -425,6 +427,7 @@ func TestAssetConfig(t *testing.T) {
func TestAssetInformation(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -519,6 +522,7 @@ func TestAssetInformation(t *testing.T) {
func TestAssetGroupCreateSendDestroy(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -662,6 +666,7 @@ func TestAssetGroupCreateSendDestroy(t *testing.T) {
func TestAssetSend(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -911,6 +916,7 @@ func TestAssetSend(t *testing.T) {
func TestAssetCreateWaitRestartDelete(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a, fixture, client, account0 := setupTestAndNetwork(t, "", nil)
defer fixture.Shutdown()
@@ -974,6 +980,7 @@ func TestAssetCreateWaitRestartDelete(t *testing.T) {
func TestAssetCreateWaitBalLookbackDelete(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
if testing.Short() {
t.Skip()
diff --git a/test/e2e-go/features/transactions/close_account_test.go b/test/e2e-go/features/transactions/close_account_test.go
index a1be10b0b..6ce754479 100644
--- a/test/e2e-go/features/transactions/close_account_test.go
+++ b/test/e2e-go/features/transactions/close_account_test.go
@@ -28,6 +28,7 @@ import (
func TestAccountsCanClose(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/transactions/group_test.go b/test/e2e-go/features/transactions/group_test.go
index 47f30ffc0..f17e25d37 100644
--- a/test/e2e-go/features/transactions/group_test.go
+++ b/test/e2e-go/features/transactions/group_test.go
@@ -32,6 +32,7 @@ import (
func TestGroupTransactions(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -104,6 +105,7 @@ func TestGroupTransactions(t *testing.T) {
func TestGroupTransactionsDifferentSizes(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -212,6 +214,7 @@ func TestGroupTransactionsDifferentSizes(t *testing.T) {
func TestGroupTransactionsSubmission(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/transactions/lease_test.go b/test/e2e-go/features/transactions/lease_test.go
index 3e96cee5c..2d34d3d34 100644
--- a/test/e2e-go/features/transactions/lease_test.go
+++ b/test/e2e-go/features/transactions/lease_test.go
@@ -29,6 +29,7 @@ import (
func TestLeaseTransactionsSameSender(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -90,6 +91,7 @@ func TestLeaseTransactionsSameSender(t *testing.T) {
func TestLeaseRegressionFaultyFirstValidCheckOld_2f3880f7(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -164,6 +166,7 @@ func TestLeaseRegressionFaultyFirstValidCheckOld_2f3880f7(t *testing.T) {
func TestLeaseRegressionFaultyFirstValidCheckNew_2f3880f7(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -225,6 +228,7 @@ func TestLeaseRegressionFaultyFirstValidCheckNew_2f3880f7(t *testing.T) {
func TestLeaseTransactionsSameSenderDifferentLease(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -288,6 +292,7 @@ func TestLeaseTransactionsSameSenderDifferentLease(t *testing.T) {
func TestLeaseTransactionsDifferentSender(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -364,6 +369,7 @@ func TestLeaseTransactionsDifferentSender(t *testing.T) {
func TestOverlappingLeases(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/transactions/onlineStatusChange_test.go b/test/e2e-go/features/transactions/onlineStatusChange_test.go
index d4f153fc1..ae11235be 100644
--- a/test/e2e-go/features/transactions/onlineStatusChange_test.go
+++ b/test/e2e-go/features/transactions/onlineStatusChange_test.go
@@ -32,12 +32,14 @@ const transactionFee = uint64(0)
func TestAccountsCanChangeOnlineState(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
testAccountsCanChangeOnlineState(t, filepath.Join("nettemplates", "TwoNodesPartlyOffline.json"))
}
func TestAccountsCanChangeOnlineStateInTheFuture(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
testAccountsCanChangeOnlineState(t, filepath.Join("nettemplates", "TwoNodesPartlyOfflineVFuture.json"))
}
diff --git a/test/e2e-go/features/transactions/proof_test.go b/test/e2e-go/features/transactions/proof_test.go
index 76c144dd5..2ef4b8e48 100644
--- a/test/e2e-go/features/transactions/proof_test.go
+++ b/test/e2e-go/features/transactions/proof_test.go
@@ -31,6 +31,7 @@ import (
func TestTxnMerkleProof(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/features/transactions/sendReceive_test.go b/test/e2e-go/features/transactions/sendReceive_test.go
index 0c0ac5cf6..fadf5b620 100644
--- a/test/e2e-go/features/transactions/sendReceive_test.go
+++ b/test/e2e-go/features/transactions/sendReceive_test.go
@@ -43,6 +43,7 @@ func GenerateRandomBytes(n int) []byte {
// as they send each other money many times
func TestAccountsCanSendMoney(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
numberOfSends := 25
if testing.Short() {
@@ -54,6 +55,8 @@ func TestAccountsCanSendMoney(t *testing.T) {
// this test checks that two accounts' balances stay up to date
// as they send each other money many times
func TestDevModeAccountsCanSendMoney(t *testing.T) {
+ defer fixtures.ShutdownSynchronizedTest(t)
+
numberOfSends := 25
if testing.Short() {
numberOfSends = 3
diff --git a/test/e2e-go/kmd/e2e_kmd_server_client_test.go b/test/e2e-go/kmd/e2e_kmd_server_client_test.go
index 3aa417558..7b9c36ca7 100644
--- a/test/e2e-go/kmd/e2e_kmd_server_client_test.go
+++ b/test/e2e-go/kmd/e2e_kmd_server_client_test.go
@@ -30,6 +30,7 @@ import (
func TestServerStartsStopsSuccessfully(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -46,6 +47,7 @@ func TestServerStartsStopsSuccessfully(t *testing.T) {
func TestBadAuthFails(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
@@ -67,6 +69,7 @@ func TestBadAuthFails(t *testing.T) {
func TestGoodAuthSucceeds(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
diff --git a/test/e2e-go/kmd/e2e_kmd_sqlite_test.go b/test/e2e-go/kmd/e2e_kmd_sqlite_test.go
index a724e1e28..833cc2866 100644
--- a/test/e2e-go/kmd/e2e_kmd_sqlite_test.go
+++ b/test/e2e-go/kmd/e2e_kmd_sqlite_test.go
@@ -28,6 +28,7 @@ import (
func TestNonAbsSQLiteWalletConfigFails(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -46,6 +47,7 @@ func TestNonAbsSQLiteWalletConfigFails(t *testing.T) {
func TestAbsSQLiteWalletConfigSucceeds(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
diff --git a/test/e2e-go/kmd/e2e_kmd_wallet_keyops_test.go b/test/e2e-go/kmd/e2e_kmd_wallet_keyops_test.go
index 18c7f6d10..122f3203e 100644
--- a/test/e2e-go/kmd/e2e_kmd_wallet_keyops_test.go
+++ b/test/e2e-go/kmd/e2e_kmd_wallet_keyops_test.go
@@ -34,6 +34,7 @@ import (
func TestGenerateAndListKeys(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -88,6 +89,7 @@ func TestGenerateAndListKeys(t *testing.T) {
func TestImportKey(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -140,6 +142,7 @@ func TestImportKey(t *testing.T) {
func TestExportKey(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -204,6 +207,7 @@ func TestExportKey(t *testing.T) {
func TestDeleteKey(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -270,6 +274,7 @@ func TestDeleteKey(t *testing.T) {
func TestSignTransaction(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -330,6 +335,7 @@ func TestSignTransaction(t *testing.T) {
func TestSignProgram(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -431,6 +437,7 @@ func BenchmarkSignTransaction(b *testing.B) {
func TestMasterKeyImportExport(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -600,6 +607,7 @@ func TestMasterKeyImportExport(t *testing.T) {
func TestMasterKeyGeneratePastImportedKeys(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
diff --git a/test/e2e-go/kmd/e2e_kmd_wallet_multisig_test.go b/test/e2e-go/kmd/e2e_kmd_wallet_multisig_test.go
index 95598721d..53fb07a02 100644
--- a/test/e2e-go/kmd/e2e_kmd_wallet_multisig_test.go
+++ b/test/e2e-go/kmd/e2e_kmd_wallet_multisig_test.go
@@ -41,6 +41,7 @@ func addrToPK(t *testing.T, addr string) crypto.PublicKey {
func TestMultisigImportList(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -90,6 +91,7 @@ func TestMultisigImportList(t *testing.T) {
func TestMultisigExportDelete(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -162,6 +164,7 @@ func TestMultisigExportDelete(t *testing.T) {
func TestMultisigSign(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -237,6 +240,7 @@ func TestMultisigSign(t *testing.T) {
func TestMultisigSignWithSigner(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -319,6 +323,7 @@ func TestMultisigSignWithSigner(t *testing.T) {
func TestMultisigSignWithWrongSigner(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -378,6 +383,7 @@ func TestMultisigSignWithWrongSigner(t *testing.T) {
func TestMultisigSignProgram(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
diff --git a/test/e2e-go/kmd/e2e_kmd_wallet_test.go b/test/e2e-go/kmd/e2e_kmd_wallet_test.go
index 26eabc0e8..a08ff861f 100644
--- a/test/e2e-go/kmd/e2e_kmd_wallet_test.go
+++ b/test/e2e-go/kmd/e2e_kmd_wallet_test.go
@@ -29,6 +29,7 @@ import (
func TestWalletCreation(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -81,6 +82,7 @@ func TestWalletCreation(t *testing.T) {
func TestBlankWalletCreation(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -116,6 +118,7 @@ func TestBlankWalletCreation(t *testing.T) {
func TestWalletRename(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -196,6 +199,7 @@ func TestWalletRename(t *testing.T) {
func TestWalletSessionRelease(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -238,6 +242,7 @@ func TestWalletSessionRelease(t *testing.T) {
func TestWalletSessionRenew(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
@@ -286,6 +291,7 @@ func TestWalletSessionRenew(t *testing.T) {
func TestWalletSessionExpiry(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
t.Parallel()
diff --git a/test/e2e-go/restAPI/restClient_test.go b/test/e2e-go/restAPI/restClient_test.go
index 69db074c8..49d05ae4a 100644
--- a/test/e2e-go/restAPI/restClient_test.go
+++ b/test/e2e-go/restAPI/restClient_test.go
@@ -18,7 +18,7 @@ package restapi
import (
"context"
- "encoding/base64"
+ "encoding/hex"
"errors"
"flag"
"math"
@@ -191,6 +191,7 @@ func waitForTransaction(t *testing.T, testClient libgoal.Client, fromAddress, tx
func TestClientCanGetStatus(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -207,6 +208,7 @@ func TestClientCanGetStatus(t *testing.T) {
func TestClientCanGetStatusAfterBlock(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -222,6 +224,7 @@ func TestClientCanGetStatusAfterBlock(t *testing.T) {
func TestTransactionsByAddr(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
var localFixture fixtures.RestClientFixture
@@ -270,6 +273,7 @@ func TestTransactionsByAddr(t *testing.T) {
func TestClientCanGetVersion(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -281,6 +285,7 @@ func TestClientCanGetVersion(t *testing.T) {
func TestClientCanGetSuggestedFee(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -292,6 +297,7 @@ func TestClientCanGetSuggestedFee(t *testing.T) {
func TestClientCanGetMinTxnFee(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -303,6 +309,7 @@ func TestClientCanGetMinTxnFee(t *testing.T) {
func TestClientCanGetBlockInfo(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -315,6 +322,7 @@ func TestClientCanGetBlockInfo(t *testing.T) {
func TestClientRejectsBadFromAddressWhenSending(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -331,6 +339,7 @@ func TestClientRejectsBadFromAddressWhenSending(t *testing.T) {
func TestClientRejectsBadToAddressWhenSending(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -347,6 +356,7 @@ func TestClientRejectsBadToAddressWhenSending(t *testing.T) {
func TestClientRejectsMutatedFromAddressWhenSending(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -370,6 +380,7 @@ func TestClientRejectsMutatedFromAddressWhenSending(t *testing.T) {
func TestClientRejectsMutatedToAddressWhenSending(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -393,6 +404,7 @@ func TestClientRejectsMutatedToAddressWhenSending(t *testing.T) {
func TestClientRejectsSendingMoneyFromAccountForWhichItHasNoKey(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -409,6 +421,7 @@ func TestClientRejectsSendingMoneyFromAccountForWhichItHasNoKey(t *testing.T) {
func TestClientOversizedNote(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -434,6 +447,7 @@ func TestClientOversizedNote(t *testing.T) {
func TestClientCanSendAndGetNote(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -459,6 +473,7 @@ func TestClientCanSendAndGetNote(t *testing.T) {
func TestClientCanGetTransactionStatus(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -483,6 +498,7 @@ func TestClientCanGetTransactionStatus(t *testing.T) {
func TestAccountBalance(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -512,6 +528,7 @@ func TestAccountBalance(t *testing.T) {
func TestAccountParticipationInfo(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -575,6 +592,7 @@ func TestAccountParticipationInfo(t *testing.T) {
func TestSupply(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -588,6 +606,7 @@ func TestSupply(t *testing.T) {
func TestClientCanGetGoRoutines(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -602,6 +621,7 @@ func TestClientCanGetGoRoutines(t *testing.T) {
func TestSendingTooMuchFails(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -643,6 +663,7 @@ func TestSendingTooMuchFails(t *testing.T) {
func TestSendingFromEmptyAccountFails(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -682,6 +703,7 @@ func TestSendingFromEmptyAccountFails(t *testing.T) {
func TestSendingTooLittleToEmptyAccountFails(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -714,6 +736,7 @@ func TestSendingTooLittleToEmptyAccountFails(t *testing.T) {
func TestSendingLowFeeFails(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
defer fixture.SetTestContext(t)()
@@ -749,6 +772,7 @@ func TestSendingLowFeeFails(t *testing.T) {
func TestSendingNotClosingAccountFails(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
// use a local fixture because we might really mess with the balances
@@ -795,6 +819,7 @@ func TestSendingNotClosingAccountFails(t *testing.T) {
func TestClientCanGetPendingTransactions(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
var localFixture fixtures.RestClientFixture
@@ -828,6 +853,7 @@ func TestClientCanGetPendingTransactions(t *testing.T) {
func TestClientTruncatesPendingTransactions(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
var localFixture fixtures.RestClientFixture
@@ -868,6 +894,7 @@ func TestClientTruncatesPendingTransactions(t *testing.T) {
func TestClientPrioritizesPendingTransactions(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Skip("new FIFO pool does not have prioritization")
a := require.New(fixtures.SynchronizedTest(t))
@@ -910,6 +937,7 @@ func TestClientPrioritizesPendingTransactions(t *testing.T) {
func TestClientCanGetPendingTransactionInfo(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
var localFixture fixtures.RestClientFixture
@@ -990,12 +1018,10 @@ return
a.NotNil(txn.Logs)
a.Equal(32, len(*txn.Logs))
for i, l := range *txn.Logs {
- a.Equal(*txn.ApplicationIndex, l.Id)
- assert.Equal(t, base64.StdEncoding.EncodeToString([]byte(string(rune('B'+i)))), l.Value)
+ assert.Equal(t, []byte(string(rune('B'+i))), l)
}
//check non-create app call
- expectedAppID := *txn.ApplicationIndex
wh, err = testClient.GetUnencryptedWalletHandle()
a.NoError(err)
addresses, err = testClient.ListAddresses(wh)
@@ -1029,8 +1055,125 @@ return
a.NotNil(txn.Logs)
a.Equal(32, len(*txn.Logs))
for i, l := range *txn.Logs {
- a.Equal(expectedAppID, l.Id)
- assert.Equal(t, base64.StdEncoding.EncodeToString([]byte(string(rune('B'+i)))), l.Value)
+ assert.Equal(t, []byte(string(rune('B'+i))), l)
}
}
+
+func TestPendingTransactionInfoInnerTxnAssetCreate(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ a := require.New(fixtures.SynchronizedTest(t))
+ var localFixture fixtures.RestClientFixture
+ localFixture.Setup(t, filepath.Join("nettemplates", "TwoNodes50EachFuture.json"))
+ defer localFixture.Shutdown()
+
+ testClient := localFixture.LibGoalClient
+
+ testClient.WaitForRound(1)
+
+ testClient.SetAPIVersionAffinity(algodclient.APIVersionV2, kmdclient.APIVersionV1)
+
+ wh, err := testClient.GetUnencryptedWalletHandle()
+ a.NoError(err)
+ addresses, err := testClient.ListAddresses(wh)
+ a.NoError(err)
+ _, someAddress := getMaxBalAddr(t, testClient, addresses)
+ if someAddress == "" {
+ t.Error("no addr with funds")
+ }
+ a.NoError(err)
+
+ prog := `#pragma version 5
+txn ApplicationID
+bz end
+itxn_begin
+int acfg
+itxn_field TypeEnum
+int 1000000
+itxn_field ConfigAssetTotal
+int 3
+itxn_field ConfigAssetDecimals
+byte "oz"
+itxn_field ConfigAssetUnitName
+byte "Gold"
+itxn_field ConfigAssetName
+byte "https://gold.rush/"
+itxn_field ConfigAssetURL
+byte 0x67f0cd61653bd34316160bc3f5cd3763c85b114d50d38e1f4e72c3b994411e7b
+itxn_field ConfigAssetMetadataHash
+itxn_submit
+end:
+int 1
+return
+`
+ ops, err := logic.AssembleString(prog)
+ approv := ops.Program
+ ops, err = logic.AssembleString("#pragma version 5 \nint 1")
+ clst := ops.Program
+
+ gl := basics.StateSchema{}
+ lc := basics.StateSchema{}
+
+ // create app
+ appCreateTxn, err := testClient.MakeUnsignedApplicationCallTx(0, nil, nil, nil, nil, transactions.NoOpOC, approv, clst, gl, lc, 0)
+ a.NoError(err)
+ appCreateTxn, err = testClient.FillUnsignedTxTemplate(someAddress, 0, 0, 0, appCreateTxn)
+ a.NoError(err)
+ appCreateTxID, err := testClient.SignAndBroadcastTransaction(wh, nil, appCreateTxn)
+ a.NoError(err)
+ _, err = waitForTransaction(t, testClient, someAddress, appCreateTxID, 30*time.Second)
+ a.NoError(err)
+
+ // get app ID
+ submittedAppCreateTxn, err := testClient.PendingTransactionInformationV2(appCreateTxID)
+ a.NoError(err)
+ a.NotNil(submittedAppCreateTxn.ApplicationIndex)
+ createdAppID := basics.AppIndex(*submittedAppCreateTxn.ApplicationIndex)
+ a.Greater(uint64(createdAppID), uint64(0))
+
+ // fund app account
+ appFundTxn, err := testClient.SendPaymentFromWallet(wh, nil, someAddress, createdAppID.Address().String(), 0, 1_000_000, nil, "", 0, 0)
+ a.NoError(err)
+ appFundTxID := appFundTxn.ID()
+ _, err = waitForTransaction(t, testClient, someAddress, appFundTxID.String(), 30*time.Second)
+ a.NoError(err)
+
+ // call app, which will issue an ASA create inner txn
+ appCallTxn, err := testClient.MakeUnsignedAppNoOpTx(uint64(createdAppID), nil, nil, nil, nil)
+ a.NoError(err)
+ appCallTxn, err = testClient.FillUnsignedTxTemplate(someAddress, 0, 0, 0, appCallTxn)
+ a.NoError(err)
+ appCallTxnTxID, err := testClient.SignAndBroadcastTransaction(wh, nil, appCallTxn)
+ a.NoError(err)
+ _, err = waitForTransaction(t, testClient, someAddress, appCallTxnTxID, 30*time.Second)
+ a.NoError(err)
+
+ // verify pending txn info of outer txn
+ submittedAppCallTxn, err := testClient.PendingTransactionInformationV2(appCallTxnTxID)
+ a.NoError(err)
+ a.Nil(submittedAppCallTxn.ApplicationIndex)
+ a.Nil(submittedAppCallTxn.AssetIndex)
+ a.NotNil(submittedAppCallTxn.InnerTxns)
+ a.Len(*submittedAppCallTxn.InnerTxns, 1)
+
+ // verify pending txn info of inner txn
+ innerTxn := (*submittedAppCallTxn.InnerTxns)[0]
+ a.Nil(innerTxn.ApplicationIndex)
+ a.NotNil(innerTxn.AssetIndex)
+ createdAssetID := *innerTxn.AssetIndex
+ a.Greater(createdAssetID, uint64(0))
+
+ createdAssetInfo, err := testClient.AssetInformationV2(createdAssetID)
+ a.NoError(err)
+ a.Equal(createdAssetID, createdAssetInfo.Index)
+ a.Equal(createdAppID.Address().String(), createdAssetInfo.Params.Creator)
+ a.Equal(uint64(1000000), createdAssetInfo.Params.Total)
+ a.Equal(uint64(3), createdAssetInfo.Params.Decimals)
+ a.Equal("oz", *createdAssetInfo.Params.UnitName)
+ a.Equal("Gold", *createdAssetInfo.Params.Name)
+ a.Equal("https://gold.rush/", *createdAssetInfo.Params.Url)
+ expectedMetadata, err := hex.DecodeString("67f0cd61653bd34316160bc3f5cd3763c85b114d50d38e1f4e72c3b994411e7b")
+ a.NoError(err)
+ a.Equal(expectedMetadata, *createdAssetInfo.Params.MetadataHash)
+}
diff --git a/test/e2e-go/stress/transactions/createManyAndGoOnline_test.go b/test/e2e-go/stress/transactions/createManyAndGoOnline_test.go
index 9e8ce85a6..318a0f138 100644
--- a/test/e2e-go/stress/transactions/createManyAndGoOnline_test.go
+++ b/test/e2e-go/stress/transactions/createManyAndGoOnline_test.go
@@ -50,6 +50,7 @@ func cascadeCreateAndFundAccounts(amountToSend, transactionFee uint64, fundingAc
// sends them all money, and sends them online
func TestManyAccountsCanGoOnline(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
t.Parallel()
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/upgrades/application_support_test.go b/test/e2e-go/upgrades/application_support_test.go
index 6b0827b4e..20b7f4e05 100644
--- a/test/e2e-go/upgrades/application_support_test.go
+++ b/test/e2e-go/upgrades/application_support_test.go
@@ -72,6 +72,7 @@ func makeApplicationUpgradeConsensus(t *testing.T) (appConsensus config.Consensu
// any application transaction and after the upgrade is complete, it would support that.
func TestApplicationsUpgradeOverREST(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
smallLambdaMs := 500
consensus := makeApplicationUpgradeConsensus(t)
@@ -302,6 +303,7 @@ int 1
// any application transaction and after the upgrade is complete, it would support that.
func TestApplicationsUpgradeOverGossip(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
smallLambdaMs := 500
diff --git a/test/e2e-go/upgrades/rekey_support_test.go b/test/e2e-go/upgrades/rekey_support_test.go
index 22975ef0e..e6a6a58ab 100644
--- a/test/e2e-go/upgrades/rekey_support_test.go
+++ b/test/e2e-go/upgrades/rekey_support_test.go
@@ -33,6 +33,7 @@ import (
// TestRekeyUpgrade tests that the rekey does not work before the upgrade and works well after
func TestRekeyUpgrade(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
a := require.New(fixtures.SynchronizedTest(t))
diff --git a/test/e2e-go/upgrades/send_receive_upgrade_test.go b/test/e2e-go/upgrades/send_receive_upgrade_test.go
index f7b58949a..b67a5b21d 100644
--- a/test/e2e-go/upgrades/send_receive_upgrade_test.go
+++ b/test/e2e-go/upgrades/send_receive_upgrade_test.go
@@ -45,30 +45,35 @@ func GenerateRandomBytes(n int) []byte {
// across a protocol upgrade.
func TestAccountsCanSendMoneyAcrossUpgradeV15toV16(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
testAccountsCanSendMoneyAcrossUpgrade(t, filepath.Join("nettemplates", "TwoNodes50EachV15Upgrade.json"))
}
func TestAccountsCanSendMoneyAcrossUpgradeV21toV22(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
testAccountsCanSendMoneyAcrossUpgrade(t, filepath.Join("nettemplates", "TwoNodes50EachV21Upgrade.json"))
}
func TestAccountsCanSendMoneyAcrossUpgradeV22toV23(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
testAccountsCanSendMoneyAcrossUpgrade(t, filepath.Join("nettemplates", "TwoNodes50EachV22Upgrade.json"))
}
func TestAccountsCanSendMoneyAcrossUpgradeV23toV24(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
testAccountsCanSendMoneyAcrossUpgrade(t, filepath.Join("nettemplates", "TwoNodes50EachV23Upgrade.json"))
}
func TestAccountsCanSendMoneyAcrossUpgradeV24toV25(t *testing.T) {
partitiontest.PartitionTest(t)
+ defer fixtures.ShutdownSynchronizedTest(t)
testAccountsCanSendMoneyAcrossUpgrade(t, filepath.Join("nettemplates", "TwoNodes50EachV24Upgrade.json"))
}
diff --git a/test/framework/fixtures/expectFixture.go b/test/framework/fixtures/expectFixture.go
index 3620c1368..377bce502 100644
--- a/test/framework/fixtures/expectFixture.go
+++ b/test/framework/fixtures/expectFixture.go
@@ -18,6 +18,7 @@ package fixtures
import (
"bytes"
+ "fmt"
"io/ioutil"
"os"
"os/exec"
@@ -97,6 +98,10 @@ func (ef *ExpectFixture) removeTestDir(workingDir string) (err error) {
// MakeExpectTest creates an expect test fixture for the current directory
func MakeExpectTest(t *testing.T) *ExpectFixture {
+ if skipExpectTests() {
+ t.Skip("Expect tests disabled by environment variables.")
+ }
+
ef := &ExpectFixture{}
ef.expectFiles = make(map[string]string) // map expect test to full file name.
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
@@ -111,11 +116,45 @@ func MakeExpectTest(t *testing.T) *ExpectFixture {
return ef
}
+func skipExpectTests() bool {
+ // Explicitly enabled.
+ if strings.ToUpper(os.Getenv("RUN_EXPECT")) == "TRUE" {
+ return false
+ }
+ if strings.ToUpper(os.Getenv("RUN_EXPECT")) == "FALSE" {
+ return true
+ }
+
+ // If any of the CI systems didn't set RUN_EXPECT, disable them.
+ if strings.ToUpper(os.Getenv("CI")) == "TRUE" {
+ return true
+ }
+ if strings.ToUpper(os.Getenv("CIRCLECI")) == "TRUE" {
+ return true
+ }
+ if strings.ToUpper(os.Getenv("TRAVIS")) == "TRUE" {
+ return true
+ }
+ if strings.ToUpper(os.Getenv("JENKINS_URL")) != "" {
+ return true
+ }
+
+ // Implicitly enable for devs running tests.
+ return false
+}
+
// Run Process all expect script files with suffix Test.exp within the current directory
func (ef *ExpectFixture) Run() {
+ disabledTest := map[string]string{
+ "pingpongTest.exp": "broken",
+ "listExpiredParticipationKeyTest.exp": "flaky",
+ }
for testName := range ef.expectFiles {
if match, _ := regexp.MatchString(ef.testFilter, testName); match {
ef.t.Run(testName, func(t *testing.T) {
+ if reason, ok := disabledTest[testName]; ok {
+ t.Skip(fmt.Sprintf("Skipping %s test: %s", testName, reason))
+ }
partitiontest.PartitionTest(t) // Check if this expect test should by run, may SKIP
syncTest := SynchronizedTest(t)
diff --git a/test/framework/fixtures/fixture.go b/test/framework/fixtures/fixture.go
index 2775a31d7..0693a7ecb 100644
--- a/test/framework/fixtures/fixture.go
+++ b/test/framework/fixtures/fixture.go
@@ -86,7 +86,18 @@ func SynchronizedTest(tb TestingTB) TestingTB {
type synchTest struct {
deadlock.Mutex
- t TestingTB
+ t TestingTB
+ dontReportFailures bool
+}
+
+// ShutdownSynchronizedTest should be called within each test using synchTest.
+// It ensures the base test will no longer get t.finished modified and cause a data race.
+// It should be called in the form of "defer fixtures.ShutdownSynchronizedTest(t)"
+func ShutdownSynchronizedTest(t TestingTB) {
+ st := SynchronizedTest(t).(*synchTest)
+ st.Lock()
+ defer st.Unlock()
+ st.dontReportFailures = true
}
func (st *synchTest) Cleanup(f func()) {
@@ -97,22 +108,34 @@ func (st *synchTest) Cleanup(f func()) {
func (st *synchTest) Error(args ...interface{}) {
st.Lock()
defer st.Unlock()
- st.t.Error(args...)
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.Error(args...)
+ }
}
func (st *synchTest) Errorf(format string, args ...interface{}) {
st.Lock()
defer st.Unlock()
- st.t.Errorf(format, args...)
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.Errorf(format, args...)
+ }
}
func (st *synchTest) Fail() {
st.Lock()
defer st.Unlock()
- st.t.Fail()
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.Fail()
+ }
}
func (st *synchTest) FailNow() {
st.Lock()
defer st.Unlock()
- st.t.FailNow()
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.FailNow()
+ }
}
func (st *synchTest) Failed() bool {
st.Lock()
@@ -122,12 +145,18 @@ func (st *synchTest) Failed() bool {
func (st *synchTest) Fatal(args ...interface{}) {
st.Lock()
defer st.Unlock()
- st.t.Fatal(args...)
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.Fatal(args...)
+ }
}
func (st *synchTest) Fatalf(format string, args ...interface{}) {
st.Lock()
defer st.Unlock()
- st.t.Fatalf(format, args...)
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.Fatalf(format, args...)
+ }
}
func (st *synchTest) Helper() {
st.Lock()
@@ -152,17 +181,26 @@ func (st *synchTest) Name() string {
func (st *synchTest) Skip(args ...interface{}) {
st.Lock()
defer st.Unlock()
- st.t.Skip(args...)
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.Skip(args...)
+ }
}
func (st *synchTest) SkipNow() {
st.Lock()
defer st.Unlock()
- st.t.SkipNow()
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.SkipNow()
+ }
}
func (st *synchTest) Skipf(format string, args ...interface{}) {
st.Lock()
defer st.Unlock()
- st.t.Skipf(format, args...)
+ if !st.dontReportFailures {
+ st.dontReportFailures = true
+ st.t.Skipf(format, args...)
+ }
}
func (st *synchTest) Skipped() bool {
st.Lock()
diff --git a/test/heapwatch/client_ram_report.py b/test/heapwatch/client_ram_report.py
new file mode 100644
index 000000000..6a49ea5cd
--- /dev/null
+++ b/test/heapwatch/client_ram_report.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python3
+
+import argparse
+import glob
+import json
+import logging
+import os
+import re
+import sys
+import subprocess
+
+from metrics_delta import parse_metrics, gather_metrics_files_by_nick
+
+logger = logging.getLogger(__name__)
+
+# go tool pprof -sample_index=inuse_space -text Primary.20210708_131740.heap|grep ^Showing.\*total\$
+# Showing nodes accounting for 82.08MB, 100% of 82.08MB total
+
+total_inuse_re = re.compile(r'Showing nodes accounting for [^,]+, .* of ([0-9.]+)([kKmMgGtT]?B) total', re.MULTILINE)
+
+multipliers = {
+ 'B': 1,
+ 'KB': 1024,
+ 'MB': 1024*1024,
+ 'GB': 1024*1024*1024,
+ 'TB': 1024*1024*1024*1024,
+}
+
+# d = {k:[v,...]}
+def dapp(d, k, v):
+ l = d.get(k)
+ if l is None:
+ d[k] = [v]
+ else:
+ l.append(v)
+
+def get_heap_inuse_totals(dirpath):
+ '''return {"node nickname":[(YYYYmmdd_HHMMSS, bytes), ...], ...}'''
+ cache_mtime = 0
+ cache_path = os.path.join(dirpath, 'heap_inuse_totals.json')
+ if os.path.exists(cache_path):
+ cache_mtime = os.path.getmtime(cache_path)
+ with open(cache_path, 'rb') as fin:
+ cached = json.load(fin)
+ else:
+ cached = {}
+
+ heap_name_re = re.compile(r'(.*)\.(.*).heap')
+ bynick = {}
+ skipcount = 0
+ for path in glob.glob(os.path.join(dirpath, '*.*.heap')):
+ if os.path.getmtime(path) < cache_mtime:
+ skipcount += 1
+ continue
+ fname = os.path.basename(path)
+ m = heap_name_re.match(fname)
+ if not m:
+ logger.warning('could not parse heap filename: %r', path)
+ continue
+ nick = m.group(1)
+ timestamp = m.group(2)
+ cmd = ['go', 'tool', 'pprof', '-sample_index=inuse_space', '-text', path]
+ result = subprocess.run(cmd, capture_output=True)
+ text = result.stdout.decode()
+ m = total_inuse_re.search(text)
+ if not m:
+ logger.error('could not find total in output: %s', text)
+ raise Exception('could not find total in output of: %s', ' '.join([repr(x) for x in cmd]))
+ bytesinuse = float(m.group(1)) * multipliers[m.group(2).upper()]
+ dapp(bynick, nick, (timestamp, bytesinuse))
+ logger.debug('%s ok, %s %f', path, timestamp, bytesinuse)
+
+ logger.debug('%d skipped older than cache', skipcount)
+ for nick, recs in bynick.items():
+ old = cached.get(nick)
+ if old is None:
+ cached[nick] = sorted(recs)
+ else:
+ cached[nick] = sorted(old + recs)
+ if cached and bynick:
+ with open(cache_path, 'wb') as fout:
+ json.dump(cached, fout)
+ return cached
+
+
+def main():
+ ap = argparse.ArgumentParser()
+ ap.add_argument('-d', '--dir', required=True, help='dir path to find /*.metrics in')
+ ap.add_argument('--verbose', default=False, action='store_true')
+ args = ap.parse_args()
+
+ if args.verbose:
+ logging.basicConfig(level=logging.DEBUG)
+ else:
+ logging.basicConfig(level=logging.INFO)
+
+ metrics_files = glob.glob(os.path.join(args.dir, '*.metrics'))
+ filesByNick = gather_metrics_files_by_nick(metrics_files)
+
+ heap_totals = get_heap_inuse_totals(args.dir)
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/test/heapwatch/heapWatch.py b/test/heapwatch/heapWatch.py
index 4b051312c..276e6cb73 100644
--- a/test/heapwatch/heapWatch.py
+++ b/test/heapwatch/heapWatch.py
@@ -129,19 +129,28 @@ class algodDir:
def get_metrics(self, snapshot_name=None, outdir=None):
url = 'http://' + self.net + '/metrics'
- response = urllib.request.urlopen(urllib.request.Request(url, headers=self.headers))
- if response.code != 200:
- logger.error('could not fetch %s from %s via %r', name, self.path. url)
+ try:
+ response = urllib.request.urlopen(urllib.request.Request(url, headers=self.headers))
+ if response.code != 200:
+ logger.error('could not fetch %s from %s via %r', snapshot_name, self.path. url)
+ return
+ blob = response.read()
+ except Exception as e:
+ logger.error('could not fetch %s from %s via %r: %s', snapshot_name, self.path, url, e)
return
- blob = response.read()
outpath = os.path.join(outdir or '.', self.nick + '.' + snapshot_name + '.metrics')
with open(outpath, 'wb') as fout:
fout.write(blob)
logger.debug('%s -> %s', self.nick, outpath)
def get_blockinfo(self, snapshot_name=None, outdir=None):
- algod = self.algod()
- status = algod.status()
+ try:
+ algod = self.algod()
+ status = algod.status()
+ except Exception as e:
+ logger.error('could not get blockinfo from %s: %s', self.net, e)
+ self._algod = None
+ return
bi = msgpack.loads(algod.block_info(status['last-round'], response_format='msgpack'), strict_map_key=False)
if snapshot_name is None:
snapshot_name = time.strftime('%Y%m%d_%H%M%S', time.gmtime())
@@ -154,7 +163,7 @@ class algodDir:
#txncount = bi['block']['tc']
def psHeap(self):
- # return rss, vsz
+ # return rss, vsz (in kilobytes)
# ps -o rss,vsz $(cat ${ALGORAND_DATA}/algod.pid)
subp = subprocess.Popen(['ps', '-o', 'rss,vsz', str(self.pid())], stdout=subprocess.PIPE)
try:
@@ -243,15 +252,16 @@ class watcher:
if self.args.blockinfo:
for ad in self.they:
ad.get_blockinfo(snapshot_name, outdir=self.args.out)
- logger.debug('snapped, processing...')
- # make absolute and differential plots
- for path, snappath in newsnapshots.items():
- subprocess.call(['go', 'tool', 'pprof', '-sample_index=inuse_space', '-svg', '-output', snappath + '.inuse.svg', snappath])
- subprocess.call(['go', 'tool', 'pprof', '-sample_index=alloc_space', '-svg', '-output', snappath + '.alloc.svg', snappath])
- prev = self.prevsnapshots.get(path)
- if prev:
- subprocess.call(['go', 'tool', 'pprof', '-sample_index=inuse_space', '-svg', '-output', snappath + '.inuse_diff.svg', '-base='+prev, snappath])
- subprocess.call(['go', 'tool', 'pprof', '-sample_index=alloc_space', '-svg', '-output', snappath + '.alloc_diff.svg', '-diff_base='+prev, snappath])
+ if self.args.svg:
+ logger.debug('snapped, processing...')
+ # make absolute and differential plots
+ for path, snappath in newsnapshots.items():
+ subprocess.call(['go', 'tool', 'pprof', '-sample_index=inuse_space', '-svg', '-output', snappath + '.inuse.svg', snappath])
+ subprocess.call(['go', 'tool', 'pprof', '-sample_index=alloc_space', '-svg', '-output', snappath + '.alloc.svg', snappath])
+ prev = self.prevsnapshots.get(path)
+ if prev:
+ subprocess.call(['go', 'tool', 'pprof', '-sample_index=inuse_space', '-svg', '-output', snappath + '.inuse_diff.svg', '-base='+prev, snappath])
+ subprocess.call(['go', 'tool', 'pprof', '-sample_index=alloc_space', '-svg', '-output', snappath + '.alloc_diff.svg', '-diff_base='+prev, snappath])
self.prevsnapshots = newsnapshots
def main():
@@ -268,6 +278,7 @@ def main():
ap.add_argument('--admin-token', default='', help='default algod admin-api token to use')
ap.add_argument('--tf-roles', default='relay', help='comma separated list of terraform roles to follow')
ap.add_argument('--tf-name-re', action='append', default=[], help='regexp to match terraform node names, may be repeated')
+ ap.add_argument('--no-svg', dest='svg', default=True, action='store_false', help='do not automatically run `go tool pprof` to generate svg from collected data')
ap.add_argument('-o', '--out', default=None, help='directory to write to')
ap.add_argument('--verbose', default=False, action='store_true')
args = ap.parse_args()
diff --git a/test/heapwatch/metrics_delta.py b/test/heapwatch/metrics_delta.py
index 80d914838..0cf1f22c6 100644
--- a/test/heapwatch/metrics_delta.py
+++ b/test/heapwatch/metrics_delta.py
@@ -112,6 +112,11 @@ def dictMin(dest, more):
dest[k] = min(ov,v)
return dest
+def meanOrZero(seq):
+ if not seq:
+ return 0
+ return statistics.mean(seq)
+
class summary:
def __init__(self):
self.tpsMeanSum = 0
@@ -125,9 +130,9 @@ class summary:
return
self.nodes[nick] = ttr
logger.debug('%d points from %s', len(ttr.tpsList), nick)
- self.tpsMeanSum += statistics.mean(ttr.tpsList)
- self.txBpsMeanSum += statistics.mean(ttr.txBpsList)
- self.rxBpsMeanSum += statistics.mean(ttr.rxBpsList)
+ self.tpsMeanSum += meanOrZero(ttr.tpsList)
+ self.txBpsMeanSum += meanOrZero(ttr.txBpsList)
+ self.rxBpsMeanSum += meanOrZero(ttr.rxBpsList)
self.sumsCount += 1
def byMsg(self):
@@ -191,6 +196,28 @@ def anynickre(nick_re, nicks):
return True
return False
+def gather_metrics_files_by_nick(metrics_files, metrics_dirs=None):
+ '''return {"node nickname":[path, path, ...], ...}'''
+ metrics_fname_re = re.compile(r'(.*)\.(.*).metrics')
+ filesByNick = {}
+ nonick = []
+ tf_inventory_path = None
+ for path in metrics_files:
+ fname = os.path.basename(path)
+ if fname == 'terraform-inventory.host':
+ tf_inventory_path = path
+ continue
+ if metrics_dirs is not None:
+ metrics_dirs.add(os.path.dirname(path))
+ m = metrics_fname_re.match(fname)
+ if not m:
+ logger.error('could not parse metrics file name %r', fname)
+ nonick.append(path)
+ continue
+ nick = m.group(1)
+ dapp(filesByNick, nick, path)
+ return filesByNick
+
def main():
test_metric_line_re()
ap = argparse.ArgumentParser()
@@ -213,23 +240,7 @@ def main():
if args.dir:
metrics_dirs.add(args.dir)
metrics_files += glob.glob(os.path.join(args.dir, '*.metrics'))
- metrics_fname_re = re.compile(r'(.*)\.(.*).metrics')
- filesByNick = {}
- nonick = []
- tf_inventory_path = None
- for path in metrics_files:
- fname = os.path.basename(path)
- if fname == 'terraform-inventory.host':
- tf_inventory_path = path
- continue
- metrics_dirs.add(os.path.dirname(path))
- m = metrics_fname_re.match(fname)
- if not m:
- logger.error('could not parse metrics file name %r', fname)
- nonick.append(path)
- continue
- nick = m.group(1)
- dapp(filesByNick, nick, path)
+ filesByNick = gather_metrics_files_by_nick(metrics_files, metrics_dirs)
if not tf_inventory_path:
for md in metrics_dirs:
tp = os.path.join(md, 'terraform-inventory.host')
diff --git a/test/heapwatch/nodeHostTarget.py b/test/heapwatch/nodeHostTarget.py
new file mode 100644
index 000000000..5332a1aea
--- /dev/null
+++ b/test/heapwatch/nodeHostTarget.py
@@ -0,0 +1,159 @@
+#!/usr/bin/env python3
+#
+# this is the script that runs on a node host started by runNodeHost.py
+#
+# takes one argument which is base64 encoded json
+#
+# args = {
+# 'phonebook': 'host:port;...',
+# 'npn': {'count': int},
+# 'relay': {'count': int},
+# 'pnode': {'count': int, 'keys':[...]},
+# }
+
+import base64
+import glob
+import json
+import logging
+import os
+import shutil
+import subprocess
+import sys
+import time
+
+logger = logging.getLogger(__name__)
+
+def run(args):
+ subprocess.run(args).check_returncode()
+
+def setupDataPaths():
+ mr = subprocess.run(['mount'], capture_output=True)
+ mr.check_returncode()
+ mounts = mr.stdout.decode()
+ paths = []
+ datai = 0
+ for nvmelink in glob.glob('/dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage*'):
+ devname = os.path.realpath(nvmelink)
+ if devname in mounts:
+ continue
+ run(['sudo', 'mkfs.ext4', devname])
+ while True:
+ datapath = '/data{}'.format(datai)
+ if not os.path.exists(datapath):
+ break
+ else:
+ paths.append(datapath)
+ datai += 1
+ run(['sudo', 'mkdir', datapath])
+ run(['sudo', 'mount', devname, datapath])
+ run(['sudo', 'chown', '{}:{}'.format(os.geteuid(), os.getegid()), datapath])
+ # TODO: write to /etc/fstab?
+ paths.append(datapath)
+
+ while True:
+ datapath = '/data{}'.format(datai)
+ if not os.path.exists(datapath):
+ break
+ else:
+ paths.append(datapath)
+ datai += 1
+
+ if not paths:
+ paths = glob.glob('data?')
+ if not paths:
+ datapath = 'data0'
+ os.mkdir(datapath)
+ paths = [datapath]
+ return paths
+
+# must be the same as runNodeHost.py
+target_tarfile = 'runNodeHostPackage.tar.gz'
+
+def main():
+ logging.basicConfig(filename='run.log', level=logging.DEBUG)
+ args = json.loads(base64.b64decode(sys.argv[1]))
+ logger.info('args: %s', json.dumps(args, indent=2))
+ phonebook = args.get('phonebook')
+ datapaths = setupDataPaths()
+ algod = os.path.realpath('algod')
+ algokey = os.path.realpath('algokey')
+ goal = os.path.realpath('goal')
+ if not os.access(algod, os.X_OK):
+ sys.stderr.write('{}: not executable\n'.format(algod))
+ return 1
+ genesis = os.path.realpath('genesis.json')
+ if not os.path.exists(genesis):
+ sys.stderr.write('missing {}'.format(genesis))
+ return 1
+ processes = []
+ npn = args.get('npn')
+ if npn:
+ for i in range(npn.get('count',0)):
+ name = 'npn{}'.format(i)
+ dp = datapaths[i % len(datapaths)]
+ datadir = os.path.join(dp, name)
+ os.makedirs(datadir, exist_ok=True)
+ shutil.copyfile('genesis.json', os.path.join(datadir, 'genesis.json'))
+ with open(os.path.join(datadir, 'config.json'), 'wt') as fout:
+ json.dump({'Version':16, 'GossipFanout':1, 'DNSBootstrapID':'', 'EnableProfiler':True, 'IncomingConnectionsLimit':0}, fout)
+ cmd = [algod, '-g', genesis, '-d', datadir]
+ if phonebook:
+ cmd += ['-p', phonebook]
+ algod_out = open(os.path.join(datadir, 'algod_out'), 'at')
+ algod_err = open(os.path.join(datadir, 'algod_err'), 'at')
+ proc = subprocess.Popen(cmd, cwd=datadir, stdout=algod_out, stderr=algod_err)
+ algod_out.close()
+ algod_err.close()
+ processes.append(proc)
+
+ # build participating nodes
+ partargs = args.get('part')
+ if partargs:
+ ip = 0
+ for privkey_b64, addr_b32 in partargs.get('keys'):
+ ip += 1
+ name = 'pn{}'.format(ip)
+ dp = datapaths[ip % len(datapaths)]
+ datadir = os.path.join(dp, name)
+ os.makedirs(datadir, exist_ok=True)
+ shutil.copyfile('genesis.json', os.path.join(datadir, 'genesis.json'))
+ with open(os.path.join(datadir, 'config.json'), 'wt') as fout:
+ json.dump({'Version':16, 'GossipFanout':1, 'DNSBootstrapID':'', 'EnableProfiler':True, 'IncomingConnectionsLimit':0}, fout)
+ cmd = [algod, '-g', genesis, '-d', datadir]
+ if phonebook:
+ cmd += ['-p', phonebook]
+ algod_out = open(os.path.join(datadir, 'algod_out'), 'at')
+ algod_err = open(os.path.join(datadir, 'algod_err'), 'at')
+ proc = subprocess.Popen(cmd, cwd=datadir, stdout=algod_out, stderr=algod_err)
+ algod_out.close()
+ algod_err.close()
+ processes.append(proc)
+
+ # wait for `goal node status` to show 'Sync Time: 0.0s' when catchup is done
+ while True:
+ time.sleep(5)
+ status = subprocess.run([goal, '-d', datadir, 'node', 'status'], capture_output=True)
+ status.check_returncode()
+ if 'Sync Time: 0.0s' in status.stdout.decode():
+ break
+
+ partkeypath = os.path.join(datadir, 'in.partkey')
+ subprocess.run([algokey, 'part', 'generate', '--first', '0', '--last', '300000', '--keyfile', partkeypath, '--parent', addr_b32]).check_returncode()
+ subprocess.run([goal, '-d', datadir, 'account', 'installpartkey', '--delete-input', '--partkey', partkeypath]).check_returncode()
+ online_txn = os.path.join(datadir, 'online.txn')
+ online_stxn = os.path.join(datadir, 'online.stxn')
+ subprocess.run([goal, '-d', datadir, 'account', 'changeonlinestatus', '-a', addr_b32, '--online', '-t', online_txn]).check_returncode()
+ pk_path = os.path.join(datadir, 'pk.pk')
+ priv_pub = base64.b64decode(privkey_b64)
+ priv = priv_pub[:32]
+ with open(pk_path, 'wb') as fout:
+ fout.write(priv)
+ subprocess.run([algokey, 'sign', '-k', pk_path, '-t', online_txn, '-o', online_stxn]).check_returncode()
+ subprocess.run([goal, '-d', datadir, 'clerk', 'rawsend', '-f', online_stxn]).check_returncode()
+
+
+ # TODO: run relays and participating nodes
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/test/heapwatch/runNodeHost.py b/test/heapwatch/runNodeHost.py
new file mode 100644
index 000000000..10657907b
--- /dev/null
+++ b/test/heapwatch/runNodeHost.py
@@ -0,0 +1,510 @@
+#!/usr/bin/python3
+#
+# launch an ec2 instance in the same AZ with the same AMI, run some algod on it
+#
+# pip install -y boto3
+
+import argparse
+import base64
+import glob
+import json
+import logging
+import os
+import random
+import shutil
+import sqlite3
+import subprocess
+import sys
+import tarfile
+import time
+import urllib.parse
+import urllib.request
+
+# pip install py-algorand-sdk
+import algosdk
+import algosdk.v2client
+import boto3
+
+logger = logging.getLogger(__name__)
+
+# http://169.254.169.254/latest/meta-data/placement/availability-zone
+# http://169.254.169.254/latest/meta-data/ami-id
+# http://169.254.169.254/latest/meta-data/public-ipv4
+# http://169.254.169.254/latest/meta-data/public-hostname
+# http://169.254.169.254/latest/meta-data/local-ipv4
+# http://169.254.169.254/latest/meta-data/local-hostname
+
+def newerthan(a, b):
+ if not os.path.exists(b):
+ return True
+ return os.path.getmtime(a) > os.path.getmtime(b)
+
+def needsmake(dest, *args):
+ for a in args:
+ if newerthan(a, dest):
+ return True
+
+def tarinfo_about_file(name, path):
+ ti = tarfile.TarInfo(name)
+ fs = os.stat(path)
+ ti.size = fs.st_size
+ ti.mtime = fs.st_mtime
+ ti.mode = fs.st_mode
+ ti.type = tarinfo.REGTYPE
+
+# must be the same as nodeHostTarget.py
+target_tarfile = 'runNodeHostPackage.tar.gz'
+
+# deploy file runNodeHostPackage.tar.gz contains:
+# ./algod
+# ./algokey
+# ./goal
+# ./genesis.json
+# ./nodeHostTarget.py
+def ensure_tarfile(algod_data):
+ algod_bin = shutil.which('algod')
+ algokey_bin = shutil.which('algokey')
+ goal_bin = shutil.which('goal')
+ genesis_json = os.path.join(algod_data, 'genesis.json')
+ target_script = os.path.join(os.path.dirname(__file__), 'nodeHostTarget.py')
+ if not needsmake(target_tarfile, algod_bin, goal_bin, genesis_json, target_script):
+ return
+ out = tarfile.open(target_tarfile, 'w:gz')
+ def addfile(name, path):
+ ti = out.gettarinfo(path, arcname=name)
+ out.addfile(
+ ti, #tarinfo_about_file(name, path),
+ open(path, 'rb'),
+ )
+ addfile('algod', algod_bin)
+ addfile('algokey', algokey_bin)
+ addfile('goal', goal_bin)
+ addfile('genesis.json', genesis_json)
+ addfile('nodeHostTarget.py', target_script)
+ out.close()
+
+def start_remote(args, user, ipaddr, argsb64):
+ sshargs = ['-o', 'StrictHostKeyChecking=no']
+ if args.i:
+ sshargs += ['-i', args.i]
+ userataddr = user + '@' + ipaddr
+ subprocess.run(['scp'] + sshargs + [target_tarfile, '{}:~/'.format(userataddr)]).check_returncode()
+ subprocess.run(['ssh'] + sshargs + [userataddr, 'tar -z -x -f ' + target_tarfile]).check_returncode()
+ subprocess.run(['ssh'] + sshargs + [userataddr, 'nohup python3 nodeHostTarget.py {} > outerr 2>&1 &'.format(argsb64)]).check_returncode()
+
+# do a simple GET of a text/plain response
+def httpget(url):
+ with urllib.request.urlopen(url) as res:
+ return res.read().decode().strip()
+
+_instance_data_path = '.instances.json'
+
+def loadInstancesJson():
+ if os.path.exists(_instance_data_path):
+ with open(_instance_data_path) as fin:
+ return json.load(fin)
+ return {}
+
+def saveInstancesJson(ob):
+ with open(_instance_data_path, 'wt') as fout:
+ json.dump(ob, fout)
+
+# record the instances we have launched so that we can clean them up later.
+def recordInstanceID(instanceID, ipaddr, extra=None, **kwargs):
+ ob = loadInstancesJson()
+ instances = ob.get('instances')
+ if instances and instanceID in instances:
+ return
+ rec = {'a':ipaddr}
+ if extra is not None:
+ rec.update(extra)
+ if kwargs:
+ rec.update(kwargs)
+ if not instances:
+ instances = {instanceID:rec}
+ else:
+ instances[instanceID] = rec
+ ob['instances'] = instances
+ saveInstancesJson(ob)
+
+def openkmd(algodata):
+ kmdnetpath = sorted(glob.glob(os.path.join(algodata,'kmd-*','kmd.net')))[-1]
+ kmdnet = open(kmdnetpath, 'rt').read().strip()
+ kmdtokenpath = sorted(glob.glob(os.path.join(algodata,'kmd-*','kmd.token')))[-1]
+ kmdtoken = open(kmdtokenpath, 'rt').read().strip()
+ logger.debug('found kmd %s %s', kmdnet, kmdtoken)
+ kmd = algosdk.kmd.KMDClient(kmdtoken, 'http://' + kmdnet)
+ return kmd
+
+def openalgod(algodata):
+ algodnetpath = os.path.join(algodata,'algod.net')
+ algodnet = open(algodnetpath, 'rt').read().strip()
+ algodtokenpath = os.path.join(algodata,'algod.token')
+ algodtoken = open(algodtokenpath, 'rt').read().strip()
+ algod = algosdk.v2client.algod.AlgodClient(algodtoken, 'http://' + algodnet)
+ return algod
+
+def db64(d):
+ """base64 encode any bytes values in a list/dict, recursively"""
+ if isinstance(d, bytes):
+ return base64.b64encode(d).decode()
+ if isinstance(d, (list, tuple)):
+ return [db64(x) for x in d]
+ if isinstance(d, dict):
+ return {db64(k):db64(v) for k,v in d.items()}
+ return d
+
+class TestNodes:
+ def __init__(self, args, algod_data):
+ self.args = args
+ self.algod_data = algod_data
+ self._ec2 = None
+ self.kmd = None
+ self.algod = None
+ self.pubw = None
+ self.pubwid = None
+ self.maxpubaddr = None
+ self.maxaddramount = None
+
+ self.config = {}
+ self.configpath = os.path.join(self.algod_data, 'config.json')
+ try:
+ with open(self.configpath, 'rt') as fin:
+ self.config = json.load(fin)
+ except Exception as e:
+ logger.debug('%s: could not read, %s', self.configpath, e)
+ listenpath = os.path.join(self.algod_data, 'algod-listen.net')
+ with open(listenpath, 'rt') as fin:
+ listenstring = fin.read()
+ lu = urllib.parse.urlparse(listenstring)
+ #self.addr = self.config.get('NetAddress', '0.0.0.0:4160')
+ #self.fakeurl = 'ws://' + self.addr
+ #pu = urllib.parse.urlparse(self.fakeurl)
+ self.relayip = httpget('http://169.254.169.254/latest/meta-data/local-ipv4')
+ self.relayhostport = '{}:{}'.format(self.relayip, lu.port)
+ self.amiid = httpget('http://169.254.169.254/latest/meta-data/ami-id')
+ self.region_name = httpget('http://169.254.169.254/latest/meta-data/placement/region')
+ self.currentaz = httpget('http://169.254.169.254/latest/meta-data/placement/availability-zone')
+ #sgtext = httpget('http://169.254.169.254/latest/meta-data/security-groups')
+ #security_groups = [x.strip() for x in sgtext.splitlines()]
+ self.netmacs = [x.strip() for x in httpget('http://169.254.169.254/latest/meta-data/network/interfaces/macs').splitlines()]
+ mac = self.netmacs[0]
+ if not mac.endswith('/'):
+ mac = mac + '/'
+ self.subnet_id = httpget('http://169.254.169.254/latest/meta-data/network/interfaces/macs/' + mac + 'subnet-id')
+ self.vpc_id = httpget('http://169.254.169.254/latest/meta-data/network/interfaces/macs/' + mac + 'vpc-id')
+ self.sg_ids = [x.strip() for x in httpget('http://169.254.169.254/latest/meta-data/network/interfaces/macs/' + mac + 'security-group-ids').splitlines()]
+
+ def ec2(self):
+ if self._ec2 is None:
+ self._ec2 = boto3.client('ec2', region_name=self.region_name)
+ return self._ec2
+
+ def connect(self):
+ if self.algod and self.kmd:
+ return self.algod, self.kmd
+
+ subprocess.run(['goal', 'kmd', 'start', '-t', '3600','-d', self.algod_data], timeout=5).check_returncode()
+ self.kmd = openkmd(self.algod_data)
+ self.algod = openalgod(self.algod_data)
+ return self.algod, self.kmd
+
+ def get_pub_wallet(self):
+ algod, kmd = self.connect()
+ if not (self.pubw and self.maxpubaddr):
+ # find private test node public wallet and its richest account
+ wallets = kmd.list_wallets()
+ pubwid = None
+ for xw in wallets:
+ if xw['name'] == 'unencrypted-default-wallet':
+ pubwid = xw['id']
+ pubw = kmd.init_wallet_handle(pubwid, '')
+ pubaddrs = kmd.list_keys(pubw)
+ pubbalances = []
+ maxamount = 0
+ maxpubaddr = None
+ for pa in pubaddrs:
+ pai = algod.account_info(pa)
+ if pai['amount'] > maxamount:
+ maxamount = pai['amount']
+ maxpubaddr = pai['address']
+ self.pubw = pubw
+ self.pubwid = pubwid
+ self.maxpubaddr = maxpubaddr
+ self.maxaddramount = maxamount
+ logger.debug('found rich account %s %d', self.maxpubaddr, self.maxaddramount)
+ return self.pubw, self.maxpubaddr
+
+ def re_kmd(self):
+ self.kmd = openkmd(self.algod_data)
+ self.pubw = self.kmd.init_wallet_handle(self.pubwid, '')
+ return self.kmd, self.pubw
+
+ def new_part_account(self):
+ "create a key pair and send a bunch of algos to the addr so it can participate"
+ privkey_b64, addr_b32 = algosdk.account.generate_account()
+ with open(addr_b32 + '.json', 'wt') as fout:
+ json.dump({'a':addr_b32, 'p': privkey_b64}, fout)
+
+ pubw, maxpubaddr = self.get_pub_wallet()
+ algod, kmd = self.connect()
+ params = algod.suggested_params()
+ destAmount = int(self.maxaddramount / 30)
+ txn = algosdk.transaction.PaymentTxn(sender=maxpubaddr, fee=params.min_fee, first=params.first, last=params.last, gh=params.gh, gen=params.gen, receiver=addr_b32, amt=destAmount, note=os.getrandom(8), flat_fee=True)
+ logger.debug('%s -> %s %d', maxpubaddr, addr_b32, destAmount)
+ logger.debug('%s', json.dumps(db64(txn.dictify())))
+ tries = 3
+ stxn = None
+ while True:
+ try:
+ pubw = kmd.init_wallet_handle(self.pubwid, '')
+ stxn = kmd.sign_transaction(pubw, '', txn)
+ break
+ except Exception as e:
+ # kmd might have just timed out
+ tries -= 1
+ if tries <= 0:
+ raise
+ logger.warning('kmd sign fail, retrying... (%s)', e)
+ kmd, pubw = self.re_kmd()
+ txid = algod.send_transaction(stxn)
+ logger.info('fund %d %s -> %s', destAmount, maxpubaddr, addr_b32)
+ self.maxaddramount -= destAmount
+
+ return privkey_b64, addr_b32
+
+ def launch_instance(self):
+ args = self.args
+ ensure_tarfile(self.algod_data)
+ part_accounts = []
+ for i in range(args.num_part):
+ privkey_b64, addr_b32 = self.new_part_account()
+ part_accounts.append((privkey_b64, addr_b32))
+ target_args = {
+ 'phonebook': self.relayhostport,
+ 'npn': {'count': args.num_npn},
+ 'part': {'count': args.num_part, 'keys': part_accounts},
+ }
+ # base64 encoded json should unambiguously get through any shell interpretation
+ argsb64 = base64.b64encode(json.dumps(target_args).encode()).decode()
+ logger.debug('remote arg %s', argsb64)
+ if args.name:
+ tags = [{
+ 'ResourceType': 'instance',
+ 'Tags': [{
+ 'Key': 'Name',
+ 'Value': args.name + '_' + time.strftime('%Y%m%d_%H%M%S', time.gmtime()),
+ }, {
+ 'Key': 'RNH',
+ 'Value': self.relayip,
+ }],
+ }]
+ else:
+ tags = []
+ kwargs = dict(
+ BlockDeviceMappings=[{
+ 'DeviceName': 'xvdh',
+ 'Ebs': {
+ 'DeleteOnTermination': True,
+ 'VolumeSize': 8,
+ },
+ }],
+ ImageId=self.amiid,
+ InstanceInitiatedShutdownBehavior='terminate',
+ InstanceType=args.instance_type,
+ KeyName=args.key_pair,
+ MaxCount=1,
+ MinCount=1,
+ NetworkInterfaces=[{
+ 'AssociatePublicIpAddress': False,
+ 'DeleteOnTermination': True,
+ 'DeviceIndex': 0,
+ 'Groups': self.sg_ids,
+ 'SubnetId': self.subnet_id,
+ }],
+ Placement={'AvailabilityZone': self.currentaz},
+ #SecurityGroupIds=sg_ids,
+ #SubnetId=subnet_id,
+ # TODO: put a script in 'UserData'
+ TagSpecifications=tags,
+ )
+ if args.dry_run or logger.isEnabledFor(logging.DEBUG):
+ logger.debug('run_instance %s', json.dumps(kwargs, indent=2))
+ if args.dry_run:
+ kwargs['DryRun'] = True
+ result = self.ec2().run_instances(**kwargs)
+ logger.debug('run_instances() => %r', result)
+ inst = result['Instances'][0]
+ instanceid = inst['InstanceId']
+
+ desc = inst
+ start = time.time()
+ while True and not args.dry_run:
+ if desc['State']['Name'] == 'running':
+ break
+
+ now = time.time()
+ if now - start > 60:
+ sys.stderr.write('instance failed to start within a minute, giving up\n')
+ # TODO: terminate instance
+ return 1
+ time.sleep(2)
+ descr = self.ec2().describe_instances(InstanceIds=[instanceid])
+ desc = descr['Reservations'][0]['Instances'][0]
+
+ instanceip = desc['PrivateIpAddress']
+ extra = None
+ if part_accounts:
+ extra = {'participants': part_accounts}
+ recordInstanceID(instanceid, instanceip, parts=part_accounts)
+ if not args.dry_run:
+ tries = 0
+ while True:
+ try:
+ start_remote(args, 'ubuntu', instanceip, argsb64)
+ break
+ except:
+ tries += 1
+ if tries > 20:
+ raise
+ time.sleep(3)
+ return desc
+
+ def _instances(self):
+ "generator for instance description objects"
+ fleet = self.ec2().describe_instances(Filters=[{
+ 'Name': 'tag:RNH',
+ 'Values': [self.relayip],
+ }])
+ for res in fleet['Reservations']:
+ for xi in res['Instances']:
+ yield xi
+
+ def list_instances(self):
+ for xi in self._instances():
+ state = xi.get('State')
+ if state and 'Name' in state:
+ state = state['Name']
+ print(xi.get('InstanceId'), xi.get('LaunchTime'), state)
+
+ def terminate_instances(self, n=None):
+ ids = []
+ for desc in self._instances():
+ if desc['State']['Name'] == 'running':
+ ids.append(desc['InstanceId'])
+ if (n is not None) and (len(ids) >= n):
+ break
+ if len(ids) == 0:
+ sys.stderr.write('no instances\n')
+ return 1
+
+ some = ids
+ if len(some) > 5:
+ some = some[:5] + ['...']
+
+ ob = loadInstancesJson()
+ instanceMeta = ob.get('instances', {})
+ algod, kmd = self.connect()
+ pubw, maxpubaddr = self.get_pub_wallet()
+ params = algod.suggested_params()
+ ichange = False
+ for iid in some:
+ imeta = instanceMeta.pop(iid, None)
+ if not imeta:
+ continue
+ ichange = True
+ for pa in imeta.get('parts', []):
+ privkey_b64, addr_b32 = pa
+ ai = algod.account_info(addr_b32)
+ if ai.get('amount',0) == 0:
+ continue
+ txn = algosdk.transaction.PaymentTxn(sender=addr_b32, fee=params.min_fee*10, first=params.first, last=params.last, gh=params.gh, gen=params.gen, receiver=maxpubaddr, close_remainder_to=maxpubaddr, amt=1, flat_fee=True)
+ stxn = txn.sign(privkey_b64)
+ algod.send_transaction(stxn)
+ logger.info('close %s -> %s', addr_b32, maxpubaddr)
+ if ichange:
+ saveInstancesJson(ob)
+
+ logger.info('terminating %d instances: %s', len(ids), ', '.join(some))
+ ret = self.ec2().terminate_instances(InstanceIds=ids, DryRun=self.args.dry_run)
+ if self.args.dry_run or logger.isEnabledFor(logging.DEBUG):
+ logger.debug('terminate results: %s', json.dumps(ret, indent=2))
+ return 0
+
+durationSuffixMultipliers = { 's': 1, 'm': 60, 'h': 3600 }
+
+def parseDuration(x):
+ if x is None:
+ return None
+ lc = x[-1].lower()
+ mult = durationSuffixMultipliers.get(lc)
+ if mult is not None:
+ x = x[:-1]
+ else:
+ mult = 1
+ t = int(x)
+ return t * mult
+
+_LOG_FORMAT = '%(asctime)s %(levelname)-8s %(message)s'
+
+def main():
+ ap = argparse.ArgumentParser()
+ ap.add_argument('-d', '--algod', default=None, help='algod data dir to connect to')
+ ap.add_argument('--num-npn', default=6, type=int)
+ ap.add_argument('--num-part', default=None, type=int)
+ ap.add_argument('--instance-type', default='m5ad.4xlarge')
+ ap.add_argument('-n', '--num-instances', default=1, type=int, help='number of instances to launch')
+ ap.add_argument('--delay', default=None, help='time between instances \d+{,s,m}')
+ ap.add_argument('-i', default=None, help='path to ssh key .pem')
+ ap.add_argument('--key-pair', default=None, help='aws key pair name to use')
+ ap.add_argument('--name', default='heapWatchTest', help='instance name prefix')
+ #ap.add_argument('--priv-key', default=None, help='path to key.pem to use')
+ ap.add_argument('--dry-run', default=False, action='store_true')
+ ap.add_argument('--list-instances', default=False, action='store_true')
+ ap.add_argument('--terminate-instances', default=None, const='all', nargs='?', help="an int to terminate some instances, no number or 'all' terminates all")
+ ap.add_argument('--verbose', default=False, action='store_true')
+ args = ap.parse_args()
+
+ if args.verbose:
+ logging.basicConfig(level=logging.DEBUG, format=_LOG_FORMAT)
+ else:
+ logging.basicConfig(level=logging.INFO, format=_LOG_FORMAT)
+
+ algod_data = args.algod
+ if not algod_data:
+ algod_data = os.getenv('ALGORAND_DATA')
+ if not algod_data:
+ sys.stderr.write('no relay algod specified by -d/--algod/$ALGORAND_DATA\n')
+ return 1
+
+ delay = parseDuration(args.delay)
+
+ tn = TestNodes(args, algod_data)
+
+ if args.list_instances:
+ tn.list_instances()
+ return 0
+
+ if args.terminate_instances is not None:
+ tcount = args.terminate_instances
+ if tcount == 'all':
+ tcount = None
+ else:
+ tcount = int(tcount)
+ return tn.terminate_instances(tcount)
+
+ if not args.key_pair:
+ sys.stderr.write('--key-pair required to specify an AWS key pair name\n')
+ return 1
+
+ launched = 0
+ while launched < args.num_instances:
+ tn.launch_instance()
+ launched += 1
+ if delay is not None:
+ time.sleep(delay)
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/test/scripts/e2e.sh b/test/scripts/e2e.sh
index 56c57a067..594efb0c2 100755
--- a/test/scripts/e2e.sh
+++ b/test/scripts/e2e.sh
@@ -45,6 +45,18 @@ TEST_RUN_ID=$(${SCRIPT_PATH}/testrunid.py)
export TEMPDIR=${SRCROOT}/tmp/out/e2e/${TEST_RUN_ID}
echo "Test output can be found in ${TEMPDIR}"
+function cleanup() {
+ echo "Cleaning up temp dir."
+
+ rm -rf "${TEMPDIR}"
+
+ if ! ${NO_BUILD} ; then
+ rm -rf ${PKG_ROOT}
+ fi
+}
+
+# Cleanup files created during tests.
+trap cleanup EXIT
# ARM64 has an unoptimized scrypt() which can cause tests to timeout.
# Run kmd with scrypt() configured to run less secure and fast to go through the motions for test.
@@ -101,7 +113,6 @@ export GOPATH=$(go env GOPATH)
cd "${SCRIPT_PATH}"
if [ -z "$E2E_TEST_FILTER" ] || [ "$E2E_TEST_FILTER" == "SCRIPTS" ]; then
-
./timeout 200 ./e2e_basic_start_stop.sh
duration "e2e_basic_start_stop.sh"
@@ -122,28 +133,35 @@ if [ -z "$E2E_TEST_FILTER" ] || [ "$E2E_TEST_FILTER" == "SCRIPTS" ]; then
for script in "$SRCROOT"/test/scripts/e2e_subs/serial/*; do
"${TEMPDIR}/ve/bin/python3" e2e_client_runner.py ${RUN_KMD_WITH_UNSAFE_SCRYPT} $script
done
- duration "serial client runners"
deactivate
+ duration "serial client runners"
fi # if E2E_TEST_FILTER == "" or == "SCRIPTS"
if [ -z "$E2E_TEST_FILTER" ] || [ "$E2E_TEST_FILTER" == "GO" ]; then
# Export our root temp folder as 'TESTDIR' for tests to use as their root test folder
# This allows us to clean up everything with our rm -rf trap.
- export TESTDIR=${TEMPDIR}
+ mkdir "${TEMPDIR}/go"
+ export TESTDIR=${TEMPDIR}/go
export TESTDATADIR=${SRCROOT}/test/testdata
export SRCROOT=${SRCROOT}
./e2e_go_tests.sh ${GO_TEST_ARGS}
- duration "e2e_go_tests.sh"
+ duration "go integration tests"
+fi # if E2E_TEST_FILTER == "" or == "GO"
- rm -rf "${TEMPDIR}"
+if [ -z "$E2E_TEST_FILTER" ] || [ "$E2E_TEST_FILTER" == "EXPECT" ]; then
+ # Export our root temp folder as 'TESTDIR' for tests to use as their root test folder
+ # This allows us to clean up everything with our rm -rf trap.
+ mkdir "${TEMPDIR}/expect"
+ export TESTDIR=${TEMPDIR}/expect
+ export TESTDATADIR=${SRCROOT}/test/testdata
+ export SRCROOT=${SRCROOT}
- if ! ${NO_BUILD} ; then
- rm -rf ${PKG_ROOT}
- fi
+ ./e2e_go_tests.sh -e ${GO_TEST_ARGS}
+ duration "expect tests"
+fi # if E2E_TEST_FILTER == "" or == "EXPECT"
- echo "----------------------------------------------------------------------"
- echo " DONE: E2E"
- echo "----------------------------------------------------------------------"
-fi # if E2E_TEST_FILTER == "" or == "GO"
+echo "----------------------------------------------------------------------"
+echo " DONE: E2E"
+echo "----------------------------------------------------------------------"
diff --git a/test/scripts/e2e_client_runner.py b/test/scripts/e2e_client_runner.py
index c225b9483..79b53a291 100755
--- a/test/scripts/e2e_client_runner.py
+++ b/test/scripts/e2e_client_runner.py
@@ -402,6 +402,7 @@ _logging_datefmt = '%Y%m%d_%H%M%S'
def main():
start = time.time()
ap = argparse.ArgumentParser()
+ ap.add_argument('--interactive', default=False, action='store_true')
ap.add_argument('scripts', nargs='*', help='scripts to run')
ap.add_argument('--keep-temps', default=False, action='store_true', help='if set, keep all the test files')
ap.add_argument('--timeout', default=500, type=int, help='integer seconds to wait for the scripts to run')
@@ -447,13 +448,12 @@ def main():
create_kmd_config_with_unsafe_scrypt(env['ALGORAND_DATA'])
create_kmd_config_with_unsafe_scrypt(env['ALGORAND_DATA2'])
-
xrun(['goal', '-v'], env=env, timeout=5)
xrun(['goal', 'node', 'status'], env=env, timeout=5)
rs = RunSet(env)
for scriptname in args.scripts:
- rs.start(scriptname, args.timeout-10)
+ rs.start(os.path.abspath(scriptname), args.timeout-10)
rs.wait(args.timeout)
if rs.errors:
retcode = 1
@@ -462,6 +462,10 @@ def main():
logger.info('finished OK %f seconds', time.time() - start)
logger.info('statuses-json: %s', json.dumps(rs.statuses))
+ if args.interactive:
+ os.environ['ALGORAND_DATA'] = env['ALGORAND_DATA']
+ os.system(os.environ['SHELL'])
+
# ensure 'network stop' and 'network delete' also make they job
goal_network_stop(netdir, env, normal_cleanup=True)
if not args.keep_temps:
diff --git a/test/scripts/e2e_go_tests.sh b/test/scripts/e2e_go_tests.sh
index 09371bb88..1368f99e2 100755
--- a/test/scripts/e2e_go_tests.sh
+++ b/test/scripts/e2e_go_tests.sh
@@ -7,14 +7,28 @@ set -o pipefail
export GOPATH=$(go env GOPATH)
export GO111MODULE=on
-GOTESTCOMMAND=${GOTESTCOMMAND:="go test"}
+
+# Needed for now because circleci doesn't use makefile yet
+if [ -z "$(which gotestsum)" ]; then
+ GOTESTCOMMAND=${GOTESTCOMMAND:="go test"}
+else
+ TEST_RESULTS=${TEST_RESULTS:="$(pwd)"}
+ GOTESTCOMMAND=${GOTESTCOMMAND:="gotestsum --format testname --junitfile ${TEST_RESULTS}/results.xml --jsonfile ${TEST_RESULTS}/testresults.json --"}
+fi
+
+echo "GOTESTCOMMAND will be: ${GOTESTCOMMAND}"
# If one or more -t <pattern> are specified, use GOTESTCOMMAND -run <pattern> for each
TESTPATTERNS=()
NORACEBUILD=""
+export RUN_EXPECT="FALSE"
while [ "$1" != "" ]; do
case "$1" in
+ -e)
+ # The test code checks this variable.
+ export RUN_EXPECT="TRUE"
+ ;;
-t)
shift
TESTPATTERNS+=($1)
@@ -30,6 +44,11 @@ while [ "$1" != "" ]; do
shift
done
+if [[ -n $TESTPATTERNS && -n $RUN_EXPECT ]]; then
+ echo "-t and -e are mutually exclusive."
+ exit 1
+fi
+
# Anchor our repo root reference location
REPO_ROOT="$( cd "$(dirname "$0")" ; pwd -P )"/../..
@@ -89,18 +108,24 @@ if [[ "${ARCHTYPE}" = arm* ]]; then
PARALLEL_FLAG="-p 1"
fi
+PACKAGES="./..."
+if [ "$RUN_EXPECT" = "TRUE" ]; then
+ PACKAGES=$(go list ./...|grep expect)
+fi
+
echo "PARALLEL_FLAG = ${PARALLEL_FLAG}"
+echo "PACKAGES = ${PACKAGES}"
if [ "${#TESTPATTERNS[@]}" -eq 0 ]; then
- ${GOTESTCOMMAND} ${RACE_OPTION} ${PARALLEL_FLAG} -timeout 1h -v ${SHORTTEST} ./...
+ ${GOTESTCOMMAND} ${RACE_OPTION} ${PARALLEL_FLAG} -timeout 1h -v ${SHORTTEST} ${PACKAGES}
else
for TEST in ${TESTPATTERNS[@]}; do
- ${GOTESTCOMMAND} ${RACE_OPTION} ${PARALLEL_FLAG} -timeout 1h -v ${SHORTTEST} -run ${TEST} ./...
+ ${GOTESTCOMMAND} ${RACE_OPTION} ${PARALLEL_FLAG} -timeout 1h -v ${SHORTTEST} -run ${TEST} ${PACKAGES}
done
fi
if [ ${CLEANUP_TEMPDIR} -ne 0 ]; then
- rm -rf ${TEMPDIR}
+ rm -rf "${TEMPDIR}"
fi
echo "----------------------------------------------------------------------"
diff --git a/test/scripts/e2e_subs/app-accounts.sh b/test/scripts/e2e_subs/app-accounts.sh
new file mode 100755
index 000000000..fe0078597
--- /dev/null
+++ b/test/scripts/e2e_subs/app-accounts.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+
+filename=$(basename "$0")
+scriptname="${filename%.*}"
+date "+${scriptname} start %Y%m%d_%H%M%S"
+
+
+my_dir="$(dirname "$0")"
+source "$my_dir/rest.sh" "$@"
+function rest() {
+ curl -q -s -H "Authorization: Bearer $PUB_TOKEN" "$NET$1"
+}
+
+set -e
+set -x
+set -o pipefail
+export SHELLOPTS
+
+WALLET=$1
+
+TEAL=test/scripts/e2e_subs/tealprogs
+
+gcmd="goal -w ${WALLET}"
+
+ACCOUNT=$(${gcmd} account list|awk '{ print $3 }')
+# Create a smaller account so rewards won't change balances.
+SMALL=$(${gcmd} account new | awk '{ print $6 }')
+# Under one algo receives no rewards
+${gcmd} clerk send -a 1000000 -f "$ACCOUNT" -t "$SMALL"
+
+function balance {
+ acct=$1; shift
+ goal account balance -a "$acct" | awk '{print $1}'
+}
+
+[ "$(balance "$ACCOUNT")" = 999998999000 ]
+[ "$(balance "$SMALL")" = 1000000 ]
+
+APPID=$(${gcmd} app create --creator "${SMALL}" --approval-prog=${TEAL}/app-escrow.teal --global-byteslices 4 --global-ints 0 --local-byteslices 0 --local-ints 1 --clear-prog=${TEAL}/approve-all.teal | grep Created | awk '{ print $6 }')
+[ "$(balance "$SMALL")" = 999000 ] # 1000 fee
+
+function appl {
+ method=$1; shift
+ ${gcmd} app call --app-id="$APPID" --from="$SMALL" --app-arg="str:$method" "$@"
+}
+function app-txid {
+ # When app (call or optin) submits, this is how the txid is
+ # printed. Not in appl() because appl is also used with -o to
+ # create tx
+ grep -o -E 'txid [A-Z0-9]{52}' | cut -c 6- | head -1
+}
+
+APPACCT=$(python -c "import algosdk.encoding as e; print(e.encode_address(e.checksum(b'appID'+($APPID).to_bytes(8, 'big'))))")
+
+function payin {
+ amount=$1; shift
+ ${gcmd} clerk send -f "$SMALL" -t "$APPACCT" -a "$amount" "$@"
+}
+
+T=$TEMPDIR
+
+function sign {
+ ${gcmd} clerk sign -i "$T/$1.tx" -o "$T/$1.stx"
+}
+
+TXID=$(${gcmd} app optin --app-id "$APPID" --from "${SMALL}" | app-txid)
+# Rest succeeds, no stray inner-txn array
+[ "$(rest "/v2/transactions/pending/$TXID" | jq '.["inner-txn"]')" == null ]
+[ "$(balance "$SMALL")" = 998000 ] # 1000 fee
+
+appl "deposit():void" -o "$T/deposit.tx"
+payin 150000 -o "$T/pay1.tx"
+cat "$T/deposit.tx" "$T/pay1.tx" | ${gcmd} clerk group -i - -o "$T/group.tx"
+sign group
+${gcmd} clerk rawsend -f "$T/group.stx"
+[ "$(balance "$SMALL")" = 846000 ] # 2 fees, 150,000 deposited
+[ "$(balance "$APPACCT")" = 150000 ]
+
+# Withdraw 20,000 in app. Confirm that inner txn is visible to transaction API.
+TXID=$(appl "withdraw(uint64):void" --app-arg="int:20000" | app-txid)
+[ "$(rest "/v2/transactions/pending/$TXID" \
+ | jq '.["inner-txns"][0].txn.txn.amt')" = 20000 ]
+[ "$(rest "/v2/transactions/pending/$TXID?format=msgpack" | msgpacktool -d \
+ | jq '.["inner-txns"][0].txn.txn.type')" = '"pay"' ]
+# Now confirm it's in blocks API (this time in our internal form)
+ROUND=$(rest "/v2/transactions/pending/$TXID" | jq '.["confirmed-round"]')
+rest "/v2/blocks/$ROUND" | jq .block.txns[0].dt.itx
+
+[ "$(balance "$SMALL")" = 865000 ] # 1 fee, 20,000 withdrawn
+[ "$(balance "$APPACCT")" = 129000 ] # 20k withdraw, fee paid by app account
+
+appl "withdraw(uint64):void" --app-arg="int:10000" --fee 2000
+[ "$(balance "$SMALL")" = 873000 ] # 2000 fee, 10k withdrawn
+[ "$(balance "$APPACCT")" = 119000 ] # 10k withdraw, fee credit used
+
+# Try to get app account below zero
+# (By app logic, it's OK - 150k was deposited, but fees have cut in)
+appl "withdraw(uint64):void" --app-arg="int:120000" && exit 1
+[ "$(balance "$SMALL")" = 873000 ] # no change
+[ "$(balance "$APPACCT")" = 119000 ] # no change
+
+# Try to get app account below min balance by withdrawing too much
+appl "withdraw(uint64):void" --app-arg="int:20000" && exit 1
+[ "$(balance "$SMALL")" = 873000 ] # no change
+[ "$(balance "$APPACCT")" = 119000 ] # no change
+
+# Try to get app account below min balance b/c of fee
+appl "withdraw(uint64):void" --app-arg="int:18001" && exit 1
+[ "$(balance "$SMALL")" = 873000 ] # no change
+[ "$(balance "$APPACCT")" = 119000 ] # no change
+
+# Show that it works AT exactly min balance
+appl "withdraw(uint64):void" --app-arg="int:18000"
+[ "$(balance "$SMALL")" = 890000 ] # +17k (18k - fee)
+[ "$(balance "$APPACCT")" = 100000 ] # -19k (18k + fee)
+
+
+date "+${scriptname} OK %Y%m%d_%H%M%S"
diff --git a/test/scripts/e2e_subs/e2e-app-extra-pages.sh b/test/scripts/e2e_subs/e2e-app-extra-pages.sh
index c20b0eddb..4852918c6 100755
--- a/test/scripts/e2e_subs/e2e-app-extra-pages.sh
+++ b/test/scripts/e2e_subs/e2e-app-extra-pages.sh
@@ -84,9 +84,6 @@ if [[ $RES != *"${EXPERROR}"* ]]; then
fi
# App create with extra pages, succeeded
-${gcmd} app create --creator ${ACCOUNT} --approval-prog "${SMALL_TEAL_FILE}" --clear-prog "${SMALL_TEAL_FILE}" --extra-pages 1 --global-byteslices 1 --global-ints 0 --local-byteslices 0 --local-ints 0
-
-# App update
RES=$(${gcmd} app create --creator ${ACCOUNT} --approval-prog "${SMALL_TEAL_FILE}" --clear-prog "${SMALL_TEAL_FILE}" --extra-pages 1 --global-byteslices 1 --global-ints 0 --local-byteslices 0 --local-ints 0 2>&1 || true)
EXP="Created app"
APPID=$(echo $RES | awk '{print $NF}')
@@ -97,8 +94,13 @@ fi
RES=$(${gcmd} app info --app-id ${APPID} 2>&1 || true)
PROGHASH="Approval hash: 7356635AKR4FJOOKXXBWNN6HDJ5U3O2YWAOSK6NZBPMOGIQSWCL2N74VT4"
+EXTRAPAGES="Extra program pages: 1"
if [[ $RES != *"${PROGHASH}"* ]]; then
- date '+app-extra-pages-test FAIL the application info should succeed %Y%m%d_%H%M%S'
+ date '+app-extra-pages-test FAIL the application approval program hash is incorrect %Y%m%d_%H%M%S'
+ false
+fi
+if [[ $RES != *"${EXTRAPAGES}"* ]]; then
+ date '+app-extra-pages-test FAIL the application extra pages value is incorrect %Y%m%d_%H%M%S'
false
fi
@@ -114,3 +116,7 @@ if [[ $RES == *"${PROGHASH}"* ]]; then
date '+app-extra-pages-test FAIL the application approval program should have been updated %Y%m%d_%H%M%S'
false
fi
+if [[ $RES != *"${EXTRAPAGES}"* ]]; then
+ date '+app-extra-pages-test FAIL the application extra pages value is incorrect after update %Y%m%d_%H%M%S'
+ false
+fi
diff --git a/test/scripts/e2e_subs/tealprogs/app-escrow.teal b/test/scripts/e2e_subs/tealprogs/app-escrow.teal
new file mode 100644
index 000000000..e742db429
--- /dev/null
+++ b/test/scripts/e2e_subs/tealprogs/app-escrow.teal
@@ -0,0 +1,166 @@
+#pragma version 5
+ // This application accepts payments in algo, and holds them
+ // until the requester asks for them back. Depositors invoke
+ // the app with "deposit" as arg[0], and make a pay
+ // transaction to the app account in the following txn slot.
+ // The app records the deposit in the user's local state (so
+ // the user must be opted-in), though they may do so in their
+ // initial call.
+
+ // To withdraw, users call with "withdraw" in arg[0], and a
+ // big-endian integer amount in arg[1]. If the withdrawal
+ // amount is less than the amount deposited, the app pays out
+ // the request, and decrements the user's balance.
+
+ // ApplicationID is zero in inital creation txn
+ txn ApplicationID
+ bz handle_createapp
+
+ // Handle possible OnCompletion type. We don't have to
+ // worry about handling ClearState, because the
+ // ClearStateProgram will execute in that case, not the
+ // ApprovalProgram.
+
+ txn OnCompletion
+ int NoOp
+ ==
+ bnz handle_noop
+
+ txn OnCompletion
+ int OptIn
+ ==
+ bnz handle_optin
+
+ txn OnCompletion
+ int CloseOut
+ ==
+ bnz handle_closeout
+
+ txn OnCompletion
+ int UpdateApplication
+ ==
+ bnz handle_updateapp
+
+ txn OnCompletion
+ int DeleteApplication
+ ==
+ bnz handle_deleteapp
+ // Unexpected OnCompletion value. Should be unreachable.
+ err
+
+handle_createapp:
+ int 1
+ return
+
+handle_optin:
+ // Let anyone optin with a single txn, with no arguments. If
+ // it's not a single txn, fall through to handle_noop, so that
+ // a deposit can be made while opting in.
+ // We should standardize a behaviour like this in ABI.
+ global GroupSize
+ int 1
+ ==
+ bz handle_noop
+ int 1
+ return
+
+
+handle_noop:
+ txn ApplicationArgs 0
+ byte "deposit():void"
+ ==
+ bz not_deposit
+
+
+ byte "deposit"
+ callsub debug
+
+ // Handle a deposit. Next txn slot must pay our app account
+ txn GroupIndex
+ int 1
+ +
+ dup
+ dup
+
+ gtxns TypeEnum
+ int pay // axfer if we want an ASA escrower
+ ==
+ assert
+
+ gtxns Receiver
+ global CurrentApplicationAddress
+ ==
+ assert
+
+ gtxns Amount // For ASA escrow, use AssetAmount
+
+
+ // Track the amount this sender deposited in their local state
+ int 0
+ byte "balance"
+ dup2
+ app_local_get
+ uncover 3 // pull up the Amount
+ +
+ app_local_put
+
+ int 1
+ return
+
+not_deposit:
+ txn ApplicationArgs 0
+ byte "withdraw(uint64):void"
+ ==
+ bz not_withdraw
+
+ // Handle withdraw.
+
+ int 0
+ byte "balance"
+ dup2
+ app_local_get
+
+ // Subtract the request and replace. Rejects on underflow
+ txn ApplicationArgs 1
+ btoi
+ -
+ app_local_put
+
+ itxn_begin
+ int pay
+ itxn_field TypeEnum
+
+ txn ApplicationArgs 1
+ btoi
+ itxn_field Amount
+
+ txn Sender
+ itxn_field Receiver
+ itxn_submit
+
+ int 1
+ return
+not_withdraw:
+ // Unknown call "method"
+ err
+
+handle_closeout:
+ int 1
+ return
+
+handle_updateapp:
+handle_deleteapp:
+ txn Sender
+ global CreatorAddress
+ ==
+ return
+
+
+bad:
+ err
+
+debug:
+ byte "debug"
+ swap
+ app_global_put
+ retsub
diff --git a/test/testdata/deployednettemplates/recipes/bootstrappedScenario/Makefile b/test/testdata/deployednettemplates/recipes/bootstrappedScenario/Makefile
index ee48014b6..626f3ff85 100644
--- a/test/testdata/deployednettemplates/recipes/bootstrappedScenario/Makefile
+++ b/test/testdata/deployednettemplates/recipes/bootstrappedScenario/Makefile
@@ -1,5 +1,5 @@
PARAMS=-w 100 -R 8 -N 20 -n 100 -H 10 --node-template node.json --relay-template relay.json --non-participating-node-template nonPartNode.json
-FILEPARAMS=--rounds 5000 --ntrx 1000 --naccounts 3000000 --nassets 20000 --napps 20000 --wallet-name "wallet1"
+FILEPARAMS=--rounds 5000 --ntxns 1000 --naccounts 3000000 --nassets 20000 --napps 20000 --wallet-name "wallet1" --bal 100000 --bal 1000000
all: net.json genesis.json boostrappedFile.json
diff --git a/test/testdata/deployednettemplates/recipes/bootstrappedScenario/boostrappedFile.json b/test/testdata/deployednettemplates/recipes/bootstrappedScenario/boostrappedFile.json
index 7e63535ff..82ebb6b3f 100644
--- a/test/testdata/deployednettemplates/recipes/bootstrappedScenario/boostrappedFile.json
+++ b/test/testdata/deployednettemplates/recipes/bootstrappedScenario/boostrappedFile.json
@@ -1,8 +1,12 @@
{
- "numRounds":65000,
+ "numRounds": 5000,
"roundTransactionsCount": 1000,
- "generatedAccountsCount": 7000000,
- "generatedAssetsCount": 200000,
- "generatedApplicationCount": 1000000,
- "sourceWalletName": "wallet1"
+ "generatedAccountsCount": 30000000,
+ "generatedAssetsCount": 20000,
+ "generatedApplicationCount": 20000,
+ "sourceWalletName": "wallet1",
+ "acctBalanceRange": [
+ 100000,
+ 1000000
+ ]
}
diff --git a/test/testdata/deployednettemplates/recipes/bootstrappedScenario/genesis.json b/test/testdata/deployednettemplates/recipes/bootstrappedScenario/genesis.json
index 77a347e27..9e37558fa 100644
--- a/test/testdata/deployednettemplates/recipes/bootstrappedScenario/genesis.json
+++ b/test/testdata/deployednettemplates/recipes/bootstrappedScenario/genesis.json
@@ -1,7 +1,7 @@
{
"NetworkName": "",
"VersionModifier": "",
- "ConsensusProtocol": "future",
+ "ConsensusProtocol": "",
"FirstPartKeyRound": 0,
"LastPartKeyRound": 3000000,
"PartKeyDilution": 0,
@@ -1009,5 +1009,6 @@
],
"FeeSink": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
"RewardsPool": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
+ "DevMode": false,
"Comment": ""
}
diff --git a/test/testdata/deployednettemplates/recipes/scenario1/genesis.json b/test/testdata/deployednettemplates/recipes/scenario1/genesis.json
index 77a347e27..b376a492f 100644
--- a/test/testdata/deployednettemplates/recipes/scenario1/genesis.json
+++ b/test/testdata/deployednettemplates/recipes/scenario1/genesis.json
@@ -508,506 +508,57 @@
},
{
"Name": "Wallet101",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet102",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet103",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet104",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet105",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet106",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet107",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet108",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet109",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
},
{
"Name": "Wallet110",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet111",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet112",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet113",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet114",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet115",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet116",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet117",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet118",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet119",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet120",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet121",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet122",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet123",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet124",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet125",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet126",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet127",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet128",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet129",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet130",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet131",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet132",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet133",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet134",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet135",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet136",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet137",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet138",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet139",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet140",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet141",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet142",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet143",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet144",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet145",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet146",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet147",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet148",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet149",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet150",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet151",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet152",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet153",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet154",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet155",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet156",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet157",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet158",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet159",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet160",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet161",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet162",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet163",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet164",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet165",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet166",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet167",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet168",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet169",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet170",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet171",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet172",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet173",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet174",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet175",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet176",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet177",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet178",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet179",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet180",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet181",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet182",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet183",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet184",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet185",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet186",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet187",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet188",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet189",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet190",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet191",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet192",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet193",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet194",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet195",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet196",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet197",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet198",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet199",
- "Stake": 0.5,
- "Online": false
- },
- {
- "Name": "Wallet200",
- "Stake": 0.5,
+ "Stake": 5,
"Online": false
}
],
"FeeSink": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
"RewardsPool": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
+ "DevMode": false,
"Comment": ""
}
diff --git a/test/testdata/deployednettemplates/recipes/scenario1/net.json b/test/testdata/deployednettemplates/recipes/scenario1/net.json
index 66de63428..51858f3f9 100644
--- a/test/testdata/deployednettemplates/recipes/scenario1/net.json
+++ b/test/testdata/deployednettemplates/recipes/scenario1/net.json
@@ -2010,42 +2010,6 @@
{
"Name": "Wallet101",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet191",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2068,42 +2032,6 @@
{
"Name": "Wallet102",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet192",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2126,42 +2054,6 @@
{
"Name": "Wallet103",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet193",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2184,42 +2076,6 @@
{
"Name": "Wallet104",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet194",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2242,42 +2098,6 @@
{
"Name": "Wallet105",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet195",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2300,42 +2120,6 @@
{
"Name": "Wallet106",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet196",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2358,42 +2142,6 @@
{
"Name": "Wallet107",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet197",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2416,42 +2164,6 @@
{
"Name": "Wallet108",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet198",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2474,42 +2186,6 @@
{
"Name": "Wallet109",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet199",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -2532,42 +2208,6 @@
{
"Name": "Wallet110",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet200",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
diff --git a/test/testdata/deployednettemplates/recipes/scenario2/genesis.json b/test/testdata/deployednettemplates/recipes/scenario2/genesis.json
index 0d49224f8..7c40b5148 100644
--- a/test/testdata/deployednettemplates/recipes/scenario2/genesis.json
+++ b/test/testdata/deployednettemplates/recipes/scenario2/genesis.json
@@ -2008,2006 +2008,82 @@
},
{
"Name": "Wallet401",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet402",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet403",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet404",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet405",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet406",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet407",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet408",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet409",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet410",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet411",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet412",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet413",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet414",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet415",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet416",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet417",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet418",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet419",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet420",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet421",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet422",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet423",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet424",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet425",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet426",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet427",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet428",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet429",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet430",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet431",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet432",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet433",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet434",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet435",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet436",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet437",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet438",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet439",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet440",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet441",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet442",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet443",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet444",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet445",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet446",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet447",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet448",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet449",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet450",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet451",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet452",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet453",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet454",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet455",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet456",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet457",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet458",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet459",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet460",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet461",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet462",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet463",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet464",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet465",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet466",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet467",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet468",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet469",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet470",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet471",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet472",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet473",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet474",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet475",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet476",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet477",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet478",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet479",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet480",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet481",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet482",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet483",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet484",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet485",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet486",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet487",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet488",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet489",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet490",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet491",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet492",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet493",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet494",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet495",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet496",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet497",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet498",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet499",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet500",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet501",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet502",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet503",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet504",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet505",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet506",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet507",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet508",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet509",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet510",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet511",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet512",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet513",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet514",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet515",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet516",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet517",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet518",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet519",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet520",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet521",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet522",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet523",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet524",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet525",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet526",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet527",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet528",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet529",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet530",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet531",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet532",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet533",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet534",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet535",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet536",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet537",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet538",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet539",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet540",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet541",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet542",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet543",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet544",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet545",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet546",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet547",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet548",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet549",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet550",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet551",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet552",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet553",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet554",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet555",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet556",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet557",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet558",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet559",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet560",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet561",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet562",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet563",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet564",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet565",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet566",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet567",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet568",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet569",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet570",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet571",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet572",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet573",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet574",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet575",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet576",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet577",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet578",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet579",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet580",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet581",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet582",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet583",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet584",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet585",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet586",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet587",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet588",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet589",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet590",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet591",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet592",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet593",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet594",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet595",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet596",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet597",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet598",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet599",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet600",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet601",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet602",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet603",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet604",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet605",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet606",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet607",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet608",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet609",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet610",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet611",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet612",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet613",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet614",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet615",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet616",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet617",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet618",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet619",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet620",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet621",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet622",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet623",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet624",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet625",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet626",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet627",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet628",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet629",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet630",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet631",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet632",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet633",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet634",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet635",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet636",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet637",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet638",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet639",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet640",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet641",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet642",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet643",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet644",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet645",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet646",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet647",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet648",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet649",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet650",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet651",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet652",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet653",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet654",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet655",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet656",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet657",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet658",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet659",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet660",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet661",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet662",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet663",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet664",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet665",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet666",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet667",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet668",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet669",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet670",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet671",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet672",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet673",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet674",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet675",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet676",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet677",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet678",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet679",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet680",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet681",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet682",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet683",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet684",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet685",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet686",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet687",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet688",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet689",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet690",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet691",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet692",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet693",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet694",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet695",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet696",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet697",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet698",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet699",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet700",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet701",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet702",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet703",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet704",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet705",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet706",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet707",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet708",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet709",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet710",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet711",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet712",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet713",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet714",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet715",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet716",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet717",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet718",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet719",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet720",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet721",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet722",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet723",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet724",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet725",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet726",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet727",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet728",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet729",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet730",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet731",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet732",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet733",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet734",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet735",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet736",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet737",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet738",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet739",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet740",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet741",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet742",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet743",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet744",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet745",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet746",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet747",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet748",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet749",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet750",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet751",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet752",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet753",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet754",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet755",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet756",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet757",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet758",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet759",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet760",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet761",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet762",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet763",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet764",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet765",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet766",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet767",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet768",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet769",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet770",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet771",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet772",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet773",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet774",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet775",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet776",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet777",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet778",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet779",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet780",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet781",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet782",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet783",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet784",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet785",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet786",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet787",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet788",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet789",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet790",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet791",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet792",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet793",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet794",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet795",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet796",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet797",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet798",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet799",
- "Stake": 0.125,
- "Online": false
- },
- {
- "Name": "Wallet800",
- "Stake": 0.125,
+ "Stake": 3.3333333333333335,
"Online": false
}
],
"FeeSink": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
"RewardsPool": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
+ "DevMode": false,
"Comment": ""
}
diff --git a/test/testdata/deployednettemplates/recipes/scenario2/net.json b/test/testdata/deployednettemplates/recipes/scenario2/net.json
index 6f68376f6..e816dfd04 100644
--- a/test/testdata/deployednettemplates/recipes/scenario2/net.json
+++ b/test/testdata/deployednettemplates/recipes/scenario2/net.json
@@ -16,7 +16,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -36,7 +36,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -56,7 +56,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -76,7 +76,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -96,7 +96,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -116,7 +116,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -136,7 +136,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -156,7 +156,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -176,7 +176,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -196,7 +196,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -216,7 +216,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -236,7 +236,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -256,7 +256,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -276,7 +276,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -296,7 +296,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -316,7 +316,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -336,7 +336,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -356,7 +356,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -376,7 +376,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -396,7 +396,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -423,7 +423,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node41",
@@ -444,7 +444,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node81",
@@ -465,7 +465,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node121",
@@ -486,7 +486,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node161",
@@ -507,7 +507,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -534,7 +534,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node42",
@@ -555,7 +555,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node82",
@@ -576,7 +576,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node122",
@@ -597,7 +597,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node162",
@@ -618,7 +618,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -645,7 +645,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node43",
@@ -666,7 +666,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node83",
@@ -687,7 +687,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node123",
@@ -708,7 +708,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node163",
@@ -729,7 +729,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -756,7 +756,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node44",
@@ -777,7 +777,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node84",
@@ -798,7 +798,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node124",
@@ -819,7 +819,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node164",
@@ -840,7 +840,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -867,7 +867,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node45",
@@ -888,7 +888,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node85",
@@ -909,7 +909,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node125",
@@ -930,7 +930,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node165",
@@ -951,7 +951,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -978,7 +978,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node46",
@@ -999,7 +999,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node86",
@@ -1020,7 +1020,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node126",
@@ -1041,7 +1041,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node166",
@@ -1062,7 +1062,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1089,7 +1089,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node47",
@@ -1110,7 +1110,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node87",
@@ -1131,7 +1131,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node127",
@@ -1152,7 +1152,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node167",
@@ -1173,7 +1173,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1200,7 +1200,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node48",
@@ -1221,7 +1221,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node88",
@@ -1242,7 +1242,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node128",
@@ -1263,7 +1263,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node168",
@@ -1284,7 +1284,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1311,7 +1311,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node49",
@@ -1332,7 +1332,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node89",
@@ -1353,7 +1353,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node129",
@@ -1374,7 +1374,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node169",
@@ -1395,7 +1395,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1422,7 +1422,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node50",
@@ -1443,7 +1443,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node90",
@@ -1464,7 +1464,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node130",
@@ -1485,7 +1485,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node170",
@@ -1506,7 +1506,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1533,7 +1533,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node51",
@@ -1554,7 +1554,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node91",
@@ -1575,7 +1575,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node131",
@@ -1596,7 +1596,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node171",
@@ -1617,7 +1617,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1644,7 +1644,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node52",
@@ -1665,7 +1665,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node92",
@@ -1686,7 +1686,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node132",
@@ -1707,7 +1707,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node172",
@@ -1728,7 +1728,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1755,7 +1755,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node53",
@@ -1776,7 +1776,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node93",
@@ -1797,7 +1797,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node133",
@@ -1818,7 +1818,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node173",
@@ -1839,7 +1839,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1866,7 +1866,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node54",
@@ -1887,7 +1887,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node94",
@@ -1908,7 +1908,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node134",
@@ -1929,7 +1929,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node174",
@@ -1950,7 +1950,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -1977,7 +1977,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node55",
@@ -1998,7 +1998,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node95",
@@ -2019,7 +2019,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node135",
@@ -2040,7 +2040,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node175",
@@ -2061,7 +2061,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2088,7 +2088,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node56",
@@ -2109,7 +2109,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node96",
@@ -2130,7 +2130,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node136",
@@ -2151,7 +2151,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node176",
@@ -2172,7 +2172,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2199,7 +2199,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node57",
@@ -2220,7 +2220,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node97",
@@ -2241,7 +2241,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node137",
@@ -2262,7 +2262,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node177",
@@ -2283,7 +2283,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2310,7 +2310,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node58",
@@ -2331,7 +2331,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node98",
@@ -2352,7 +2352,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node138",
@@ -2373,7 +2373,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node178",
@@ -2394,7 +2394,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2421,7 +2421,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node59",
@@ -2442,7 +2442,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node99",
@@ -2463,7 +2463,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node139",
@@ -2484,7 +2484,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node179",
@@ -2505,7 +2505,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2532,7 +2532,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node60",
@@ -2553,7 +2553,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node100",
@@ -2574,7 +2574,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node140",
@@ -2595,7 +2595,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node180",
@@ -2616,7 +2616,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2643,7 +2643,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node61",
@@ -2664,7 +2664,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node101",
@@ -2685,7 +2685,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node141",
@@ -2706,7 +2706,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node181",
@@ -2727,7 +2727,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2754,7 +2754,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node62",
@@ -2775,7 +2775,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node102",
@@ -2796,7 +2796,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node142",
@@ -2817,7 +2817,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node182",
@@ -2838,7 +2838,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2865,7 +2865,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node63",
@@ -2886,7 +2886,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node103",
@@ -2907,7 +2907,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node143",
@@ -2928,7 +2928,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node183",
@@ -2949,7 +2949,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -2976,7 +2976,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node64",
@@ -2997,7 +2997,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node104",
@@ -3018,7 +3018,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node144",
@@ -3039,7 +3039,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node184",
@@ -3060,7 +3060,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3087,7 +3087,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node65",
@@ -3108,7 +3108,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node105",
@@ -3129,7 +3129,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node145",
@@ -3150,7 +3150,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node185",
@@ -3171,7 +3171,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3198,7 +3198,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node66",
@@ -3219,7 +3219,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node106",
@@ -3240,7 +3240,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node146",
@@ -3261,7 +3261,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node186",
@@ -3282,7 +3282,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3309,7 +3309,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node67",
@@ -3330,7 +3330,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node107",
@@ -3351,7 +3351,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node147",
@@ -3372,7 +3372,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node187",
@@ -3393,7 +3393,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3420,7 +3420,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node68",
@@ -3441,7 +3441,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node108",
@@ -3462,7 +3462,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node148",
@@ -3483,7 +3483,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node188",
@@ -3504,7 +3504,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3531,7 +3531,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node69",
@@ -3552,7 +3552,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node109",
@@ -3573,7 +3573,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node149",
@@ -3594,7 +3594,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node189",
@@ -3615,7 +3615,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3642,7 +3642,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node70",
@@ -3663,7 +3663,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node110",
@@ -3684,7 +3684,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node150",
@@ -3705,7 +3705,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node190",
@@ -3726,7 +3726,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3753,7 +3753,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node71",
@@ -3774,7 +3774,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node111",
@@ -3795,7 +3795,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node151",
@@ -3816,7 +3816,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node191",
@@ -3837,7 +3837,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3864,7 +3864,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node72",
@@ -3885,7 +3885,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node112",
@@ -3906,7 +3906,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node152",
@@ -3927,7 +3927,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node192",
@@ -3948,7 +3948,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3975,7 +3975,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node73",
@@ -3996,7 +3996,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node113",
@@ -4017,7 +4017,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node153",
@@ -4038,7 +4038,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node193",
@@ -4059,7 +4059,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4086,7 +4086,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node74",
@@ -4107,7 +4107,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node114",
@@ -4128,7 +4128,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node154",
@@ -4149,7 +4149,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node194",
@@ -4170,7 +4170,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4197,7 +4197,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node75",
@@ -4218,7 +4218,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node115",
@@ -4239,7 +4239,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node155",
@@ -4260,7 +4260,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node195",
@@ -4281,7 +4281,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4308,7 +4308,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node76",
@@ -4329,7 +4329,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node116",
@@ -4350,7 +4350,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node156",
@@ -4371,7 +4371,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node196",
@@ -4392,7 +4392,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4419,7 +4419,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node77",
@@ -4440,7 +4440,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node117",
@@ -4461,7 +4461,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node157",
@@ -4482,7 +4482,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node197",
@@ -4503,7 +4503,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4530,7 +4530,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node78",
@@ -4551,7 +4551,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node118",
@@ -4572,7 +4572,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node158",
@@ -4593,7 +4593,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node198",
@@ -4614,7 +4614,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4641,7 +4641,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node79",
@@ -4662,7 +4662,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node119",
@@ -4683,7 +4683,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node159",
@@ -4704,7 +4704,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node199",
@@ -4725,7 +4725,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4752,7 +4752,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node80",
@@ -4773,7 +4773,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node120",
@@ -4794,7 +4794,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node160",
@@ -4815,7 +4815,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node200",
@@ -4836,7 +4836,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 4, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -4850,110 +4850,6 @@
{
"Name": "Wallet401",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet791",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -4976,110 +4872,6 @@
{
"Name": "Wallet402",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet792",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5102,110 +4894,6 @@
{
"Name": "Wallet403",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet793",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5228,110 +4916,6 @@
{
"Name": "Wallet404",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet794",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5354,110 +4938,6 @@
{
"Name": "Wallet405",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet795",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5480,110 +4960,6 @@
{
"Name": "Wallet406",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet796",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5606,110 +4982,6 @@
{
"Name": "Wallet407",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet797",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5732,110 +5004,6 @@
{
"Name": "Wallet408",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet798",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5858,110 +5026,6 @@
{
"Name": "Wallet409",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet799",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -5984,110 +5048,6 @@
{
"Name": "Wallet410",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet800",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -6110,106 +5070,6 @@
{
"Name": "Wallet411",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet786",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -6232,106 +5092,6 @@
{
"Name": "Wallet412",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet787",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -6354,106 +5114,6 @@
{
"Name": "Wallet413",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet788",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -6476,106 +5136,6 @@
{
"Name": "Wallet414",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet789",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
@@ -6598,106 +5158,6 @@
{
"Name": "Wallet415",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet790",
- "ParticipationOnly": false
}
],
"APIEndpoint": "{{APIEndpoint}}",
diff --git a/test/testdata/deployednettemplates/recipes/scenario3/genesis.json b/test/testdata/deployednettemplates/recipes/scenario3/genesis.json
index 1c489157d..d4519dddc 100644
--- a/test/testdata/deployednettemplates/recipes/scenario3/genesis.json
+++ b/test/testdata/deployednettemplates/recipes/scenario3/genesis.json
@@ -1,7 +1,7 @@
{
"NetworkName": "",
"VersionModifier": "",
- "ConsensusProtocol": "",
+ "ConsensusProtocol": "future",
"FirstPartKeyRound": 0,
"LastPartKeyRound": 3000000,
"PartKeyDilution": 0,
@@ -50008,50006 +50008,82 @@
},
{
"Name": "Wallet10001",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10002",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10003",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10004",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10005",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10006",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10007",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10008",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10009",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10010",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10011",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10012",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10013",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10014",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
},
{
"Name": "Wallet10015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet10999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet11999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet12999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet13999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet14999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet15999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet16999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet17999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet18999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19000",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19001",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19002",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19003",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19004",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19005",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19006",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19007",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19008",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19009",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19010",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19011",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19012",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19013",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19014",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19015",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19016",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19017",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19018",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19019",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19020",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19021",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19022",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19023",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19024",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19025",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19026",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19027",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19028",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19029",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19030",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19031",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19032",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19033",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19034",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19035",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19036",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19037",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19038",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19039",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19040",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19041",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19042",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19043",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19044",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19045",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19046",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19047",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19048",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19049",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19050",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19051",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19052",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19053",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19054",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19055",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19056",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19057",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19058",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19059",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19060",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19061",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19062",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19063",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19064",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19065",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19066",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19067",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19068",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19069",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19070",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19071",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19072",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19073",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19074",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19075",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19076",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19077",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19078",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19079",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19080",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19081",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19082",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19083",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19084",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19085",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19086",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19087",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19088",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19089",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19090",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19091",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19092",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19093",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19094",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19095",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19096",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19097",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19098",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19099",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19100",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19101",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19102",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19103",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19104",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19105",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19106",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19107",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19108",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19109",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19110",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19111",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19112",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19113",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19114",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19115",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19116",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19117",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19118",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19119",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19120",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19121",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19122",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19123",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19124",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19125",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19126",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19127",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19128",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19129",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19130",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19131",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19132",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19133",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19134",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19135",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19136",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19137",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19138",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19139",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19140",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19141",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19142",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19143",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19144",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19145",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19146",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19147",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19148",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19149",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19150",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19151",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19152",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19153",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19154",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19155",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19156",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19157",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19158",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19159",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19160",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19161",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19162",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19163",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19164",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19165",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19166",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19167",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19168",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19169",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19170",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19171",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19172",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19173",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19174",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19175",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19176",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19177",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19178",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19179",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19180",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19181",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19182",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19183",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19184",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19185",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19186",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19187",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19188",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19189",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19190",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19191",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19192",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19193",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19194",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19195",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19196",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19197",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19198",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19199",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19200",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19201",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19202",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19203",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19204",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19205",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19206",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19207",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19208",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19209",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19210",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19211",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19212",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19213",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19214",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19215",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19216",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19217",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19218",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19219",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19220",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19221",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19222",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19223",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19224",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19225",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19226",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19227",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19228",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19229",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19230",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19231",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19232",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19233",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19234",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19235",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19236",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19237",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19238",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19239",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19240",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19241",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19242",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19243",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19244",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19245",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19246",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19247",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19248",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19249",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19250",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19251",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19252",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19253",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19254",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19255",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19256",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19257",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19258",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19259",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19260",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19261",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19262",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19263",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19264",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19265",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19266",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19267",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19268",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19269",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19270",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19271",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19272",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19273",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19274",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19275",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19276",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19277",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19278",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19279",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19280",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19281",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19282",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19283",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19284",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19285",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19286",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19287",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19288",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19289",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19290",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19291",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19292",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19293",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19294",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19295",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19296",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19297",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19298",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19299",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19300",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19301",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19302",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19303",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19304",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19305",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19306",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19307",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19308",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19309",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19310",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19311",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19312",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19313",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19314",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19315",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19316",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19317",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19318",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19319",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19320",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19321",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19322",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19323",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19324",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19325",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19326",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19327",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19328",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19329",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19330",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19331",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19332",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19333",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19334",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19335",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19336",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19337",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19338",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19339",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19340",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19341",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19342",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19343",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19344",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19345",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19346",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19347",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19348",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19349",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19350",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19351",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19352",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19353",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19354",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19355",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19356",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19357",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19358",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19359",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19360",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19361",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19362",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19363",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19364",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19365",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19366",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19367",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19368",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19369",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19370",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19371",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19372",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19373",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19374",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19375",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19376",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19377",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19378",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19379",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19380",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19381",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19382",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19383",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19384",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19385",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19386",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19387",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19388",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19389",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19390",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19391",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19392",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19393",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19394",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19395",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19396",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19397",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19398",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19399",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19400",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19401",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19402",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19403",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19404",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19405",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19406",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19407",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19408",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19409",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19410",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19411",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19412",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19413",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19414",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19415",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19416",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19417",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19418",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19419",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19420",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19421",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19422",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19423",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19424",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19425",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19426",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19427",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19428",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19429",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19430",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19431",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19432",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19433",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19434",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19435",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19436",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19437",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19438",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19439",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19440",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19441",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19442",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19443",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19444",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19445",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19446",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19447",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19448",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19449",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19450",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19451",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19452",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19453",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19454",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19455",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19456",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19457",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19458",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19459",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19460",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19461",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19462",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19463",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19464",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19465",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19466",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19467",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19468",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19469",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19470",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19471",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19472",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19473",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19474",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19475",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19476",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19477",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19478",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19479",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19480",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19481",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19482",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19483",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19484",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19485",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19486",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19487",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19488",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19489",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19490",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19491",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19492",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19493",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19494",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19495",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19496",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19497",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19498",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19499",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19500",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19501",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19502",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19503",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19504",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19505",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19506",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19507",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19508",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19509",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19510",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19511",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19512",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19513",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19514",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19515",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19516",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19517",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19518",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19519",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19520",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19521",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19522",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19523",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19524",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19525",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19526",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19527",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19528",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19529",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19530",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19531",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19532",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19533",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19534",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19535",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19536",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19537",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19538",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19539",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19540",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19541",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19542",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19543",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19544",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19545",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19546",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19547",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19548",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19549",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19550",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19551",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19552",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19553",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19554",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19555",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19556",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19557",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19558",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19559",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19560",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19561",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19562",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19563",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19564",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19565",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19566",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19567",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19568",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19569",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19570",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19571",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19572",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19573",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19574",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19575",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19576",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19577",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19578",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19579",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19580",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19581",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19582",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19583",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19584",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19585",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19586",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19587",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19588",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19589",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19590",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19591",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19592",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19593",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19594",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19595",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19596",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19597",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19598",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19599",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19600",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19601",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19602",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19603",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19604",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19605",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19606",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19607",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19608",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19609",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19610",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19611",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19612",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19613",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19614",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19615",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19616",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19617",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19618",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19619",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19620",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19621",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19622",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19623",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19624",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19625",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19626",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19627",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19628",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19629",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19630",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19631",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19632",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19633",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19634",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19635",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19636",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19637",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19638",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19639",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19640",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19641",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19642",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19643",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19644",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19645",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19646",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19647",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19648",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19649",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19650",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19651",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19652",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19653",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19654",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19655",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19656",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19657",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19658",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19659",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19660",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19661",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19662",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19663",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19664",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19665",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19666",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19667",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19668",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19669",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19670",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19671",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19672",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19673",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19674",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19675",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19676",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19677",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19678",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19679",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19680",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19681",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19682",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19683",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19684",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19685",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19686",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19687",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19688",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19689",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19690",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19691",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19692",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19693",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19694",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19695",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19696",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19697",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19698",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19699",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19700",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19701",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19702",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19703",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19704",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19705",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19706",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19707",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19708",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19709",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19710",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19711",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19712",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19713",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19714",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19715",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19716",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19717",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19718",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19719",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19720",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19721",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19722",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19723",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19724",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19725",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19726",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19727",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19728",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19729",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19730",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19731",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19732",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19733",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19734",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19735",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19736",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19737",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19738",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19739",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19740",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19741",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19742",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19743",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19744",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19745",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19746",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19747",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19748",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19749",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19750",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19751",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19752",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19753",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19754",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19755",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19756",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19757",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19758",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19759",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19760",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19761",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19762",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19763",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19764",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19765",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19766",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19767",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19768",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19769",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19770",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19771",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19772",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19773",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19774",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19775",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19776",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19777",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19778",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19779",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19780",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19781",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19782",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19783",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19784",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19785",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19786",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19787",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19788",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19789",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19790",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19791",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19792",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19793",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19794",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19795",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19796",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19797",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19798",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19799",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19800",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19801",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19802",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19803",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19804",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19805",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19806",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19807",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19808",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19809",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19810",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19811",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19812",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19813",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19814",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19815",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19816",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19817",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19818",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19819",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19820",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19821",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19822",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19823",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19824",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19825",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19826",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19827",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19828",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19829",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19830",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19831",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19832",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19833",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19834",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19835",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19836",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19837",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19838",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19839",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19840",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19841",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19842",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19843",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19844",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19845",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19846",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19847",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19848",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19849",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19850",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19851",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19852",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19853",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19854",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19855",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19856",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19857",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19858",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19859",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19860",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19861",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19862",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19863",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19864",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19865",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19866",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19867",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19868",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19869",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19870",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19871",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19872",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19873",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19874",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19875",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19876",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19877",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19878",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19879",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19880",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19881",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19882",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19883",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19884",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19885",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19886",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19887",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19888",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19889",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19890",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19891",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19892",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19893",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19894",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19895",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19896",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19897",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19898",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19899",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19900",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19901",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19902",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19903",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19904",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19905",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19906",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19907",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19908",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19909",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19910",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19911",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19912",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19913",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19914",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19915",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19916",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19917",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19918",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19919",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19920",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19921",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19922",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19923",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19924",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19925",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19926",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19927",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19928",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19929",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19930",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19931",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19932",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19933",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19934",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19935",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19936",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19937",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19938",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19939",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19940",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19941",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19942",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19943",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19944",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19945",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19946",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19947",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19948",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19949",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19950",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19951",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19952",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19953",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19954",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19955",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19956",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19957",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19958",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19959",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19960",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19961",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19962",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19963",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19964",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19965",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19966",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19967",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19968",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19969",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19970",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19971",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19972",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19973",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19974",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19975",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19976",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19977",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19978",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19979",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19980",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19981",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19982",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19983",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19984",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19985",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19986",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19987",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19988",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19989",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19990",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19991",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19992",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19993",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19994",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19995",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19996",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19997",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19998",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet19999",
- "Stake": 0.005,
- "Online": false
- },
- {
- "Name": "Wallet20000",
- "Stake": 0.005,
+ "Stake": 3.3333333333333335,
"Online": false
}
],
"FeeSink": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
"RewardsPool": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ",
+ "DevMode": false,
"Comment": ""
}
diff --git a/test/testdata/deployednettemplates/recipes/scenario3/net.json b/test/testdata/deployednettemplates/recipes/scenario3/net.json
index cc87e96a4..8cc1ccac2 100644
--- a/test/testdata/deployednettemplates/recipes/scenario3/net.json
+++ b/test/testdata/deployednettemplates/recipes/scenario3/net.json
@@ -16,7 +16,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -36,7 +36,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -56,7 +56,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -76,7 +76,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -96,7 +96,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -116,7 +116,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -136,7 +136,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -156,7 +156,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -176,7 +176,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -196,7 +196,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -216,7 +216,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -236,7 +236,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -256,7 +256,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -276,7 +276,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -296,7 +296,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -316,7 +316,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -336,7 +336,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -356,7 +356,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -376,7 +376,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -396,7 +396,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -455,7 +455,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node101",
@@ -508,7 +508,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node201",
@@ -561,7 +561,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node301",
@@ -614,7 +614,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node401",
@@ -667,7 +667,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node501",
@@ -720,7 +720,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node601",
@@ -773,7 +773,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node701",
@@ -826,7 +826,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node801",
@@ -879,7 +879,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node901",
@@ -932,7 +932,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -991,7 +991,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node102",
@@ -1044,7 +1044,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node202",
@@ -1097,7 +1097,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node302",
@@ -1150,7 +1150,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node402",
@@ -1203,7 +1203,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node502",
@@ -1256,7 +1256,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node602",
@@ -1309,7 +1309,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node702",
@@ -1362,7 +1362,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node802",
@@ -1415,7 +1415,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node902",
@@ -1468,7 +1468,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -1527,7 +1527,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node103",
@@ -1580,7 +1580,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node203",
@@ -1633,7 +1633,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node303",
@@ -1686,7 +1686,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node403",
@@ -1739,7 +1739,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node503",
@@ -1792,7 +1792,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node603",
@@ -1845,7 +1845,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node703",
@@ -1898,7 +1898,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node803",
@@ -1951,7 +1951,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node903",
@@ -2004,7 +2004,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -2063,7 +2063,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node104",
@@ -2116,7 +2116,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node204",
@@ -2169,7 +2169,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node304",
@@ -2222,7 +2222,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node404",
@@ -2275,7 +2275,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node504",
@@ -2328,7 +2328,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node604",
@@ -2381,7 +2381,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node704",
@@ -2434,7 +2434,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node804",
@@ -2487,7 +2487,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node904",
@@ -2540,7 +2540,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -2599,7 +2599,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node105",
@@ -2652,7 +2652,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node205",
@@ -2705,7 +2705,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node305",
@@ -2758,7 +2758,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node405",
@@ -2811,7 +2811,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node505",
@@ -2864,7 +2864,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node605",
@@ -2917,7 +2917,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node705",
@@ -2970,7 +2970,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node805",
@@ -3023,7 +3023,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node905",
@@ -3076,7 +3076,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -3135,7 +3135,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node106",
@@ -3188,7 +3188,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node206",
@@ -3241,7 +3241,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node306",
@@ -3294,7 +3294,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node406",
@@ -3347,7 +3347,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node506",
@@ -3400,7 +3400,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node606",
@@ -3453,7 +3453,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node706",
@@ -3506,7 +3506,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node806",
@@ -3559,7 +3559,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node906",
@@ -3612,7 +3612,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
}
]
},
@@ -3671,7 +3671,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node107",
@@ -3724,7 +3724,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node207",
@@ -3777,7 +3777,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node307",
@@ -3830,7 +3830,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node407",
@@ -3883,7 +3883,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node507",
@@ -3936,7 +3936,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node607",
@@ -3989,7 +3989,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node707",
@@ -4042,7 +4042,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node807",
@@ -4095,7 +4095,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node907",
@@ -4148,7 +4148,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -4207,7 +4207,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node108",
@@ -4260,7 +4260,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node208",
@@ -4313,7 +4313,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node308",
@@ -4366,7 +4366,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node408",
@@ -4419,7 +4419,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node508",
@@ -4472,7 +4472,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node608",
@@ -4525,7 +4525,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node708",
@@ -4578,7 +4578,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node808",
@@ -4631,7 +4631,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node908",
@@ -4684,7 +4684,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -4743,7 +4743,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node109",
@@ -4796,7 +4796,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node209",
@@ -4849,7 +4849,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node309",
@@ -4902,7 +4902,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node409",
@@ -4955,7 +4955,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node509",
@@ -5008,7 +5008,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node609",
@@ -5061,7 +5061,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node709",
@@ -5114,7 +5114,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node809",
@@ -5167,7 +5167,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node909",
@@ -5220,7 +5220,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -5279,7 +5279,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node110",
@@ -5332,7 +5332,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node210",
@@ -5385,7 +5385,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node310",
@@ -5438,7 +5438,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node410",
@@ -5491,7 +5491,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node510",
@@ -5544,7 +5544,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node610",
@@ -5597,7 +5597,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node710",
@@ -5650,7 +5650,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node810",
@@ -5703,7 +5703,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node910",
@@ -5756,7 +5756,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -5815,7 +5815,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node111",
@@ -5868,7 +5868,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node211",
@@ -5921,7 +5921,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node311",
@@ -5974,7 +5974,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node411",
@@ -6027,7 +6027,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node511",
@@ -6080,7 +6080,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node611",
@@ -6133,7 +6133,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node711",
@@ -6186,7 +6186,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node811",
@@ -6239,7 +6239,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node911",
@@ -6292,7 +6292,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -6351,7 +6351,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node112",
@@ -6404,7 +6404,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node212",
@@ -6457,7 +6457,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node312",
@@ -6510,7 +6510,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node412",
@@ -6563,7 +6563,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node512",
@@ -6616,7 +6616,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node612",
@@ -6669,7 +6669,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node712",
@@ -6722,7 +6722,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node812",
@@ -6775,7 +6775,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node912",
@@ -6828,7 +6828,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -6887,7 +6887,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node113",
@@ -6940,7 +6940,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node213",
@@ -6993,7 +6993,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node313",
@@ -7046,7 +7046,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node413",
@@ -7099,7 +7099,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node513",
@@ -7152,7 +7152,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node613",
@@ -7205,7 +7205,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node713",
@@ -7258,7 +7258,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node813",
@@ -7311,7 +7311,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node913",
@@ -7364,7 +7364,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -7423,7 +7423,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node114",
@@ -7476,7 +7476,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node214",
@@ -7529,7 +7529,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node314",
@@ -7582,7 +7582,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node414",
@@ -7635,7 +7635,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node514",
@@ -7688,7 +7688,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node614",
@@ -7741,7 +7741,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node714",
@@ -7794,7 +7794,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node814",
@@ -7847,7 +7847,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node914",
@@ -7900,7 +7900,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -7959,7 +7959,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node115",
@@ -8012,7 +8012,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node215",
@@ -8065,7 +8065,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node315",
@@ -8118,7 +8118,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node415",
@@ -8171,7 +8171,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node515",
@@ -8224,7 +8224,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node615",
@@ -8277,7 +8277,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node715",
@@ -8330,7 +8330,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node815",
@@ -8383,7 +8383,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node915",
@@ -8436,7 +8436,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -8495,7 +8495,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node116",
@@ -8548,7 +8548,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node216",
@@ -8601,7 +8601,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node316",
@@ -8654,7 +8654,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node416",
@@ -8707,7 +8707,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node516",
@@ -8760,7 +8760,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node616",
@@ -8813,7 +8813,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node716",
@@ -8866,7 +8866,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node816",
@@ -8919,7 +8919,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node916",
@@ -8972,7 +8972,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -9031,7 +9031,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node117",
@@ -9084,7 +9084,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node217",
@@ -9137,7 +9137,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node317",
@@ -9190,7 +9190,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node417",
@@ -9243,7 +9243,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node517",
@@ -9296,7 +9296,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node617",
@@ -9349,7 +9349,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node717",
@@ -9402,7 +9402,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node817",
@@ -9455,7 +9455,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node917",
@@ -9508,7 +9508,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -9567,7 +9567,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node118",
@@ -9620,7 +9620,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node218",
@@ -9673,7 +9673,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node318",
@@ -9726,7 +9726,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node418",
@@ -9779,7 +9779,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node518",
@@ -9832,7 +9832,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node618",
@@ -9885,7 +9885,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node718",
@@ -9938,7 +9938,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node818",
@@ -9991,7 +9991,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node918",
@@ -10044,7 +10044,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -10103,7 +10103,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node119",
@@ -10156,7 +10156,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node219",
@@ -10209,7 +10209,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node319",
@@ -10262,7 +10262,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node419",
@@ -10315,7 +10315,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node519",
@@ -10368,7 +10368,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node619",
@@ -10421,7 +10421,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node719",
@@ -10474,7 +10474,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node819",
@@ -10527,7 +10527,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node919",
@@ -10580,7 +10580,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -10639,7 +10639,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node120",
@@ -10692,7 +10692,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node220",
@@ -10745,7 +10745,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node320",
@@ -10798,7 +10798,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node420",
@@ -10851,7 +10851,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node520",
@@ -10904,7 +10904,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node620",
@@ -10957,7 +10957,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node720",
@@ -11010,7 +11010,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node820",
@@ -11063,7 +11063,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node920",
@@ -11116,7 +11116,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -11175,7 +11175,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node121",
@@ -11228,7 +11228,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node221",
@@ -11281,7 +11281,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node321",
@@ -11334,7 +11334,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node421",
@@ -11387,7 +11387,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node521",
@@ -11440,7 +11440,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node621",
@@ -11493,7 +11493,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node721",
@@ -11546,7 +11546,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node821",
@@ -11599,7 +11599,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node921",
@@ -11652,7 +11652,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -11711,7 +11711,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node122",
@@ -11764,7 +11764,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node222",
@@ -11817,7 +11817,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node322",
@@ -11870,7 +11870,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node422",
@@ -11923,7 +11923,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node522",
@@ -11976,7 +11976,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node622",
@@ -12029,7 +12029,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node722",
@@ -12082,7 +12082,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node822",
@@ -12135,7 +12135,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node922",
@@ -12188,7 +12188,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -12247,7 +12247,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node123",
@@ -12300,7 +12300,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node223",
@@ -12353,7 +12353,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node323",
@@ -12406,7 +12406,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node423",
@@ -12459,7 +12459,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node523",
@@ -12512,7 +12512,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node623",
@@ -12565,7 +12565,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node723",
@@ -12618,7 +12618,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node823",
@@ -12671,7 +12671,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node923",
@@ -12724,7 +12724,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -12783,7 +12783,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node124",
@@ -12836,7 +12836,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node224",
@@ -12889,7 +12889,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node324",
@@ -12942,7 +12942,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node424",
@@ -12995,7 +12995,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node524",
@@ -13048,7 +13048,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node624",
@@ -13101,7 +13101,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node724",
@@ -13154,7 +13154,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node824",
@@ -13207,7 +13207,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node924",
@@ -13260,7 +13260,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -13319,7 +13319,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node125",
@@ -13372,7 +13372,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node225",
@@ -13425,7 +13425,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node325",
@@ -13478,7 +13478,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node425",
@@ -13531,7 +13531,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node525",
@@ -13584,7 +13584,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node625",
@@ -13637,7 +13637,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node725",
@@ -13690,7 +13690,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node825",
@@ -13743,7 +13743,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node925",
@@ -13796,7 +13796,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -13855,7 +13855,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node126",
@@ -13908,7 +13908,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node226",
@@ -13961,7 +13961,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node326",
@@ -14014,7 +14014,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node426",
@@ -14067,7 +14067,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node526",
@@ -14120,7 +14120,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node626",
@@ -14173,7 +14173,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node726",
@@ -14226,7 +14226,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node826",
@@ -14279,7 +14279,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node926",
@@ -14332,7 +14332,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -14391,7 +14391,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node127",
@@ -14444,7 +14444,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node227",
@@ -14497,7 +14497,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node327",
@@ -14550,7 +14550,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node427",
@@ -14603,7 +14603,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node527",
@@ -14656,7 +14656,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node627",
@@ -14709,7 +14709,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node727",
@@ -14762,7 +14762,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node827",
@@ -14815,7 +14815,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node927",
@@ -14868,7 +14868,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -14927,7 +14927,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node128",
@@ -14980,7 +14980,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node228",
@@ -15033,7 +15033,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node328",
@@ -15086,7 +15086,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node428",
@@ -15139,7 +15139,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node528",
@@ -15192,7 +15192,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node628",
@@ -15245,7 +15245,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node728",
@@ -15298,7 +15298,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node828",
@@ -15351,7 +15351,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node928",
@@ -15404,7 +15404,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -15463,7 +15463,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node129",
@@ -15516,7 +15516,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node229",
@@ -15569,7 +15569,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node329",
@@ -15622,7 +15622,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node429",
@@ -15675,7 +15675,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node529",
@@ -15728,7 +15728,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node629",
@@ -15781,7 +15781,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node729",
@@ -15834,7 +15834,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node829",
@@ -15887,7 +15887,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node929",
@@ -15940,7 +15940,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -15999,7 +15999,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node130",
@@ -16052,7 +16052,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node230",
@@ -16105,7 +16105,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node330",
@@ -16158,7 +16158,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node430",
@@ -16211,7 +16211,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node530",
@@ -16264,7 +16264,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node630",
@@ -16317,7 +16317,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node730",
@@ -16370,7 +16370,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node830",
@@ -16423,7 +16423,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node930",
@@ -16476,7 +16476,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -16535,7 +16535,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node131",
@@ -16588,7 +16588,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node231",
@@ -16641,7 +16641,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node331",
@@ -16694,7 +16694,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node431",
@@ -16747,7 +16747,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node531",
@@ -16800,7 +16800,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node631",
@@ -16853,7 +16853,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node731",
@@ -16906,7 +16906,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node831",
@@ -16959,7 +16959,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node931",
@@ -17012,7 +17012,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -17071,7 +17071,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node132",
@@ -17124,7 +17124,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node232",
@@ -17177,7 +17177,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node332",
@@ -17230,7 +17230,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node432",
@@ -17283,7 +17283,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node532",
@@ -17336,7 +17336,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node632",
@@ -17389,7 +17389,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node732",
@@ -17442,7 +17442,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node832",
@@ -17495,7 +17495,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node932",
@@ -17548,7 +17548,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -17607,7 +17607,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node133",
@@ -17660,7 +17660,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node233",
@@ -17713,7 +17713,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node333",
@@ -17766,7 +17766,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node433",
@@ -17819,7 +17819,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node533",
@@ -17872,7 +17872,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node633",
@@ -17925,7 +17925,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node733",
@@ -17978,7 +17978,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node833",
@@ -18031,7 +18031,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node933",
@@ -18084,7 +18084,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -18143,7 +18143,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node134",
@@ -18196,7 +18196,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node234",
@@ -18249,7 +18249,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node334",
@@ -18302,7 +18302,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node434",
@@ -18355,7 +18355,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node534",
@@ -18408,7 +18408,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node634",
@@ -18461,7 +18461,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node734",
@@ -18514,7 +18514,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node834",
@@ -18567,7 +18567,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node934",
@@ -18620,7 +18620,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -18679,7 +18679,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node135",
@@ -18732,7 +18732,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node235",
@@ -18785,7 +18785,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node335",
@@ -18838,7 +18838,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node435",
@@ -18891,7 +18891,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node535",
@@ -18944,7 +18944,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node635",
@@ -18997,7 +18997,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node735",
@@ -19050,7 +19050,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node835",
@@ -19103,7 +19103,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node935",
@@ -19156,7 +19156,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -19215,7 +19215,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node136",
@@ -19268,7 +19268,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node236",
@@ -19321,7 +19321,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node336",
@@ -19374,7 +19374,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node436",
@@ -19427,7 +19427,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node536",
@@ -19480,7 +19480,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node636",
@@ -19533,7 +19533,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node736",
@@ -19586,7 +19586,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node836",
@@ -19639,7 +19639,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node936",
@@ -19692,7 +19692,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -19751,7 +19751,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node137",
@@ -19804,7 +19804,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node237",
@@ -19857,7 +19857,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node337",
@@ -19910,7 +19910,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node437",
@@ -19963,7 +19963,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node537",
@@ -20016,7 +20016,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node637",
@@ -20069,7 +20069,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node737",
@@ -20122,7 +20122,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node837",
@@ -20175,7 +20175,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node937",
@@ -20228,7 +20228,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -20287,7 +20287,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node138",
@@ -20340,7 +20340,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node238",
@@ -20393,7 +20393,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node338",
@@ -20446,7 +20446,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node438",
@@ -20499,7 +20499,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node538",
@@ -20552,7 +20552,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node638",
@@ -20605,7 +20605,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node738",
@@ -20658,7 +20658,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node838",
@@ -20711,7 +20711,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node938",
@@ -20764,7 +20764,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -20823,7 +20823,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node139",
@@ -20876,7 +20876,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node239",
@@ -20929,7 +20929,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node339",
@@ -20982,7 +20982,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node439",
@@ -21035,7 +21035,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node539",
@@ -21088,7 +21088,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node639",
@@ -21141,7 +21141,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node739",
@@ -21194,7 +21194,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node839",
@@ -21247,7 +21247,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node939",
@@ -21300,7 +21300,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -21359,7 +21359,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node140",
@@ -21412,7 +21412,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node240",
@@ -21465,7 +21465,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node340",
@@ -21518,7 +21518,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node440",
@@ -21571,7 +21571,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node540",
@@ -21624,7 +21624,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node640",
@@ -21677,7 +21677,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node740",
@@ -21730,7 +21730,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node840",
@@ -21783,7 +21783,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node940",
@@ -21836,7 +21836,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -21895,7 +21895,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node141",
@@ -21948,7 +21948,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node241",
@@ -22001,7 +22001,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node341",
@@ -22054,7 +22054,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node441",
@@ -22107,7 +22107,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node541",
@@ -22160,7 +22160,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node641",
@@ -22213,7 +22213,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node741",
@@ -22266,7 +22266,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node841",
@@ -22319,7 +22319,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node941",
@@ -22372,7 +22372,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -22431,7 +22431,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node142",
@@ -22484,7 +22484,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node242",
@@ -22537,7 +22537,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node342",
@@ -22590,7 +22590,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node442",
@@ -22643,7 +22643,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node542",
@@ -22696,7 +22696,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node642",
@@ -22749,7 +22749,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node742",
@@ -22802,7 +22802,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node842",
@@ -22855,7 +22855,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node942",
@@ -22908,7 +22908,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -22967,7 +22967,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node143",
@@ -23020,7 +23020,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node243",
@@ -23073,7 +23073,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node343",
@@ -23126,7 +23126,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node443",
@@ -23179,7 +23179,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node543",
@@ -23232,7 +23232,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node643",
@@ -23285,7 +23285,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node743",
@@ -23338,7 +23338,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node843",
@@ -23391,7 +23391,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node943",
@@ -23444,7 +23444,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -23503,7 +23503,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node144",
@@ -23556,7 +23556,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node244",
@@ -23609,7 +23609,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node344",
@@ -23662,7 +23662,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node444",
@@ -23715,7 +23715,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node544",
@@ -23768,7 +23768,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node644",
@@ -23821,7 +23821,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node744",
@@ -23874,7 +23874,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node844",
@@ -23927,7 +23927,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node944",
@@ -23980,7 +23980,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -24039,7 +24039,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node145",
@@ -24092,7 +24092,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node245",
@@ -24145,7 +24145,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node345",
@@ -24198,7 +24198,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node445",
@@ -24251,7 +24251,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node545",
@@ -24304,7 +24304,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node645",
@@ -24357,7 +24357,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node745",
@@ -24410,7 +24410,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node845",
@@ -24463,7 +24463,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node945",
@@ -24516,7 +24516,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -24575,7 +24575,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node146",
@@ -24628,7 +24628,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node246",
@@ -24681,7 +24681,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node346",
@@ -24734,7 +24734,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node446",
@@ -24787,7 +24787,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node546",
@@ -24840,7 +24840,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node646",
@@ -24893,7 +24893,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node746",
@@ -24946,7 +24946,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node846",
@@ -24999,7 +24999,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node946",
@@ -25052,7 +25052,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -25111,7 +25111,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node147",
@@ -25164,7 +25164,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node247",
@@ -25217,7 +25217,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node347",
@@ -25270,7 +25270,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node447",
@@ -25323,7 +25323,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node547",
@@ -25376,7 +25376,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node647",
@@ -25429,7 +25429,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node747",
@@ -25482,7 +25482,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node847",
@@ -25535,7 +25535,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node947",
@@ -25588,7 +25588,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -25647,7 +25647,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node148",
@@ -25700,7 +25700,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node248",
@@ -25753,7 +25753,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node348",
@@ -25806,7 +25806,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node448",
@@ -25859,7 +25859,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node548",
@@ -25912,7 +25912,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node648",
@@ -25965,7 +25965,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node748",
@@ -26018,7 +26018,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node848",
@@ -26071,7 +26071,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node948",
@@ -26124,7 +26124,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -26183,7 +26183,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node149",
@@ -26236,7 +26236,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node249",
@@ -26289,7 +26289,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node349",
@@ -26342,7 +26342,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node449",
@@ -26395,7 +26395,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node549",
@@ -26448,7 +26448,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node649",
@@ -26501,7 +26501,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node749",
@@ -26554,7 +26554,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node849",
@@ -26607,7 +26607,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node949",
@@ -26660,7 +26660,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -26719,7 +26719,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node150",
@@ -26772,7 +26772,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node250",
@@ -26825,7 +26825,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node350",
@@ -26878,7 +26878,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node450",
@@ -26931,7 +26931,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node550",
@@ -26984,7 +26984,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node650",
@@ -27037,7 +27037,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node750",
@@ -27090,7 +27090,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node850",
@@ -27143,7 +27143,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node950",
@@ -27196,7 +27196,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -27255,7 +27255,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node151",
@@ -27308,7 +27308,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node251",
@@ -27361,7 +27361,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node351",
@@ -27414,7 +27414,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node451",
@@ -27467,7 +27467,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node551",
@@ -27520,7 +27520,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node651",
@@ -27573,7 +27573,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node751",
@@ -27626,7 +27626,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node851",
@@ -27679,7 +27679,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node951",
@@ -27732,7 +27732,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -27791,7 +27791,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node152",
@@ -27844,7 +27844,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node252",
@@ -27897,7 +27897,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node352",
@@ -27950,7 +27950,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node452",
@@ -28003,7 +28003,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node552",
@@ -28056,7 +28056,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node652",
@@ -28109,7 +28109,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node752",
@@ -28162,7 +28162,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node852",
@@ -28215,7 +28215,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node952",
@@ -28268,7 +28268,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -28327,7 +28327,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node153",
@@ -28380,7 +28380,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node253",
@@ -28433,7 +28433,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node353",
@@ -28486,7 +28486,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node453",
@@ -28539,7 +28539,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node553",
@@ -28592,7 +28592,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node653",
@@ -28645,7 +28645,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node753",
@@ -28698,7 +28698,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node853",
@@ -28751,7 +28751,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node953",
@@ -28804,7 +28804,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -28863,7 +28863,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node154",
@@ -28916,7 +28916,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node254",
@@ -28969,7 +28969,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node354",
@@ -29022,7 +29022,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node454",
@@ -29075,7 +29075,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node554",
@@ -29128,7 +29128,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node654",
@@ -29181,7 +29181,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node754",
@@ -29234,7 +29234,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node854",
@@ -29287,7 +29287,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node954",
@@ -29340,7 +29340,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -29399,7 +29399,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node155",
@@ -29452,7 +29452,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node255",
@@ -29505,7 +29505,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node355",
@@ -29558,7 +29558,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node455",
@@ -29611,7 +29611,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node555",
@@ -29664,7 +29664,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node655",
@@ -29717,7 +29717,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node755",
@@ -29770,7 +29770,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node855",
@@ -29823,7 +29823,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node955",
@@ -29876,7 +29876,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -29935,7 +29935,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node156",
@@ -29988,7 +29988,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node256",
@@ -30041,7 +30041,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node356",
@@ -30094,7 +30094,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node456",
@@ -30147,7 +30147,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node556",
@@ -30200,7 +30200,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node656",
@@ -30253,7 +30253,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node756",
@@ -30306,7 +30306,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node856",
@@ -30359,7 +30359,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node956",
@@ -30412,7 +30412,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -30471,7 +30471,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node157",
@@ -30524,7 +30524,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node257",
@@ -30577,7 +30577,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node357",
@@ -30630,7 +30630,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node457",
@@ -30683,7 +30683,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node557",
@@ -30736,7 +30736,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node657",
@@ -30789,7 +30789,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node757",
@@ -30842,7 +30842,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node857",
@@ -30895,7 +30895,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node957",
@@ -30948,7 +30948,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -31007,7 +31007,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node158",
@@ -31060,7 +31060,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node258",
@@ -31113,7 +31113,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node358",
@@ -31166,7 +31166,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node458",
@@ -31219,7 +31219,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node558",
@@ -31272,7 +31272,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node658",
@@ -31325,7 +31325,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node758",
@@ -31378,7 +31378,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node858",
@@ -31431,7 +31431,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node958",
@@ -31484,7 +31484,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -31543,7 +31543,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node159",
@@ -31596,7 +31596,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node259",
@@ -31649,7 +31649,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node359",
@@ -31702,7 +31702,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node459",
@@ -31755,7 +31755,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node559",
@@ -31808,7 +31808,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node659",
@@ -31861,7 +31861,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node759",
@@ -31914,7 +31914,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node859",
@@ -31967,7 +31967,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node959",
@@ -32020,7 +32020,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -32079,7 +32079,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node160",
@@ -32132,7 +32132,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node260",
@@ -32185,7 +32185,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node360",
@@ -32238,7 +32238,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node460",
@@ -32291,7 +32291,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node560",
@@ -32344,7 +32344,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node660",
@@ -32397,7 +32397,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node760",
@@ -32450,7 +32450,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node860",
@@ -32503,7 +32503,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node960",
@@ -32556,7 +32556,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -32615,7 +32615,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node161",
@@ -32668,7 +32668,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node261",
@@ -32721,7 +32721,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node361",
@@ -32774,7 +32774,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node461",
@@ -32827,7 +32827,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node561",
@@ -32880,7 +32880,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node661",
@@ -32933,7 +32933,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node761",
@@ -32986,7 +32986,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node861",
@@ -33039,7 +33039,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node961",
@@ -33092,7 +33092,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -33151,7 +33151,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node162",
@@ -33204,7 +33204,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node262",
@@ -33257,7 +33257,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node362",
@@ -33310,7 +33310,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node462",
@@ -33363,7 +33363,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node562",
@@ -33416,7 +33416,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node662",
@@ -33469,7 +33469,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node762",
@@ -33522,7 +33522,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node862",
@@ -33575,7 +33575,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node962",
@@ -33628,7 +33628,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -33687,7 +33687,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node163",
@@ -33740,7 +33740,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node263",
@@ -33793,7 +33793,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node363",
@@ -33846,7 +33846,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node463",
@@ -33899,7 +33899,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node563",
@@ -33952,7 +33952,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node663",
@@ -34005,7 +34005,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node763",
@@ -34058,7 +34058,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node863",
@@ -34111,7 +34111,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node963",
@@ -34164,7 +34164,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -34223,7 +34223,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node164",
@@ -34276,7 +34276,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node264",
@@ -34329,7 +34329,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node364",
@@ -34382,7 +34382,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node464",
@@ -34435,7 +34435,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node564",
@@ -34488,7 +34488,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node664",
@@ -34541,7 +34541,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node764",
@@ -34594,7 +34594,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node864",
@@ -34647,7 +34647,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node964",
@@ -34700,7 +34700,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -34759,7 +34759,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node165",
@@ -34812,7 +34812,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node265",
@@ -34865,7 +34865,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node365",
@@ -34918,7 +34918,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node465",
@@ -34971,7 +34971,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node565",
@@ -35024,7 +35024,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node665",
@@ -35077,7 +35077,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node765",
@@ -35130,7 +35130,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node865",
@@ -35183,7 +35183,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node965",
@@ -35236,7 +35236,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -35295,7 +35295,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node166",
@@ -35348,7 +35348,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node266",
@@ -35401,7 +35401,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node366",
@@ -35454,7 +35454,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node466",
@@ -35507,7 +35507,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node566",
@@ -35560,7 +35560,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node666",
@@ -35613,7 +35613,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node766",
@@ -35666,7 +35666,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node866",
@@ -35719,7 +35719,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node966",
@@ -35772,7 +35772,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -35831,7 +35831,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node167",
@@ -35884,7 +35884,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node267",
@@ -35937,7 +35937,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node367",
@@ -35990,7 +35990,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node467",
@@ -36043,7 +36043,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node567",
@@ -36096,7 +36096,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node667",
@@ -36149,7 +36149,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node767",
@@ -36202,7 +36202,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node867",
@@ -36255,7 +36255,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node967",
@@ -36308,7 +36308,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -36367,7 +36367,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node168",
@@ -36420,7 +36420,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node268",
@@ -36473,7 +36473,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node368",
@@ -36526,7 +36526,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node468",
@@ -36579,7 +36579,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node568",
@@ -36632,7 +36632,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node668",
@@ -36685,7 +36685,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node768",
@@ -36738,7 +36738,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node868",
@@ -36791,7 +36791,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node968",
@@ -36844,7 +36844,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -36903,7 +36903,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node169",
@@ -36956,7 +36956,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node269",
@@ -37009,7 +37009,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node369",
@@ -37062,7 +37062,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node469",
@@ -37115,7 +37115,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node569",
@@ -37168,7 +37168,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node669",
@@ -37221,7 +37221,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node769",
@@ -37274,7 +37274,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node869",
@@ -37327,7 +37327,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node969",
@@ -37380,7 +37380,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -37439,7 +37439,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node170",
@@ -37492,7 +37492,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node270",
@@ -37545,7 +37545,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node370",
@@ -37598,7 +37598,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node470",
@@ -37651,7 +37651,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node570",
@@ -37704,7 +37704,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node670",
@@ -37757,7 +37757,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node770",
@@ -37810,7 +37810,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node870",
@@ -37863,7 +37863,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node970",
@@ -37916,7 +37916,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -37975,7 +37975,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node171",
@@ -38028,7 +38028,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node271",
@@ -38081,7 +38081,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node371",
@@ -38134,7 +38134,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node471",
@@ -38187,7 +38187,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node571",
@@ -38240,7 +38240,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node671",
@@ -38293,7 +38293,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node771",
@@ -38346,7 +38346,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node871",
@@ -38399,7 +38399,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node971",
@@ -38452,7 +38452,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -38511,7 +38511,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node172",
@@ -38564,7 +38564,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node272",
@@ -38617,7 +38617,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node372",
@@ -38670,7 +38670,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node472",
@@ -38723,7 +38723,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node572",
@@ -38776,7 +38776,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node672",
@@ -38829,7 +38829,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node772",
@@ -38882,7 +38882,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node872",
@@ -38935,7 +38935,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node972",
@@ -38988,7 +38988,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -39047,7 +39047,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node173",
@@ -39100,7 +39100,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node273",
@@ -39153,7 +39153,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node373",
@@ -39206,7 +39206,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node473",
@@ -39259,7 +39259,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node573",
@@ -39312,7 +39312,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node673",
@@ -39365,7 +39365,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node773",
@@ -39418,7 +39418,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node873",
@@ -39471,7 +39471,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node973",
@@ -39524,7 +39524,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -39583,7 +39583,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node174",
@@ -39636,7 +39636,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node274",
@@ -39689,7 +39689,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node374",
@@ -39742,7 +39742,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node474",
@@ -39795,7 +39795,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node574",
@@ -39848,7 +39848,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node674",
@@ -39901,7 +39901,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node774",
@@ -39954,7 +39954,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node874",
@@ -40007,7 +40007,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node974",
@@ -40060,7 +40060,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -40119,7 +40119,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node175",
@@ -40172,7 +40172,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node275",
@@ -40225,7 +40225,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node375",
@@ -40278,7 +40278,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node475",
@@ -40331,7 +40331,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node575",
@@ -40384,7 +40384,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node675",
@@ -40437,7 +40437,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node775",
@@ -40490,7 +40490,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node875",
@@ -40543,7 +40543,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node975",
@@ -40596,7 +40596,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -40655,7 +40655,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node176",
@@ -40708,7 +40708,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node276",
@@ -40761,7 +40761,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node376",
@@ -40814,7 +40814,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node476",
@@ -40867,7 +40867,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node576",
@@ -40920,7 +40920,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node676",
@@ -40973,7 +40973,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node776",
@@ -41026,7 +41026,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node876",
@@ -41079,7 +41079,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node976",
@@ -41132,7 +41132,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -41191,7 +41191,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node177",
@@ -41244,7 +41244,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node277",
@@ -41297,7 +41297,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node377",
@@ -41350,7 +41350,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node477",
@@ -41403,7 +41403,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node577",
@@ -41456,7 +41456,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node677",
@@ -41509,7 +41509,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node777",
@@ -41562,7 +41562,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node877",
@@ -41615,7 +41615,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node977",
@@ -41668,7 +41668,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -41727,7 +41727,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node178",
@@ -41780,7 +41780,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node278",
@@ -41833,7 +41833,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node378",
@@ -41886,7 +41886,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node478",
@@ -41939,7 +41939,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node578",
@@ -41992,7 +41992,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node678",
@@ -42045,7 +42045,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node778",
@@ -42098,7 +42098,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node878",
@@ -42151,7 +42151,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node978",
@@ -42204,7 +42204,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -42263,7 +42263,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node179",
@@ -42316,7 +42316,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node279",
@@ -42369,7 +42369,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node379",
@@ -42422,7 +42422,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node479",
@@ -42475,7 +42475,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node579",
@@ -42528,7 +42528,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node679",
@@ -42581,7 +42581,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node779",
@@ -42634,7 +42634,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node879",
@@ -42687,7 +42687,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node979",
@@ -42740,7 +42740,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -42799,7 +42799,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node180",
@@ -42852,7 +42852,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node280",
@@ -42905,7 +42905,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node380",
@@ -42958,7 +42958,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node480",
@@ -43011,7 +43011,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node580",
@@ -43064,7 +43064,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node680",
@@ -43117,7 +43117,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node780",
@@ -43170,7 +43170,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node880",
@@ -43223,7 +43223,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node980",
@@ -43276,7 +43276,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -43335,7 +43335,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node181",
@@ -43388,7 +43388,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node281",
@@ -43441,7 +43441,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node381",
@@ -43494,7 +43494,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node481",
@@ -43547,7 +43547,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node581",
@@ -43600,7 +43600,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node681",
@@ -43653,7 +43653,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node781",
@@ -43706,7 +43706,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node881",
@@ -43759,7 +43759,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node981",
@@ -43812,7 +43812,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -43871,7 +43871,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node182",
@@ -43924,7 +43924,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node282",
@@ -43977,7 +43977,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node382",
@@ -44030,7 +44030,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node482",
@@ -44083,7 +44083,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node582",
@@ -44136,7 +44136,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node682",
@@ -44189,7 +44189,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node782",
@@ -44242,7 +44242,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node882",
@@ -44295,7 +44295,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node982",
@@ -44348,7 +44348,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -44407,7 +44407,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node183",
@@ -44460,7 +44460,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node283",
@@ -44513,7 +44513,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node383",
@@ -44566,7 +44566,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node483",
@@ -44619,7 +44619,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node583",
@@ -44672,7 +44672,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node683",
@@ -44725,7 +44725,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node783",
@@ -44778,7 +44778,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node883",
@@ -44831,7 +44831,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node983",
@@ -44884,7 +44884,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -44943,7 +44943,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node184",
@@ -44996,7 +44996,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node284",
@@ -45049,7 +45049,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node384",
@@ -45102,7 +45102,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node484",
@@ -45155,7 +45155,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node584",
@@ -45208,7 +45208,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node684",
@@ -45261,7 +45261,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node784",
@@ -45314,7 +45314,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node884",
@@ -45367,7 +45367,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node984",
@@ -45420,7 +45420,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -45479,7 +45479,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node185",
@@ -45532,7 +45532,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node285",
@@ -45585,7 +45585,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node385",
@@ -45638,7 +45638,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node485",
@@ -45691,7 +45691,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node585",
@@ -45744,7 +45744,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node685",
@@ -45797,7 +45797,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node785",
@@ -45850,7 +45850,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node885",
@@ -45903,7 +45903,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node985",
@@ -45956,7 +45956,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -46015,7 +46015,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node186",
@@ -46068,7 +46068,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node286",
@@ -46121,7 +46121,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node386",
@@ -46174,7 +46174,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node486",
@@ -46227,7 +46227,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node586",
@@ -46280,7 +46280,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node686",
@@ -46333,7 +46333,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node786",
@@ -46386,7 +46386,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node886",
@@ -46439,7 +46439,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node986",
@@ -46492,7 +46492,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -46551,7 +46551,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node187",
@@ -46604,7 +46604,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node287",
@@ -46657,7 +46657,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node387",
@@ -46710,7 +46710,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node487",
@@ -46763,7 +46763,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node587",
@@ -46816,7 +46816,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node687",
@@ -46869,7 +46869,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node787",
@@ -46922,7 +46922,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node887",
@@ -46975,7 +46975,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node987",
@@ -47028,7 +47028,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -47087,7 +47087,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node188",
@@ -47140,7 +47140,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node288",
@@ -47193,7 +47193,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node388",
@@ -47246,7 +47246,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node488",
@@ -47299,7 +47299,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node588",
@@ -47352,7 +47352,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node688",
@@ -47405,7 +47405,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node788",
@@ -47458,7 +47458,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node888",
@@ -47511,7 +47511,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node988",
@@ -47564,7 +47564,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -47623,7 +47623,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node189",
@@ -47676,7 +47676,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node289",
@@ -47729,7 +47729,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node389",
@@ -47782,7 +47782,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node489",
@@ -47835,7 +47835,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node589",
@@ -47888,7 +47888,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node689",
@@ -47941,7 +47941,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node789",
@@ -47994,7 +47994,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node889",
@@ -48047,7 +48047,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node989",
@@ -48100,7 +48100,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -48159,7 +48159,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node190",
@@ -48212,7 +48212,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node290",
@@ -48265,7 +48265,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node390",
@@ -48318,7 +48318,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node490",
@@ -48371,7 +48371,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node590",
@@ -48424,7 +48424,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node690",
@@ -48477,7 +48477,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node790",
@@ -48530,7 +48530,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node890",
@@ -48583,7 +48583,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node990",
@@ -48636,7 +48636,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -48695,7 +48695,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node191",
@@ -48748,7 +48748,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node291",
@@ -48801,7 +48801,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node391",
@@ -48854,7 +48854,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node491",
@@ -48907,7 +48907,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node591",
@@ -48960,7 +48960,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node691",
@@ -49013,7 +49013,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node791",
@@ -49066,7 +49066,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node891",
@@ -49119,7 +49119,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node991",
@@ -49172,7 +49172,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -49231,7 +49231,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node192",
@@ -49284,7 +49284,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node292",
@@ -49337,7 +49337,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node392",
@@ -49390,7 +49390,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node492",
@@ -49443,7 +49443,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node592",
@@ -49496,7 +49496,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node692",
@@ -49549,7 +49549,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node792",
@@ -49602,7 +49602,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node892",
@@ -49655,7 +49655,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node992",
@@ -49708,7 +49708,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -49767,7 +49767,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node193",
@@ -49820,7 +49820,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node293",
@@ -49873,7 +49873,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node393",
@@ -49926,7 +49926,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node493",
@@ -49979,7 +49979,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node593",
@@ -50032,7 +50032,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node693",
@@ -50085,7 +50085,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node793",
@@ -50138,7 +50138,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node893",
@@ -50191,7 +50191,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node993",
@@ -50244,7 +50244,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -50303,7 +50303,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node194",
@@ -50356,7 +50356,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node294",
@@ -50409,7 +50409,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node394",
@@ -50462,7 +50462,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node494",
@@ -50515,7 +50515,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node594",
@@ -50568,7 +50568,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node694",
@@ -50621,7 +50621,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node794",
@@ -50674,7 +50674,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node894",
@@ -50727,7 +50727,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node994",
@@ -50780,7 +50780,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -50839,7 +50839,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node195",
@@ -50892,7 +50892,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node295",
@@ -50945,7 +50945,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node395",
@@ -50998,7 +50998,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node495",
@@ -51051,7 +51051,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node595",
@@ -51104,7 +51104,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node695",
@@ -51157,7 +51157,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node795",
@@ -51210,7 +51210,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node895",
@@ -51263,7 +51263,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node995",
@@ -51316,7 +51316,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -51375,7 +51375,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node196",
@@ -51428,7 +51428,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node296",
@@ -51481,7 +51481,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node396",
@@ -51534,7 +51534,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node496",
@@ -51587,7 +51587,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node596",
@@ -51640,7 +51640,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node696",
@@ -51693,7 +51693,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node796",
@@ -51746,7 +51746,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node896",
@@ -51799,7 +51799,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node996",
@@ -51852,7 +51852,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -51911,7 +51911,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node197",
@@ -51964,7 +51964,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node297",
@@ -52017,7 +52017,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node397",
@@ -52070,7 +52070,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node497",
@@ -52123,7 +52123,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node597",
@@ -52176,7 +52176,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node697",
@@ -52229,7 +52229,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node797",
@@ -52282,7 +52282,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node897",
@@ -52335,7 +52335,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node997",
@@ -52388,7 +52388,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -52447,7 +52447,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node198",
@@ -52500,7 +52500,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node298",
@@ -52553,7 +52553,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node398",
@@ -52606,7 +52606,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node498",
@@ -52659,7 +52659,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node598",
@@ -52712,7 +52712,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node698",
@@ -52765,7 +52765,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node798",
@@ -52818,7 +52818,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node898",
@@ -52871,7 +52871,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node998",
@@ -52924,7 +52924,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -52983,7 +52983,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node199",
@@ -53036,7 +53036,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node299",
@@ -53089,7 +53089,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node399",
@@ -53142,7 +53142,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node499",
@@ -53195,7 +53195,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node599",
@@ -53248,7 +53248,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node699",
@@ -53301,7 +53301,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node799",
@@ -53354,7 +53354,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node899",
@@ -53407,7 +53407,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node999",
@@ -53460,7 +53460,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -53519,7 +53519,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node200",
@@ -53572,7 +53572,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node300",
@@ -53625,7 +53625,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node400",
@@ -53678,7 +53678,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node500",
@@ -53731,7 +53731,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": true,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"EnableAgreementReporting\": true, \"EnableAgreementTimeMetrics\": true, \"EnableAssembleStats\": true, \"EnableProcessBlockStats\": true, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true}"
},
{
"Name": "node600",
@@ -53784,7 +53784,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node700",
@@ -53837,7 +53837,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node800",
@@ -53890,7 +53890,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node900",
@@ -53943,7 +53943,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
},
{
"Name": "node1000",
@@ -53996,7 +53996,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -54010,2670 +54010,6 @@
{
"Name": "Wallet10001",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19991",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -56683,7 +54019,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -56697,2670 +54033,6 @@
{
"Name": "Wallet10002",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19992",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -59370,7 +54042,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -59384,2670 +54056,6 @@
{
"Name": "Wallet10003",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19993",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -62057,7 +54065,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -62071,2670 +54079,6 @@
{
"Name": "Wallet10004",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19994",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -64744,7 +54088,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -64758,2670 +54102,6 @@
{
"Name": "Wallet10005",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19995",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -67431,7 +54111,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -67445,2670 +54125,6 @@
{
"Name": "Wallet10006",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19996",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -70118,7 +54134,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -70132,2670 +54148,6 @@
{
"Name": "Wallet10007",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19997",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -72805,7 +54157,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -72819,2670 +54171,6 @@
{
"Name": "Wallet10008",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19998",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -75492,7 +54180,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -75506,2670 +54194,6 @@
{
"Name": "Wallet10009",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19999",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -78179,7 +54203,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -78193,2670 +54217,6 @@
{
"Name": "Wallet10010",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet20000",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -80866,7 +54226,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -80880,2666 +54240,6 @@
{
"Name": "Wallet10011",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16986",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17001",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17016",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17031",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17046",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17061",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17076",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17091",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17106",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17121",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17136",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17151",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17166",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17181",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17196",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17211",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17226",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17241",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17256",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17271",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17286",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17301",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17316",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17331",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17346",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17361",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17376",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17391",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17406",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17421",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17436",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17451",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17466",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17481",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17496",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17511",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17526",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17541",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17556",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17571",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17586",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17601",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17616",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17631",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17646",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17661",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17676",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17691",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17706",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17721",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17736",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17751",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17766",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17781",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17796",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17811",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17826",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17841",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17856",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17871",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17886",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17901",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17916",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17931",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17946",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17961",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17976",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17991",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18006",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18021",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18036",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18051",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18066",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18081",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18096",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18111",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18126",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18141",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18156",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18171",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18186",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18201",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18216",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18231",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18246",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18261",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18276",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18291",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18306",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18321",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18336",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18351",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18366",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18381",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18396",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18411",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18426",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18441",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18456",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18471",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18486",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18501",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18516",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18531",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18546",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18561",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18576",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18591",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18606",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18621",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18636",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18651",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18666",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18681",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18696",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18711",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18726",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18741",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18756",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18771",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18786",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18801",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18816",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18831",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18846",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18861",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18876",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18891",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18906",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18921",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18936",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18951",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18966",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18981",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18996",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19011",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19026",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19041",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19056",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19071",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19086",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19101",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19116",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19131",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19146",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19161",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19176",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19191",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19206",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19221",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19236",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19251",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19266",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19281",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19296",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19311",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19326",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19341",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19356",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19371",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19386",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19401",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19416",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19431",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19446",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19461",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19476",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19491",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19506",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19521",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19536",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19551",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19566",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19581",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19596",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19611",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19626",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19641",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19656",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19671",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19686",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19701",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19716",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19731",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19746",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19761",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19776",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19791",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19806",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19821",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19836",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19851",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19866",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19881",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19896",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19911",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19926",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19941",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19956",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19971",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19986",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -83549,7 +54249,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -83563,2666 +54263,6 @@
{
"Name": "Wallet10012",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16987",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17002",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17017",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17032",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17047",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17062",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17077",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17092",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17107",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17122",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17137",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17152",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17167",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17182",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17197",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17212",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17227",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17242",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17257",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17272",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17287",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17302",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17317",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17332",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17347",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17362",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17377",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17392",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17407",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17422",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17437",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17452",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17467",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17482",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17497",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17512",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17527",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17542",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17557",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17572",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17587",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17602",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17617",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17632",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17647",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17662",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17677",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17692",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17707",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17722",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17737",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17752",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17767",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17782",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17797",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17812",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17827",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17842",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17857",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17872",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17887",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17902",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17917",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17932",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17947",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17962",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17977",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17992",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18007",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18022",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18037",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18052",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18067",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18082",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18097",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18112",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18127",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18142",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18157",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18172",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18187",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18202",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18217",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18232",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18247",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18262",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18277",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18292",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18307",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18322",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18337",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18352",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18367",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18382",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18397",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18412",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18427",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18442",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18457",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18472",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18487",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18502",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18517",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18532",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18547",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18562",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18577",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18592",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18607",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18622",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18637",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18652",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18667",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18682",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18697",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18712",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18727",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18742",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18757",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18772",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18787",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18802",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18817",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18832",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18847",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18862",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18877",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18892",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18907",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18922",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18937",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18952",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18967",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18982",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18997",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19012",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19027",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19042",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19057",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19072",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19087",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19102",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19117",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19132",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19147",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19162",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19177",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19192",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19207",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19222",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19237",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19252",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19267",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19282",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19297",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19312",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19327",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19342",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19357",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19372",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19387",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19402",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19417",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19432",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19447",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19462",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19477",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19492",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19507",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19522",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19537",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19552",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19567",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19582",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19597",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19612",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19627",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19642",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19657",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19672",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19687",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19702",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19717",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19732",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19747",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19762",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19777",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19792",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19807",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19822",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19837",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19852",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19867",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19882",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19897",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19912",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19927",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19942",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19957",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19972",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19987",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -86232,7 +54272,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -86246,2666 +54286,6 @@
{
"Name": "Wallet10013",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16988",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17003",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17018",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17033",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17048",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17063",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17078",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17093",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17108",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17123",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17138",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17153",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17168",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17183",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17198",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17213",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17228",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17243",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17258",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17273",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17288",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17303",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17318",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17333",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17348",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17363",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17378",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17393",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17408",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17423",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17438",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17453",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17468",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17483",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17498",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17513",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17528",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17543",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17558",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17573",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17588",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17603",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17618",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17633",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17648",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17663",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17678",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17693",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17708",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17723",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17738",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17753",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17768",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17783",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17798",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17813",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17828",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17843",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17858",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17873",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17888",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17903",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17918",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17933",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17948",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17963",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17978",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17993",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18008",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18023",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18038",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18053",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18068",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18083",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18098",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18113",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18128",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18143",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18158",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18173",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18188",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18203",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18218",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18233",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18248",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18263",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18278",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18293",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18308",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18323",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18338",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18353",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18368",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18383",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18398",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18413",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18428",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18443",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18458",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18473",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18488",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18503",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18518",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18533",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18548",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18563",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18578",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18593",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18608",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18623",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18638",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18653",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18668",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18683",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18698",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18713",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18728",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18743",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18758",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18773",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18788",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18803",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18818",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18833",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18848",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18863",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18878",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18893",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18908",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18923",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18938",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18953",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18968",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18983",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18998",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19013",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19028",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19043",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19058",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19073",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19088",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19103",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19118",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19133",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19148",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19163",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19178",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19193",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19208",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19223",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19238",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19253",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19268",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19283",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19298",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19313",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19328",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19343",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19358",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19373",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19388",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19403",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19418",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19433",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19448",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19463",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19478",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19493",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19508",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19523",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19538",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19553",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19568",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19583",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19598",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19613",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19628",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19643",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19658",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19673",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19688",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19703",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19718",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19733",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19748",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19763",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19778",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19793",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19808",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19823",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19838",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19853",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19868",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19883",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19898",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19913",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19928",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19943",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19958",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19973",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19988",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -88915,7 +54295,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -88929,2666 +54309,6 @@
{
"Name": "Wallet10014",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16989",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17004",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17019",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17034",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17049",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17064",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17079",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17094",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17109",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17124",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17139",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17154",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17169",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17184",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17199",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17214",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17229",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17244",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17259",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17274",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17289",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17304",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17319",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17334",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17349",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17364",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17379",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17394",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17409",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17424",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17439",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17454",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17469",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17484",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17499",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17514",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17529",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17544",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17559",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17574",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17589",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17604",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17619",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17634",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17649",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17664",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17679",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17694",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17709",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17724",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17739",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17754",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17769",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17784",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17799",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17814",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17829",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17844",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17859",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17874",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17889",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17904",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17919",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17934",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17949",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17964",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17979",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17994",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18009",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18024",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18039",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18054",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18069",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18084",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18099",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18114",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18129",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18144",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18159",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18174",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18189",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18204",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18219",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18234",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18249",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18264",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18279",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18294",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18309",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18324",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18339",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18354",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18369",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18384",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18399",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18414",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18429",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18444",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18459",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18474",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18489",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18504",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18519",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18534",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18549",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18564",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18579",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18594",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18609",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18624",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18639",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18654",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18669",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18684",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18699",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18714",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18729",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18744",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18759",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18774",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18789",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18804",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18819",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18834",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18849",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18864",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18879",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18894",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18909",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18924",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18939",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18954",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18969",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18984",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18999",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19014",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19029",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19044",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19059",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19074",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19089",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19104",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19119",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19134",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19149",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19164",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19179",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19194",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19209",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19224",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19239",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19254",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19269",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19284",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19299",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19314",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19329",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19344",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19359",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19374",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19389",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19404",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19419",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19434",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19449",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19464",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19479",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19494",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19509",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19524",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19539",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19554",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19569",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19584",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19599",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19614",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19629",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19644",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19659",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19674",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19689",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19704",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19719",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19734",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19749",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19764",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19779",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19794",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19809",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19824",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19839",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19854",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19869",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19884",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19899",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19914",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19929",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19944",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19959",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19974",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19989",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -91598,7 +54318,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
},
@@ -91612,2666 +54332,6 @@
{
"Name": "Wallet10015",
"ParticipationOnly": false
- },
- {
- "Name": "Wallet10030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet10990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet11995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet12985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet13990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet14995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet15985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet16990",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17005",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17020",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17035",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17050",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17065",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17080",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17095",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17110",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17125",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17140",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17155",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17170",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17185",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17200",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17215",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17230",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17245",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17260",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17275",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17290",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17305",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17320",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17335",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17350",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17365",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17380",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17395",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17410",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17425",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17440",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17455",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17470",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17485",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17500",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17515",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17530",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17545",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17560",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17575",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17590",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17605",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17620",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17635",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17650",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17665",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17680",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17695",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17710",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17725",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17740",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17755",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17770",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17785",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17800",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17815",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17830",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17845",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17860",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17875",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17890",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17905",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17920",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17935",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17950",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17965",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17980",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet17995",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18010",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18025",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18040",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18055",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18070",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18085",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18100",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18115",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18130",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18145",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18160",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18175",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18190",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18205",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18220",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18235",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18250",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18265",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18280",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18295",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18310",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18325",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18340",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18355",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18370",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18385",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18400",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18415",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18430",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18445",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18460",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18475",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18490",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18505",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18520",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18535",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18550",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18565",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18580",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18595",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18610",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18625",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18640",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18655",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18670",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18685",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18700",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18715",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18730",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18745",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18760",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18775",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18790",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18805",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18820",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18835",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18850",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18865",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18880",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18895",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18910",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18925",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18940",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18955",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18970",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet18985",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19000",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19015",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19030",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19045",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19060",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19075",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19090",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19105",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19120",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19135",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19150",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19165",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19180",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19195",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19210",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19225",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19240",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19255",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19270",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19285",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19300",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19315",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19330",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19345",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19360",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19375",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19390",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19405",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19420",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19435",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19450",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19465",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19480",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19495",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19510",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19525",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19540",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19555",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19570",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19585",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19600",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19615",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19630",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19645",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19660",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19675",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19690",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19705",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19720",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19735",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19750",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19765",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19780",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19795",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19810",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19825",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19840",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19855",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19870",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19885",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19900",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19915",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19930",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19945",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19960",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19975",
- "ParticipationOnly": false
- },
- {
- "Name": "Wallet19990",
- "ParticipationOnly": false
}
],
"APIToken": "{{APIToken}}",
@@ -94281,7 +54341,7 @@
"MetricsURI": "{{MetricsURI}}",
"EnableService": false,
"EnableBlockStats": false,
- "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0 }"
+ "ConfigJSONOverride": "{ \"TxPoolExponentialIncreaseFactor\": 1, \"DNSBootstrapID\": \"<network>.algodev.network\", \"DeadlockDetection\": -1, \"EnableIncomingMessageFilter\": true, \"CadaverSizeTarget\": 0, \"PeerPingPeriodSeconds\": 30, \"BaseLoggerDebugLevel\": 3, \"EnableProfiler\": true, \"CadaverSizeTarget\": 0, \"EnableAccountUpdatesStats\": true }"
}
]
}
diff --git a/util/condvar/timedwait_test.go b/util/condvar/timedwait_test.go
index 9faf9e8c9..bfc9daae5 100644
--- a/util/condvar/timedwait_test.go
+++ b/util/condvar/timedwait_test.go
@@ -23,10 +23,12 @@ import (
"github.com/stretchr/testify/require"
+ "github.com/algorand/go-algorand/test/partitiontest"
"github.com/algorand/go-deadlock"
)
func TestTimedWaitSignal(t *testing.T) {
+ partitiontest.PartitionTest(t)
var m deadlock.Mutex
var signal bool
c := sync.NewCond(&m)
@@ -51,6 +53,7 @@ func TestTimedWaitSignal(t *testing.T) {
}
func TestTimedWaitBroadcast(t *testing.T) {
+ partitiontest.PartitionTest(t)
var m deadlock.Mutex
var signal bool
c := sync.NewCond(&m)
@@ -75,6 +78,7 @@ func TestTimedWaitBroadcast(t *testing.T) {
}
func TestTimedWaitTimeout(t *testing.T) {
+ partitiontest.PartitionTest(t)
var m deadlock.Mutex
c := sync.NewCond(&m)