From ea62142adf5fe55fc429812195c71ed7779c0ca3 Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Sat, 3 Feb 2018 12:32:13 +0100 Subject: [PATCH] Remove Tendermint Core as dependency to enable build --- Makefile | 3 + _attic/ROADMAP.md | 66 - _attic/benchmarks/app_test.go | 194 --- _attic/benchmarks/bonsai-speed.txt | 19 - _attic/benchmarks/cleanup-speed.txt | 19 - _attic/benchmarks/unstable-speed.txt | 19 - _attic/client/commands/auto/cmd.go | 33 - _attic/client/commands/commits/export.go | 46 - _attic/client/commands/commits/import.go | 59 - _attic/client/commands/commits/root.go | 15 - _attic/client/commands/commits/show.go | 74 -- _attic/client/commands/commits/update.go | 52 - _attic/client/commands/common.go | 154 --- _attic/client/commands/init.go | 352 ------ _attic/client/commands/keys/README.md | 117 -- _attic/client/commands/keys/delete.go | 49 - _attic/client/commands/keys/get.go | 42 - _attic/client/commands/keys/list.go | 34 - _attic/client/commands/keys/new.go | 94 -- _attic/client/commands/keys/recover.go | 61 - _attic/client/commands/keys/root.go | 44 - _attic/client/commands/keys/update.go | 53 - _attic/client/commands/keys/utils.go | 131 -- _attic/client/commands/proxy/root.go | 66 - _attic/client/commands/query/get.go | 121 -- _attic/client/commands/query/root.go | 30 - _attic/client/commands/query/state.go | 36 - _attic/client/commands/query/tx.go | 76 -- _attic/client/commands/rpc/helpers.go | 49 - _attic/client/commands/rpc/insecure.go | 67 -- _attic/client/commands/rpc/root.go | 64 - _attic/client/commands/rpc/secure.go | 76 -- _attic/client/commands/txs/helpers.go | 250 ---- _attic/client/commands/txs/root.go | 61 - _attic/client/commands/txs/wrapper.go | 43 - _attic/client/commands/version.go | 21 - _attic/client/common.go | 57 - _attic/client/errors.go | 22 - _attic/client/errors_test.go | 18 - _attic/client/keys.go | 30 - _attic/client/proxy.go | 68 -- _attic/client/query.go | 116 -- _attic/client/query_test.go | 148 --- _attic/client/rest/README.md | 25 - _attic/client/rest/handlers.go | 192 --- _attic/client/rest/helpers.go | 29 - _attic/client/rest/types.go | 52 - _attic/coins/bench_test.go | 46 - _attic/coins/commands/query.go | 44 - _attic/coins/commands/tx.go | 105 -- _attic/coins/genesis.go | 48 - _attic/coins/handler.go | 251 ---- _attic/coins/handler_test.go | 381 ------ _attic/coins/helper.go | 57 - _attic/coins/ibc_test.go | 140 --- _attic/coins/rest/handlers.go | 166 --- _attic/coins/store.go | 145 --- _attic/examples/basecoin/Makefile | 22 - _attic/examples/basecoin/app/handler.go | 73 -- .../basecoin/cmd/basecli/LIGHT_NODE.md | 58 - .../examples/basecoin/cmd/basecli/README.md | 53 - _attic/examples/basecoin/cmd/basecli/main.go | 91 -- _attic/examples/basecoin/cmd/basecoin/main.go | 69 -- .../basecoin/cmd/baseserver/README.md | 160 --- .../examples/basecoin/cmd/baseserver/main.go | 95 -- _attic/examples/basecoin/tests/cli/basictx.sh | 122 -- _attic/examples/basecoin/tests/cli/ibc.sh | 284 ----- .../basecoin/tests/cli/init-server.sh | 45 - _attic/examples/basecoin/tests/cli/init.sh | 110 -- _attic/examples/basecoin/tests/cli/keys.sh | 146 --- _attic/examples/basecoin/tests/cli/rest.sh | 161 --- _attic/examples/basecoin/tests/cli/restart.sh | 85 -- _attic/examples/basecoin/tests/cli/roles.sh | 97 -- _attic/examples/basecoin/tests/cli/rpc.sh | 132 -- _attic/examples/counter/Makefile | 14 - _attic/examples/counter/cmd/counter/main.go | 36 - .../cmd/countercli/commands/counter.go | 52 - .../counter/cmd/countercli/commands/query.go | 32 - .../examples/counter/cmd/countercli/main.go | 85 -- .../counter/plugins/counter/counter.go | 226 ---- .../counter/plugins/counter/counter_test.go | 73 -- _attic/examples/counter/tests/cli/counter.sh | 124 -- _attic/examples/eyes/Makefile | 14 - _attic/examples/eyes/cmd/eyes/init.go | 58 - _attic/examples/eyes/cmd/eyes/main.go | 51 - _attic/examples/eyes/cmd/eyescli/main.go | 63 - _attic/examples/eyes/parser.go | 32 - _attic/examples/eyes/tests/cli/eyes.sh | 73 -- _attic/examples/eyes/tx.go | 33 - _attic/genesis/doc.go | 61 - _attic/genesis/parse.go | 153 --- _attic/genesis/parse_test.go | 78 -- _attic/genesis/testdata/genesis.json | 22 - _attic/modules/app/app_test.go | 292 ----- _attic/modules/app/genesis_test.go | 101 -- _attic/modules/bonus/doc.go | 6 - _attic/modules/bonus/helpers.go | 118 -- _attic/modules/bonus/multiplexer.go | 116 -- _attic/modules/bonus/multiplexer_test.go | 87 -- _attic/modules/docs/Makefile | 20 - _attic/modules/docs/architecture/API.md | 249 ---- _attic/modules/docs/basecoin-basics.rst | 388 ------ _attic/modules/docs/basecoin-kubernetes.rst | 228 ---- _attic/modules/docs/basecoin-plugins.rst | 276 ----- _attic/modules/docs/basecoin-tool.rst | 282 ----- _attic/modules/docs/conf.py | 173 --- _attic/modules/docs/glossary.rst | 334 ------ _attic/modules/docs/graphics/README.md | 13 - .../docs/graphics/cosmos-sdk-image.png | Bin 249169 -> 0 bytes _attic/modules/docs/graphics/datastore.png | Bin 25761 -> 0 bytes _attic/modules/docs/graphics/dispatcher.png | Bin 109009 -> 0 bytes _attic/modules/docs/graphics/infographic.xml | 1 - _attic/modules/docs/graphics/middleware.png | Bin 143181 -> 0 bytes .../docs/graphics/overview-framework.png | Bin 452074 -> 0 bytes .../docs/graphics/overview-security.png | Bin 296813 -> 0 bytes _attic/modules/docs/graphics/permission.png | Bin 61010 -> 0 bytes _attic/modules/docs/graphics/tx.png | Bin 15202 -> 0 bytes _attic/modules/docs/guide/shunit2 | 1067 ----------------- _attic/modules/docs/ibc.rst | 425 ------- _attic/modules/docs/index.rst | 27 - _attic/modules/docs/install.rst | 35 - _attic/modules/docs/key-management.rst | 204 ---- _attic/modules/docs/make.bat | 36 - _attic/modules/docs/overview.rst | 88 -- _attic/modules/docs/roles-and-multi-sig.rst | 322 ----- _attic/modules/docs/stdlib.rst | 150 --- _attic/modules/ibc/commands/query.go | 230 ---- _attic/modules/ibc/commands/tx.go | 115 -- _attic/modules/ibc/errors.go | 109 -- _attic/modules/ibc/handler.go | 211 ---- _attic/modules/ibc/ibc_test.go | 413 ------- _attic/modules/ibc/keys.go | 60 - _attic/modules/ibc/middleware.go | 120 -- _attic/modules/ibc/provider.go | 105 -- _attic/modules/ibc/provider_test.go | 136 --- _attic/modules/ibc/store.go | 122 -- _attic/modules/ibc/test_helpers.go | 131 -- _attic/modules/ibc/tx.go | 133 -- _attic/modules/roles/commands/query.go | 39 - _attic/modules/roles/commands/tx.go | 65 - _attic/modules/roles/commands/wrap.go | 59 - _attic/modules/roles/error.go | 73 -- _attic/modules/roles/handler.go | 71 -- _attic/modules/roles/handler_test.go | 53 - _attic/modules/roles/middleware.go | 85 -- _attic/modules/roles/middleware_test.go | 109 -- _attic/modules/roles/rest/handlers.go | 82 -- _attic/modules/roles/store.go | 87 -- _attic/modules/roles/store_test.go | 60 - _attic/modules/roles/tx.go | 98 -- _attic/modules/stack/checkpoint.go | 52 - _attic/modules/stack/checkpoint_test.go | 114 -- _attic/modules/stack/context.go | 124 -- _attic/modules/stack/dispatcher.go | 170 --- _attic/modules/stack/helpers.go | 239 ---- _attic/modules/stack/helpers_test.go | 100 -- _attic/modules/stack/helperware.go | 64 - _attic/modules/stack/interface.go | 147 --- _attic/modules/stack/middleware.go | 152 --- _attic/modules/stack/middleware_test.go | 94 -- _attic/modules/stack/mock.go | 90 -- _attic/modules/stack/prefixstore.go | 134 --- _attic/modules/stack/recovery.go | 81 -- _attic/modules/stack/recovery_test.go | 53 - _attic/modules/stack/state_space_test.go | 141 --- _attic/modules/store/queue.go | 106 -- _attic/modules/store/queue_test.go | 67 -- _attic/server/commands/init.go | 202 ---- _attic/server/commands/key.go | 71 -- _attic/server/commands/relay.go | 298 ----- _attic/server/commands/reset.go | 23 - _attic/server/commands/root.go | 42 - _attic/server/commands/start.go | 190 --- glide.lock | 90 +- glide.yaml | 53 +- publish/print_txs.go | 2 + 176 files changed, 42 insertions(+), 18574 deletions(-) delete mode 100644 _attic/ROADMAP.md delete mode 100644 _attic/benchmarks/app_test.go delete mode 100644 _attic/benchmarks/bonsai-speed.txt delete mode 100644 _attic/benchmarks/cleanup-speed.txt delete mode 100644 _attic/benchmarks/unstable-speed.txt delete mode 100644 _attic/client/commands/auto/cmd.go delete mode 100644 _attic/client/commands/commits/export.go delete mode 100644 _attic/client/commands/commits/import.go delete mode 100644 _attic/client/commands/commits/root.go delete mode 100644 _attic/client/commands/commits/show.go delete mode 100644 _attic/client/commands/commits/update.go delete mode 100644 _attic/client/commands/common.go delete mode 100644 _attic/client/commands/init.go delete mode 100644 _attic/client/commands/keys/README.md delete mode 100644 _attic/client/commands/keys/delete.go delete mode 100644 _attic/client/commands/keys/get.go delete mode 100644 _attic/client/commands/keys/list.go delete mode 100644 _attic/client/commands/keys/new.go delete mode 100644 _attic/client/commands/keys/recover.go delete mode 100644 _attic/client/commands/keys/root.go delete mode 100644 _attic/client/commands/keys/update.go delete mode 100644 _attic/client/commands/keys/utils.go delete mode 100644 _attic/client/commands/proxy/root.go delete mode 100644 _attic/client/commands/query/get.go delete mode 100644 _attic/client/commands/query/root.go delete mode 100644 _attic/client/commands/query/state.go delete mode 100644 _attic/client/commands/query/tx.go delete mode 100644 _attic/client/commands/rpc/helpers.go delete mode 100644 _attic/client/commands/rpc/insecure.go delete mode 100644 _attic/client/commands/rpc/root.go delete mode 100644 _attic/client/commands/rpc/secure.go delete mode 100644 _attic/client/commands/txs/helpers.go delete mode 100644 _attic/client/commands/txs/root.go delete mode 100644 _attic/client/commands/txs/wrapper.go delete mode 100644 _attic/client/commands/version.go delete mode 100644 _attic/client/common.go delete mode 100644 _attic/client/errors.go delete mode 100644 _attic/client/errors_test.go delete mode 100644 _attic/client/keys.go delete mode 100644 _attic/client/proxy.go delete mode 100644 _attic/client/query.go delete mode 100644 _attic/client/query_test.go delete mode 100644 _attic/client/rest/README.md delete mode 100644 _attic/client/rest/handlers.go delete mode 100644 _attic/client/rest/helpers.go delete mode 100644 _attic/client/rest/types.go delete mode 100644 _attic/coins/bench_test.go delete mode 100644 _attic/coins/commands/query.go delete mode 100644 _attic/coins/commands/tx.go delete mode 100644 _attic/coins/genesis.go delete mode 100644 _attic/coins/handler.go delete mode 100644 _attic/coins/handler_test.go delete mode 100644 _attic/coins/helper.go delete mode 100644 _attic/coins/ibc_test.go delete mode 100644 _attic/coins/rest/handlers.go delete mode 100644 _attic/coins/store.go delete mode 100644 _attic/examples/basecoin/Makefile delete mode 100644 _attic/examples/basecoin/app/handler.go delete mode 100644 _attic/examples/basecoin/cmd/basecli/LIGHT_NODE.md delete mode 100644 _attic/examples/basecoin/cmd/basecli/README.md delete mode 100644 _attic/examples/basecoin/cmd/basecli/main.go delete mode 100644 _attic/examples/basecoin/cmd/basecoin/main.go delete mode 100644 _attic/examples/basecoin/cmd/baseserver/README.md delete mode 100644 _attic/examples/basecoin/cmd/baseserver/main.go delete mode 100755 _attic/examples/basecoin/tests/cli/basictx.sh delete mode 100755 _attic/examples/basecoin/tests/cli/ibc.sh delete mode 100755 _attic/examples/basecoin/tests/cli/init-server.sh delete mode 100755 _attic/examples/basecoin/tests/cli/init.sh delete mode 100755 _attic/examples/basecoin/tests/cli/keys.sh delete mode 100755 _attic/examples/basecoin/tests/cli/rest.sh delete mode 100755 _attic/examples/basecoin/tests/cli/restart.sh delete mode 100755 _attic/examples/basecoin/tests/cli/roles.sh delete mode 100755 _attic/examples/basecoin/tests/cli/rpc.sh delete mode 100644 _attic/examples/counter/Makefile delete mode 100644 _attic/examples/counter/cmd/counter/main.go delete mode 100644 _attic/examples/counter/cmd/countercli/commands/counter.go delete mode 100644 _attic/examples/counter/cmd/countercli/commands/query.go delete mode 100644 _attic/examples/counter/cmd/countercli/main.go delete mode 100644 _attic/examples/counter/plugins/counter/counter.go delete mode 100644 _attic/examples/counter/plugins/counter/counter_test.go delete mode 100755 _attic/examples/counter/tests/cli/counter.sh delete mode 100644 _attic/examples/eyes/Makefile delete mode 100644 _attic/examples/eyes/cmd/eyes/init.go delete mode 100644 _attic/examples/eyes/cmd/eyes/main.go delete mode 100644 _attic/examples/eyes/cmd/eyescli/main.go delete mode 100644 _attic/examples/eyes/parser.go delete mode 100755 _attic/examples/eyes/tests/cli/eyes.sh delete mode 100644 _attic/examples/eyes/tx.go delete mode 100644 _attic/genesis/doc.go delete mode 100644 _attic/genesis/parse.go delete mode 100644 _attic/genesis/parse_test.go delete mode 100644 _attic/genesis/testdata/genesis.json delete mode 100644 _attic/modules/app/app_test.go delete mode 100644 _attic/modules/app/genesis_test.go delete mode 100644 _attic/modules/bonus/doc.go delete mode 100644 _attic/modules/bonus/helpers.go delete mode 100644 _attic/modules/bonus/multiplexer.go delete mode 100644 _attic/modules/bonus/multiplexer_test.go delete mode 100644 _attic/modules/docs/Makefile delete mode 100644 _attic/modules/docs/architecture/API.md delete mode 100644 _attic/modules/docs/basecoin-basics.rst delete mode 100644 _attic/modules/docs/basecoin-kubernetes.rst delete mode 100644 _attic/modules/docs/basecoin-plugins.rst delete mode 100644 _attic/modules/docs/basecoin-tool.rst delete mode 100644 _attic/modules/docs/conf.py delete mode 100644 _attic/modules/docs/glossary.rst delete mode 100644 _attic/modules/docs/graphics/README.md delete mode 100644 _attic/modules/docs/graphics/cosmos-sdk-image.png delete mode 100644 _attic/modules/docs/graphics/datastore.png delete mode 100644 _attic/modules/docs/graphics/dispatcher.png delete mode 100644 _attic/modules/docs/graphics/infographic.xml delete mode 100644 _attic/modules/docs/graphics/middleware.png delete mode 100644 _attic/modules/docs/graphics/overview-framework.png delete mode 100644 _attic/modules/docs/graphics/overview-security.png delete mode 100644 _attic/modules/docs/graphics/permission.png delete mode 100644 _attic/modules/docs/graphics/tx.png delete mode 100644 _attic/modules/docs/guide/shunit2 delete mode 100644 _attic/modules/docs/ibc.rst delete mode 100644 _attic/modules/docs/index.rst delete mode 100644 _attic/modules/docs/install.rst delete mode 100644 _attic/modules/docs/key-management.rst delete mode 100644 _attic/modules/docs/make.bat delete mode 100644 _attic/modules/docs/overview.rst delete mode 100644 _attic/modules/docs/roles-and-multi-sig.rst delete mode 100644 _attic/modules/docs/stdlib.rst delete mode 100644 _attic/modules/ibc/commands/query.go delete mode 100644 _attic/modules/ibc/commands/tx.go delete mode 100644 _attic/modules/ibc/errors.go delete mode 100644 _attic/modules/ibc/handler.go delete mode 100644 _attic/modules/ibc/ibc_test.go delete mode 100644 _attic/modules/ibc/keys.go delete mode 100644 _attic/modules/ibc/middleware.go delete mode 100644 _attic/modules/ibc/provider.go delete mode 100644 _attic/modules/ibc/provider_test.go delete mode 100644 _attic/modules/ibc/store.go delete mode 100644 _attic/modules/ibc/test_helpers.go delete mode 100644 _attic/modules/ibc/tx.go delete mode 100644 _attic/modules/roles/commands/query.go delete mode 100644 _attic/modules/roles/commands/tx.go delete mode 100644 _attic/modules/roles/commands/wrap.go delete mode 100644 _attic/modules/roles/error.go delete mode 100644 _attic/modules/roles/handler.go delete mode 100644 _attic/modules/roles/handler_test.go delete mode 100644 _attic/modules/roles/middleware.go delete mode 100644 _attic/modules/roles/middleware_test.go delete mode 100644 _attic/modules/roles/rest/handlers.go delete mode 100644 _attic/modules/roles/store.go delete mode 100644 _attic/modules/roles/store_test.go delete mode 100644 _attic/modules/roles/tx.go delete mode 100644 _attic/modules/stack/checkpoint.go delete mode 100644 _attic/modules/stack/checkpoint_test.go delete mode 100644 _attic/modules/stack/context.go delete mode 100644 _attic/modules/stack/dispatcher.go delete mode 100644 _attic/modules/stack/helpers.go delete mode 100644 _attic/modules/stack/helpers_test.go delete mode 100644 _attic/modules/stack/helperware.go delete mode 100644 _attic/modules/stack/interface.go delete mode 100644 _attic/modules/stack/middleware.go delete mode 100644 _attic/modules/stack/middleware_test.go delete mode 100644 _attic/modules/stack/mock.go delete mode 100644 _attic/modules/stack/prefixstore.go delete mode 100644 _attic/modules/stack/recovery.go delete mode 100644 _attic/modules/stack/recovery_test.go delete mode 100644 _attic/modules/stack/state_space_test.go delete mode 100644 _attic/modules/store/queue.go delete mode 100644 _attic/modules/store/queue_test.go delete mode 100644 _attic/server/commands/init.go delete mode 100644 _attic/server/commands/key.go delete mode 100644 _attic/server/commands/relay.go delete mode 100644 _attic/server/commands/reset.go delete mode 100644 _attic/server/commands/root.go delete mode 100644 _attic/server/commands/start.go diff --git a/Makefile b/Makefile index 291e647f2f..70068a9d86 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,9 @@ dist: check_tools: cd tools && $(MAKE) check +update_tools: + cd tools && $(MAKE) glide_update + get_tools: cd tools && $(MAKE) diff --git a/_attic/ROADMAP.md b/_attic/ROADMAP.md deleted file mode 100644 index 9e344eb62f..0000000000 --- a/_attic/ROADMAP.md +++ /dev/null @@ -1,66 +0,0 @@ -# Roadmap for future basecoin development - -Warning: there are current plans, they may change based on other developments, needs. The further in the future, the less clear, like all plans. - -## 0.6.x - Testnet and Light Client (late June 2017) - -The current release cycle is making sure the server is usable for deploying testnets (easy config, safe restarts, moving nodes). Also that we have a useable light client that does full cryptographic prooofs without syncing the entire block headers. See the [changelog](CHANGELOG.md). - -Patch release here involve improving the usability of the cli tools, adding subcommands, more flags, helper functions, shell integrations, etc. Please add issues if you find the client tool difficult to use, or deployment troublesome. - -## 0.7.x - Towards a modular framework (late July 2017) - -**Breaking changes** - -* Renaming likely: this release may well lead to a [renaming of the repository](https://github.com/tendermint/basecoin/issues/119) to emphasize that it is a generalized framework. `basecoin` and `basecli` executables will remain with generally unchanged usage. -* This will also provide a tx structure that is very different than the current one, and a non-trivial upgrade of running chains. - -The next release cycle involves a big upgrade to the core, especially how one can write modules (aka plugins) as well as configure a basecoin-based executable. The main goal is to leave us with basecoin as a single executable with a similar API, but create a new module/middleware system with a number of standard modules provided (and easy addition of third party modules), so developers can quickly mix-and-match pieces and add custom business logic for there chain. - -The main goal here is to migrate from a basecoin with plugins for extra enhancements, to a proper app development framework, of which basecoin is one example app that can quickly be built. - -Some ideas: - -* Flexible fee/gas system (good for both public and private blockchains) -* Flexible authentication systems (with multi-sig support) -* Basic role permission system -* Abstract IBC to support other transactions from various modules (not just sendtx) - -This will be done in conjunction with some sample apps also building on this framework, where other logic is interesting and money transfers is not the central goal, like [trackomatron](https://github.com/tendermint/trackomatron) - -## Next steps - -The following are three planned steps, the order of which may change. At least one or two of these will most likely occur before any other developments. Clearly, any other feature that are urgent for cosmos can jump the list in priority, but all these pieces are part of the cosmos roadmap, especially the first two. - -### 0.8.x??? - Local client API for UI - -Beyond the CLI, we want to add more interfaces for easily building a UI on top of the basecoin client. One clear example is a local REST API, so you can easily integrate with an electron app, or a chrome app, just as if you wrote a normal Single-Page Application, but connecting to a local proxy to do full crypto-graphic proofs. - -Another **possible** development is providing an SDK, which we can compile with [go-mobile](https://github.com/golang/go/wiki/Mobile) for both Android and iOS to support secure mobile applications. Progress on this front is contingent on participation of an experienced mobile developer. - -Further, when the planned enhancements to real-time events happen in tendermint core, we should expose that via a simple subscriber/listener model in these local APIs. - -### 0.9.x??? - Proof of Stake and Voting Modules - -We should integrate developments on a [proof-of-stake module](https://github.com/tendermint/basecoin-stake) (currently a work-in-progress) and basic voting modules (currently planned) into properly supported for modules. These would provide the basis for dynamic validator set changes with bondign periods, and the basis for making governance decisions (eg. voting to change the block reward). - -At this point we would have to give full support to these plugins, and third-party devs can build on them to add more complex delegation or governance logic. - -### 0.10.x??? - Database enhancements - -Depending on developments with merkleeyes, we would like to increase the expressiveness of the storage layer while maintaining provability of all queries. We would also add a number of new primatives to the key-value store, to allow some general data-structures. - -Also, full support for historical queries and performance optimizations of the storage later. But this all depends on supporting developments of another repo, so timing here is unclear. Here are some example ideas: - -Merkle proofs: - -* **Proof of key-value**: only current proof -* **Proof of missing key**: prove there is no data for that key -* **Proof of range**: one proof for all key-values in a range of keys -* **Proof of highest/lowest in range**: just get one key, for example, prove validator hash with highest height <= H - -Data structures: - -* **Queues**: provable push-pop operations, split over multiple keys, so it can scale to 1000s of entries without deserializing them all every time. -* **Priority Queues**: as above, but ordered by priority instead of FIFO. -* **Secondary Indexes**: add support for secondary indexes with proofs. So, I can not only prove my balance, but for example, the list of all accouns with a balance of > 1000000 atoms. These indexes would have to be created by the application and stored extra in the database, but if you have a common query that you want proofs/trust, it can be very useful. diff --git a/_attic/benchmarks/app_test.go b/_attic/benchmarks/app_test.go deleted file mode 100644 index dc9e544743..0000000000 --- a/_attic/benchmarks/app_test.go +++ /dev/null @@ -1,194 +0,0 @@ -package app - -import ( - "fmt" - "io/ioutil" - "testing" - - wire "github.com/tendermint/go-wire" - cmn "github.com/tendermint/tmlibs/common" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - sdkapp "github.com/cosmos/cosmos-sdk/app" - "github.com/cosmos/cosmos-sdk/modules/auth" - "github.com/cosmos/cosmos-sdk/modules/base" - "github.com/cosmos/cosmos-sdk/modules/coin" - "github.com/cosmos/cosmos-sdk/modules/fee" - "github.com/cosmos/cosmos-sdk/modules/nonce" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/cosmos/cosmos-sdk/stack" -) - -type BenchApp struct { - App *sdkapp.BaseApp - Accounts []*coin.AccountWithKey - ChainID string -} - -// DefaultHandler - placeholder to just handle sendtx -func DefaultHandler(feeDenom string) sdk.Handler { - // use the default stack - c := coin.NewHandler() - r := roles.NewHandler() - d := stack.NewDispatcher( - c, - stack.WrapHandler(r), - ) - return stack.New( - base.Logger{}, - stack.Recovery{}, - auth.Signatures{}, - base.Chain{}, - nonce.ReplayCheck{}, - roles.NewMiddleware(), - fee.NewSimpleFeeMiddleware(coin.Coin{feeDenom, 0}, fee.Bank), - ).Use(d) -} - -func NewBenchApp(h sdk.Handler, chainID string, n int, - persist bool) BenchApp { - - logger := log.NewNopLogger() - // logger := log.NewFilter(log.NewTMLogger(os.Stdout), log.AllowError()) - // logger = log.NewTracingLogger(logger) - - dbDir, cache := "", 0 - if persist { - dbDir, _ = ioutil.TempDir("", "bc-app-benchmark") - cache = 500 - } - - store, err := sdkapp.NewStoreApp("bench", dbDir, cache, logger) - if err != nil { - panic(err) - } - app := sdkapp.NewBaseApp(store, h, nil) - - err = app.InitState("base", "chain_id", chainID) - if err != nil { - panic("cannot set chain") - } - - // make keys - money := coin.Coins{{"mycoin", 1234567890}} - accts := make([]*coin.AccountWithKey, n) - for i := 0; i < n; i++ { - accts[i] = coin.NewAccountWithKey(money) - err = app.InitState("coin", "account", accts[i].MakeOption()) - if err != nil { - panic("can't set account") - } - } - - return BenchApp{ - App: app, - Accounts: accts, - ChainID: chainID, - } -} - -// make a random tx... -func (b BenchApp) makeTx(useFee bool) []byte { - n := len(b.Accounts) - sender := b.Accounts[cmn.RandInt()%n] - recipient := b.Accounts[cmn.RandInt()%n] - amount := coin.Coins{{"mycoin", 123}} - tx := coin.NewSendOneTx(sender.Actor(), recipient.Actor(), amount) - if useFee { - toll := coin.Coin{"mycoin", 2} - tx = fee.NewFee(tx, toll, sender.Actor()) - } - sequence := sender.NextSequence() - tx = nonce.NewTx(sequence, []sdk.Actor{sender.Actor()}, tx) - tx = base.NewChainTx(b.ChainID, 0, tx) - stx := auth.NewMulti(tx) - auth.Sign(stx, sender.Key) - res := wire.BinaryBytes(stx.Wrap()) - return res -} - -func BenchmarkMakeTx(b *testing.B) { - h := DefaultHandler("mycoin") - app := NewBenchApp(h, "bench-chain", 10, false) - b.ResetTimer() - for i := 1; i <= b.N; i++ { - txBytes := app.makeTx(true) - if len(txBytes) < 2 { - panic("cannot commit") - } - } -} - -func benchmarkTransfers(b *testing.B, app BenchApp, blockSize int, useFee bool) { - // prepare txs - txs := make([][]byte, b.N) - for i := 1; i <= b.N; i++ { - txBytes := app.makeTx(useFee) - if len(txBytes) < 2 { - panic("cannot make bytes") - } - txs[i-1] = txBytes - } - - b.ResetTimer() - - for i := 1; i <= b.N; i++ { - res := app.App.DeliverTx(txs[i-1]) - if res.IsErr() { - panic(res.Error()) - } - if i%blockSize == 0 { - res := app.App.Commit() - if res.IsErr() { - panic("cannot commit") - } - } - } -} - -func BenchmarkSimpleTransfer(b *testing.B) { - benchmarks := []struct { - accounts int - blockSize int - useFee bool - toDisk bool - }{ - {100, 10, false, false}, - {100, 10, true, false}, - {100, 200, false, false}, - {100, 200, true, false}, - {10000, 10, false, false}, - {10000, 10, true, false}, - {10000, 200, false, false}, - {10000, 200, true, false}, - {100, 10, false, true}, - {100, 10, true, true}, - {100, 200, false, true}, - {100, 200, true, true}, - {10000, 10, false, true}, - {10000, 10, true, true}, - {10000, 200, false, true}, - {10000, 200, true, true}, - } - - for _, bb := range benchmarks { - prefix := fmt.Sprintf("%d-%d", bb.accounts, bb.blockSize) - if bb.useFee { - prefix += "-fee" - } else { - prefix += "-nofee" - } - if bb.toDisk { - prefix += "-persist" - } else { - prefix += "-memdb" - } - - h := DefaultHandler("mycoin") - app := NewBenchApp(h, "bench-chain", bb.accounts, bb.toDisk) - b.Run(prefix, func(sub *testing.B) { - benchmarkTransfers(sub, app, bb.blockSize, bb.useFee) - }) - } -} diff --git a/_attic/benchmarks/bonsai-speed.txt b/_attic/benchmarks/bonsai-speed.txt deleted file mode 100644 index ec4bae354b..0000000000 --- a/_attic/benchmarks/bonsai-speed.txt +++ /dev/null @@ -1,19 +0,0 @@ -BenchmarkMakeTx-4 2000 603153 ns/op -BenchmarkSimpleTransfer/100-10-nofee-memdb-4 5000 313154 ns/op -BenchmarkSimpleTransfer/100-10-fee-memdb-4 5000 366534 ns/op -BenchmarkSimpleTransfer/100-200-nofee-memdb-4 5000 296381 ns/op -BenchmarkSimpleTransfer/100-200-fee-memdb-4 5000 350973 ns/op -BenchmarkSimpleTransfer/10000-10-nofee-memdb-4 5000 351425 ns/op -BenchmarkSimpleTransfer/10000-10-fee-memdb-4 3000 410855 ns/op -BenchmarkSimpleTransfer/10000-200-nofee-memdb-4 5000 344839 ns/op -BenchmarkSimpleTransfer/10000-200-fee-memdb-4 5000 394080 ns/op -BenchmarkSimpleTransfer/100-10-nofee-persist-4 3000 433890 ns/op -BenchmarkSimpleTransfer/100-10-fee-persist-4 3000 496133 ns/op -BenchmarkSimpleTransfer/100-200-nofee-persist-4 5000 310174 ns/op -BenchmarkSimpleTransfer/100-200-fee-persist-4 5000 366868 ns/op -BenchmarkSimpleTransfer/10000-10-nofee-persist-4 2000 815755 ns/op -BenchmarkSimpleTransfer/10000-10-fee-persist-4 2000 874532 ns/op -BenchmarkSimpleTransfer/10000-200-nofee-persist-4 5000 567349 ns/op -BenchmarkSimpleTransfer/10000-200-fee-persist-4 5000 621833 ns/op -PASS -ok github.com/tendermint/basecoin/benchmarks 93.047s diff --git a/_attic/benchmarks/cleanup-speed.txt b/_attic/benchmarks/cleanup-speed.txt deleted file mode 100644 index 7bd397bd90..0000000000 --- a/_attic/benchmarks/cleanup-speed.txt +++ /dev/null @@ -1,19 +0,0 @@ -BenchmarkMakeTx-4 2000 648379 ns/op -BenchmarkSimpleTransfer/100-10-nofee-memdb-4 5000 356487 ns/op -BenchmarkSimpleTransfer/100-10-fee-memdb-4 5000 413435 ns/op -BenchmarkSimpleTransfer/100-200-nofee-memdb-4 5000 321859 ns/op -BenchmarkSimpleTransfer/100-200-fee-memdb-4 5000 393578 ns/op -BenchmarkSimpleTransfer/10000-10-nofee-memdb-4 5000 379129 ns/op -BenchmarkSimpleTransfer/10000-10-fee-memdb-4 3000 480334 ns/op -BenchmarkSimpleTransfer/10000-200-nofee-memdb-4 5000 384398 ns/op -BenchmarkSimpleTransfer/10000-200-fee-memdb-4 3000 443481 ns/op -BenchmarkSimpleTransfer/100-10-nofee-persist-4 3000 498460 ns/op -BenchmarkSimpleTransfer/100-10-fee-persist-4 3000 559034 ns/op -BenchmarkSimpleTransfer/100-200-nofee-persist-4 5000 314090 ns/op -BenchmarkSimpleTransfer/100-200-fee-persist-4 5000 397457 ns/op -BenchmarkSimpleTransfer/10000-10-nofee-persist-4 2000 845872 ns/op -BenchmarkSimpleTransfer/10000-10-fee-persist-4 2000 929205 ns/op -BenchmarkSimpleTransfer/10000-200-nofee-persist-4 5000 596601 ns/op -BenchmarkSimpleTransfer/10000-200-fee-persist-4 5000 667093 ns/op -PASS -ok github.com/tendermint/basecoin/benchmarks 97.097s diff --git a/_attic/benchmarks/unstable-speed.txt b/_attic/benchmarks/unstable-speed.txt deleted file mode 100644 index ce4ad2806f..0000000000 --- a/_attic/benchmarks/unstable-speed.txt +++ /dev/null @@ -1,19 +0,0 @@ -BenchmarkMakeTx-4 2000 660064 ns/op -BenchmarkSimpleTransfer/100-10-nofee-memdb-4 5000 338378 ns/op -BenchmarkSimpleTransfer/100-10-fee-memdb-4 5000 380171 ns/op -BenchmarkSimpleTransfer/100-200-nofee-memdb-4 5000 306365 ns/op -BenchmarkSimpleTransfer/100-200-fee-memdb-4 5000 359344 ns/op -BenchmarkSimpleTransfer/10000-10-nofee-memdb-4 5000 366057 ns/op -BenchmarkSimpleTransfer/10000-10-fee-memdb-4 3000 433549 ns/op -BenchmarkSimpleTransfer/10000-200-nofee-memdb-4 5000 351662 ns/op -BenchmarkSimpleTransfer/10000-200-fee-memdb-4 3000 421573 ns/op -BenchmarkSimpleTransfer/100-10-nofee-persist-4 3000 479848 ns/op -BenchmarkSimpleTransfer/100-10-fee-persist-4 3000 544164 ns/op -BenchmarkSimpleTransfer/100-200-nofee-persist-4 5000 327999 ns/op -BenchmarkSimpleTransfer/100-200-fee-persist-4 5000 385751 ns/op -BenchmarkSimpleTransfer/10000-10-nofee-persist-4 2000 852128 ns/op -BenchmarkSimpleTransfer/10000-10-fee-persist-4 2000 1055130 ns/op -BenchmarkSimpleTransfer/10000-200-nofee-persist-4 5000 642872 ns/op -BenchmarkSimpleTransfer/10000-200-fee-persist-4 3000 686337 ns/op -PASS -ok github.com/tendermint/basecoin/benchmarks 91.717s diff --git a/_attic/client/commands/auto/cmd.go b/_attic/client/commands/auto/cmd.go deleted file mode 100644 index 704ba17851..0000000000 --- a/_attic/client/commands/auto/cmd.go +++ /dev/null @@ -1,33 +0,0 @@ -package auto - -import ( - "os" - - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -// AutoCompleteCmd - command to generate bash autocompletions -var AutoCompleteCmd = &cobra.Command{ - Use: "complete", - Short: "generate bash autocompletions", - RunE: doAutoComplete, -} - -// nolint - flags -const ( - FlagOutput = "file" -) - -func init() { - AutoCompleteCmd.Flags().String(FlagOutput, "", "file to output bash autocompletion") - AutoCompleteCmd.MarkFlagFilename(FlagOutput) -} - -func doAutoComplete(cmd *cobra.Command, args []string) error { - output := viper.GetString(FlagOutput) - if output == "" { - return cmd.Root().GenBashCompletion(os.Stdout) - } - return cmd.Root().GenBashCompletionFile(output) -} diff --git a/_attic/client/commands/commits/export.go b/_attic/client/commands/commits/export.go deleted file mode 100644 index c27826fa76..0000000000 --- a/_attic/client/commands/commits/export.go +++ /dev/null @@ -1,46 +0,0 @@ -package commits - -import ( - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/tendermint/light-client/certifiers/files" - - "github.com/cosmos/cosmos-sdk/client/commands" -) - -var exportCmd = &cobra.Command{ - Use: "export ", - Short: "Export selected commits to given file", - Long: `Exports the most recent commit to a binary file. -If desired, you can select by an older height or validator hash. -`, - RunE: commands.RequireInit(exportCommit), - SilenceUsage: true, -} - -func init() { - exportCmd.Flags().Int(heightFlag, 0, "Show the commit with closest height to this") - exportCmd.Flags().String(hashFlag, "", "Show the commit matching the validator hash") - RootCmd.AddCommand(exportCmd) -} - -func exportCommit(cmd *cobra.Command, args []string) error { - if len(args) != 1 || len(args[0]) == 0 { - return errors.New("You must provide a filepath to output") - } - path := args[0] - - // load the seed as specified - trust, _ := commands.GetProviders() - h := viper.GetInt(heightFlag) - hash := viper.GetString(hashFlag) - fc, err := loadCommit(trust, h, hash, "") - if err != nil { - return err - } - - // now get the output file and write it - return files.SaveFullCommitJSON(fc, path) -} diff --git a/_attic/client/commands/commits/import.go b/_attic/client/commands/commits/import.go deleted file mode 100644 index 936d25b063..0000000000 --- a/_attic/client/commands/commits/import.go +++ /dev/null @@ -1,59 +0,0 @@ -package commits - -import ( - "fmt" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/tendermint/light-client/certifiers/files" - - "github.com/cosmos/cosmos-sdk/client/commands" -) - -const ( - dryFlag = "dry-run" -) - -var importCmd = &cobra.Command{ - Use: "import ", - Short: "Imports a new commit from the given file", - Long: `Validate this file and update to the given commit if secure.`, - RunE: commands.RequireInit(importCommit), - SilenceUsage: true, -} - -func init() { - importCmd.Flags().Bool(dryFlag, false, "Test the import fully, but do not import") - RootCmd.AddCommand(importCmd) -} - -func importCommit(cmd *cobra.Command, args []string) error { - if len(args) != 1 || len(args[0]) == 0 { - return errors.New("You must provide an input file") - } - - // prepare the certifier - cert, err := commands.GetCertifier() - if err != nil { - return err - } - - // parse the input file - path := args[0] - fc, err := files.LoadFullCommitJSON(path) - if err != nil { - return err - } - - // just do simple checks in --dry-run - if viper.GetBool(dryFlag) { - fmt.Printf("Testing commit %d/%X\n", fc.Height(), fc.ValidatorsHash()) - err = fc.ValidateBasic(cert.ChainID()) - } else { - fmt.Printf("Importing commit %d/%X\n", fc.Height(), fc.ValidatorsHash()) - err = cert.Update(fc) - } - return err -} diff --git a/_attic/client/commands/commits/root.go b/_attic/client/commands/commits/root.go deleted file mode 100644 index 513d86873e..0000000000 --- a/_attic/client/commands/commits/root.go +++ /dev/null @@ -1,15 +0,0 @@ -package commits - -import "github.com/spf13/cobra" - -// RootCmd represents the base command when called without any subcommands -var RootCmd = &cobra.Command{ - Use: "commits", - Short: "Verify commits from your local store", - Long: `Commits allows you to inspect and update the validator set for the chain. - -Since all security in a PoS system is based on having the correct validator -set, it is important to inspect the commits to maintain the security, which -is used to verify all header and merkle proofs. -`, -} diff --git a/_attic/client/commands/commits/show.go b/_attic/client/commands/commits/show.go deleted file mode 100644 index e9cc6ed28f..0000000000 --- a/_attic/client/commands/commits/show.go +++ /dev/null @@ -1,74 +0,0 @@ -package commits - -import ( - "encoding/hex" - "encoding/json" - "fmt" - - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/tendermint/light-client/certifiers" - "github.com/tendermint/light-client/certifiers/files" - - "github.com/cosmos/cosmos-sdk/client/commands" -) - -const ( - heightFlag = "height" - hashFlag = "hash" - fileFlag = "file" -) - -var showCmd = &cobra.Command{ - Use: "show", - Short: "Show the details of one selected commit", - Long: `Shows the most recent downloaded key by default. -If desired, you can select by height, validator hash, or a file. -`, - RunE: commands.RequireInit(showCommit), - SilenceUsage: true, -} - -func init() { - showCmd.Flags().Int(heightFlag, 0, "Show the commit with closest height to this") - showCmd.Flags().String(hashFlag, "", "Show the commit matching the validator hash") - showCmd.Flags().String(fileFlag, "", "Show the commit stored in the given file") - RootCmd.AddCommand(showCmd) -} - -func loadCommit(p certifiers.Provider, h int, hash, file string) (fc certifiers.FullCommit, err error) { - // load the commit from the proper place - if h != 0 { - fc, err = p.GetByHeight(h) - } else if hash != "" { - var vhash []byte - vhash, err = hex.DecodeString(hash) - if err == nil { - fc, err = p.GetByHash(vhash) - } - } else if file != "" { - fc, err = files.LoadFullCommitJSON(file) - } else { - // default is latest commit - fc, err = p.LatestCommit() - } - return -} - -func showCommit(cmd *cobra.Command, args []string) error { - trust, _ := commands.GetProviders() - - h := viper.GetInt(heightFlag) - hash := viper.GetString(hashFlag) - file := viper.GetString(fileFlag) - fc, err := loadCommit(trust, h, hash, file) - if err != nil { - return err - } - - // now render it! - data, err := json.MarshalIndent(fc, "", " ") - fmt.Println(string(data)) - return err -} diff --git a/_attic/client/commands/commits/update.go b/_attic/client/commands/commits/update.go deleted file mode 100644 index c42144b61b..0000000000 --- a/_attic/client/commands/commits/update.go +++ /dev/null @@ -1,52 +0,0 @@ -package commits - -import ( - "fmt" - - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/tendermint/light-client/certifiers" - - "github.com/cosmos/cosmos-sdk/client/commands" -) - -var updateCmd = &cobra.Command{ - Use: "update", - Short: "Update commit to current height if possible", - RunE: commands.RequireInit(updateCommit), - SilenceUsage: true, -} - -func init() { - updateCmd.Flags().Int(heightFlag, 0, "Update to this height, not latest") - RootCmd.AddCommand(updateCmd) -} - -func updateCommit(cmd *cobra.Command, args []string) error { - cert, err := commands.GetCertifier() - if err != nil { - return err - } - - h := viper.GetInt(heightFlag) - var fc certifiers.FullCommit - if h <= 0 { - // get the lastest from our source - fc, err = cert.Source.LatestCommit() - } else { - fc, err = cert.Source.GetByHeight(h) - } - if err != nil { - return err - } - - // let the certifier do it's magic to update.... - fmt.Printf("Trying to update to height: %d...\n", fc.Height()) - err = cert.Update(fc) - if err != nil { - return err - } - fmt.Println("Success!") - return nil -} diff --git a/_attic/client/commands/common.go b/_attic/client/commands/common.go deleted file mode 100644 index c51dbb469b..0000000000 --- a/_attic/client/commands/common.go +++ /dev/null @@ -1,154 +0,0 @@ -/* -Package commands contains any general setup/helpers valid for all subcommands -*/ -package commands - -import ( - "encoding/hex" - "fmt" - "strings" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/tendermint/light-client/certifiers" - "github.com/tendermint/tmlibs/cli" - cmn "github.com/tendermint/tmlibs/common" - - rpcclient "github.com/tendermint/tendermint/rpc/client" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/modules/auth" -) - -var ( - trustedProv certifiers.Provider - sourceProv certifiers.Provider -) - -const ( - ChainFlag = "chain-id" - NodeFlag = "node" -) - -// AddBasicFlags adds --node and --chain-id, which we need for everything -func AddBasicFlags(cmd *cobra.Command) { - cmd.PersistentFlags().String(ChainFlag, "", "Chain ID of tendermint node") - cmd.PersistentFlags().String(NodeFlag, "", ": to tendermint rpc interface for this chain") -} - -// GetChainID reads ChainID from the flags -func GetChainID() string { - return viper.GetString(ChainFlag) -} - -// GetNode prepares a simple rpc.Client from the flags -func GetNode() rpcclient.Client { - return client.GetNode(viper.GetString(NodeFlag)) -} - -// GetSourceProvider returns a provider pointing to an rpc handler -func GetSourceProvider() certifiers.Provider { - if sourceProv == nil { - node := viper.GetString(NodeFlag) - sourceProv = client.GetRPCProvider(node) - } - return sourceProv -} - -// GetTrustedProvider returns a reference to a local store with cache -func GetTrustedProvider() certifiers.Provider { - if trustedProv == nil { - rootDir := viper.GetString(cli.HomeFlag) - trustedProv = client.GetLocalProvider(rootDir) - } - return trustedProv -} - -// GetProviders creates a trusted (local) seed provider and a remote -// provider based on configuration. -func GetProviders() (trusted certifiers.Provider, source certifiers.Provider) { - return GetTrustedProvider(), GetSourceProvider() -} - -// GetCertifier constructs a dynamic certifier from the config info -func GetCertifier() (*certifiers.Inquiring, error) { - // load up the latest store.... - trust := GetTrustedProvider() - source := GetSourceProvider() - chainID := GetChainID() - return client.GetCertifier(chainID, trust, source) -} - -// ParseActor parses an address of form: -// [:][:] -// into a sdk.Actor. -// If app is not specified or "", then assume auth.NameSigs -func ParseActor(input string) (res sdk.Actor, err error) { - chain, app := "", auth.NameSigs - input = strings.TrimSpace(input) - spl := strings.SplitN(input, ":", 3) - - if len(spl) == 3 { - chain = spl[0] - spl = spl[1:] - } - if len(spl) == 2 { - if spl[0] != "" { - app = spl[0] - } - spl = spl[1:] - } - - addr, err := hex.DecodeString(cmn.StripHex(spl[0])) - if err != nil { - return res, errors.Errorf("Address is invalid hex: %v\n", err) - } - res = sdk.Actor{ - ChainID: chain, - App: app, - Address: addr, - } - return -} - -// ParseActors takes a comma-separated list of actors and parses them into -// a slice -func ParseActors(key string) (signers []sdk.Actor, err error) { - var act sdk.Actor - for _, k := range strings.Split(key, ",") { - act, err = ParseActor(k) - if err != nil { - return - } - signers = append(signers, act) - } - return -} - -// GetOneArg makes sure there is exactly one positional argument -func GetOneArg(args []string, argname string) (string, error) { - if len(args) == 0 { - return "", errors.Errorf("Missing required argument [%s]", argname) - } - if len(args) > 1 { - return "", errors.Errorf("Only accepts one argument [%s]", argname) - } - return args[0], nil -} - -// ParseHexFlag takes a flag name and parses the viper contents as hex -func ParseHexFlag(flag string) ([]byte, error) { - arg := viper.GetString(flag) - if arg == "" { - return nil, errors.Errorf("No such flag: %s", flag) - } - value, err := hex.DecodeString(cmn.StripHex(arg)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Cannot parse %s", flag)) - } - return value, nil - -} diff --git a/_attic/client/commands/init.go b/_attic/client/commands/init.go deleted file mode 100644 index 807dd1c0b2..0000000000 --- a/_attic/client/commands/init.go +++ /dev/null @@ -1,352 +0,0 @@ -package commands - -import ( - "bytes" - "encoding/hex" - "fmt" - "io" - "os" - "path/filepath" - "strings" - - "github.com/BurntSushi/toml" - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/pflag" - "github.com/spf13/viper" - - "github.com/tendermint/light-client/certifiers" - "github.com/tendermint/light-client/certifiers/files" - "github.com/tendermint/tmlibs/cli" - cmn "github.com/tendermint/tmlibs/common" - - "github.com/tendermint/tendermint/types" -) - -var ( - dirPerm = os.FileMode(0700) -) - -//nolint -const ( - CommitFlag = "commit" - HashFlag = "valhash" - GenesisFlag = "genesis" - FlagTrustNode = "trust-node" - - ConfigFile = "config.toml" -) - -// InitCmd will initialize the basecli store -var InitCmd = &cobra.Command{ - Use: "init", - Short: "Initialize the light client for a new chain", - RunE: runInit, -} - -var ResetCmd = &cobra.Command{ - Use: "reset_all", - Short: "DANGEROUS: Wipe out all client data, including keys", - RunE: runResetAll, -} - -func init() { - InitCmd.Flags().Bool("force-reset", false, "Wipe clean an existing client store, except for keys") - InitCmd.Flags().String(CommitFlag, "", "Commit file to import (optional)") - InitCmd.Flags().String(HashFlag, "", "Trusted validator hash (must match to accept)") - InitCmd.Flags().String(GenesisFlag, "", "Genesis file with chainid and validators (optional)") -} - -func runInit(cmd *cobra.Command, args []string) error { - root := viper.GetString(cli.HomeFlag) - if viper.GetBool("force-reset") { - resetRoot(root, true) - } - - // make sure we don't have an existing client initialized - inited, err := WasInited(root) - if err != nil { - return err - } - if inited { - return errors.Errorf("%s already is initialized, --force-reset if you really want to wipe it out", root) - } - - // clean up dir if init fails - err = doInit(cmd, root) - if err != nil { - resetRoot(root, true) - } - return err -} - -// doInit actually creates all the files, on error, we should revert it all -func doInit(cmd *cobra.Command, root string) error { - // read the genesis file if present, and populate --chain-id and --valhash - err := checkGenesis(cmd) - if err != nil { - return err - } - - err = initConfigFile(cmd) - if err != nil { - return err - } - err = initTrust() - return err -} - -func runResetAll(cmd *cobra.Command, args []string) error { - root := viper.GetString(cli.HomeFlag) - resetRoot(root, false) - return nil -} - -func resetRoot(root string, saveKeys bool) { - tmp := filepath.Join(os.TempDir(), cmn.RandStr(16)) - keys := filepath.Join(root, "keys") - if saveKeys { - os.Rename(keys, tmp) - } - os.RemoveAll(root) - if saveKeys { - os.Mkdir(root, 0700) - os.Rename(tmp, keys) - } -} - -type Runable func(cmd *cobra.Command, args []string) error - -// Any commands that require and init'ed basecoin directory -// should wrap their RunE command with RequireInit -// to make sure that the client is initialized. -// -// This cannot be called during PersistentPreRun, -// as they are called from the most specific command first, and root last, -// and the root command sets up viper, which is needed to find the home dir. -func RequireInit(run Runable) Runable { - return func(cmd *cobra.Command, args []string) error { - // otherwise, run the wrappped command - if viper.GetBool(FlagTrustNode) { - return run(cmd, args) - } - - // first check if we were Init'ed and if not, return an error - root := viper.GetString(cli.HomeFlag) - init, err := WasInited(root) - if err != nil { - return err - } - if !init { - return errors.Errorf("You must run '%s init' first", cmd.Root().Name()) - } - - // otherwise, run the wrappped command - return run(cmd, args) - } -} - -// WasInited returns true if a basecoin was previously initialized -// in this directory. Important to ensure proper behavior. -// -// Returns error if we have filesystem errors -func WasInited(root string) (bool, error) { - // make sure there is a directory here in any case - os.MkdirAll(root, dirPerm) - - // check if there is a config.toml file - cfgFile := filepath.Join(root, "config.toml") - _, err := os.Stat(cfgFile) - if os.IsNotExist(err) { - return false, nil - } - if err != nil { - return false, errors.WithStack(err) - } - - // check if there are non-empty checkpoints and validators dirs - dirs := []string{ - filepath.Join(root, files.CheckDir), - filepath.Join(root, files.ValDir), - } - // if any of these dirs is empty, then we have no data - for _, d := range dirs { - empty, err := isEmpty(d) - if err != nil { - return false, err - } - if empty { - return false, nil - } - } - - // looks like we have everything - return true, nil -} - -func checkGenesis(cmd *cobra.Command) error { - genesis := viper.GetString(GenesisFlag) - if genesis == "" { - return nil - } - - doc, err := types.GenesisDocFromFile(genesis) - if err != nil { - return err - } - - flags := cmd.Flags() - flags.Set(ChainFlag, doc.ChainID) - hash := doc.ValidatorHash() - hexHash := hex.EncodeToString(hash) - flags.Set(HashFlag, hexHash) - - return nil -} - -// isEmpty returns false if we can read files in this dir. -// if it doesn't exist, read issues, etc... return true -// -// TODO: should we handle errors otherwise? -func isEmpty(dir string) (bool, error) { - // check if we can read the directory, missing is fine, other error is not - d, err := os.Open(dir) - if os.IsNotExist(err) { - return true, nil - } - if err != nil { - return false, errors.WithStack(err) - } - defer d.Close() - - // read to see if any (at least one) files here... - files, err := d.Readdirnames(1) - if err == io.EOF { - return true, nil - } - if err != nil { - return false, errors.WithStack(err) - } - empty := len(files) == 0 - return empty, nil -} - -type Config struct { - Chain string `toml:"chain-id,omitempty"` - Node string `toml:"node,omitempty"` - Output string `toml:"output,omitempty"` - Encoding string `toml:"encoding,omitempty"` -} - -func setConfig(flags *pflag.FlagSet, f string, v *string) { - if flags.Changed(f) { - *v = viper.GetString(f) - } -} - -func initConfigFile(cmd *cobra.Command) error { - flags := cmd.Flags() - var cfg Config - - required := []string{ChainFlag, NodeFlag} - for _, f := range required { - if !flags.Changed(f) { - return errors.Errorf(`"--%s" required`, f) - } - } - - setConfig(flags, ChainFlag, &cfg.Chain) - setConfig(flags, NodeFlag, &cfg.Node) - setConfig(flags, cli.OutputFlag, &cfg.Output) - setConfig(flags, cli.EncodingFlag, &cfg.Encoding) - - out, err := os.Create(filepath.Join(viper.GetString(cli.HomeFlag), ConfigFile)) - if err != nil { - return errors.WithStack(err) - } - defer out.Close() - - // save the config file - err = toml.NewEncoder(out).Encode(cfg) - if err != nil { - return errors.WithStack(err) - } - - return nil -} - -func initTrust() (err error) { - // create a provider.... - trust, source := GetProviders() - - // load a commit file, or get data from the provider - var fc certifiers.FullCommit - commitFile := viper.GetString(CommitFlag) - if commitFile == "" { - fmt.Println("Loading validator set from tendermint rpc...") - fc, err = source.LatestCommit() - } else { - fmt.Printf("Loading validators from file %s\n", commitFile) - fc, err = files.LoadFullCommit(commitFile) - } - // can't load the commit? abort! - if err != nil { - return err - } - - // make sure it is a proper commit - err = fc.ValidateBasic(viper.GetString(ChainFlag)) - if err != nil { - return err - } - - // validate hash interactively or not - hash := viper.GetString(HashFlag) - if hash != "" { - var hashb []byte - hashb, err = hex.DecodeString(hash) - if err == nil && !bytes.Equal(hashb, fc.ValidatorsHash()) { - err = errors.Errorf("Validator hash doesn't match expectation: %X", fc.ValidatorsHash()) - } - } else { - err = validateHash(fc) - } - - if err != nil { - return err - } - - // if accepted, store commit as current state - trust.StoreCommit(fc) - return nil -} - -func validateHash(fc certifiers.FullCommit) error { - // ask the user to verify the validator hash - fmt.Println("\nImportant: if this is incorrect, all interaction with the chain will be insecure!") - fmt.Printf(" Given validator hash valid: %X\n", fc.ValidatorsHash()) - fmt.Println("Is this valid (y/n)?") - valid := askForConfirmation() - if !valid { - return errors.New("Invalid validator hash, try init with proper commit later") - } - return nil -} - -func askForConfirmation() bool { - var resp string - _, err := fmt.Scanln(&resp) - if err != nil { - fmt.Println("Please type yes or no and then press enter:") - return askForConfirmation() - } - resp = strings.ToLower(resp) - if resp == "y" || resp == "yes" { - return true - } else if resp == "n" || resp == "no" { - return false - } else { - fmt.Println("Please type yes or no and then press enter:") - return askForConfirmation() - } -} diff --git a/_attic/client/commands/keys/README.md b/_attic/client/commands/keys/README.md deleted file mode 100644 index 8bf9ca73b6..0000000000 --- a/_attic/client/commands/keys/README.md +++ /dev/null @@ -1,117 +0,0 @@ -# Keys CLI - -This is as much an example how to expose cobra/viper, as for a cli itself -(I think this code is overkill for what go-keys needs). But please look at -the commands, and give feedback and changes. - -`RootCmd` calls some initialization functions (`cobra.OnInitialize` and `RootCmd.PersistentPreRunE`) which serve to connect environmental variables and cobra flags, as well as load the config file. It also validates the flags registered on root and creates the cryptomanager, which will be used by all subcommands. - -## Help info - -``` -# keys help - -Keys allows you to manage your local keystore for tendermint. - -These keys may be in any format supported by go-crypto and can be -used by light-clients, full nodes, or any other application that -needs to sign with a private key. - -Usage: - keys [command] - -Available Commands: - get Get details of one key - list List all keys - new Create a new public/private key pair - serve Run the key manager as an http server - update Change the password for a private key - -Flags: - --keydir string Directory to store private keys (subdir of root) (default "keys") - -o, --output string Output format (text|json) (default "text") - -r, --root string root directory for config and data (default "/Users/ethan/.tlc") - -Use "keys [command] --help" for more information about a command. -``` - -## Getting the config file - -The first step is to load in root, by checking the following in order: - -* -r, --root command line flag -* TM_ROOT environmental variable -* default ($HOME/.tlc evaluated at runtime) - -Once the `rootDir` is established, the script looks for a config file named `keys.{json,toml,yaml,hcl}` in that directory and parses it. These values will provide defaults for flags of the same name. - -There is an example config file for testing out locally, which writes keys to `./.mykeys`. You can - -## Getting/Setting variables - -When we want to get the value of a user-defined variable (eg. `output`), we can call `viper.GetString("output")`, which will do the following checks, until it finds a match: - -* Is `--output` command line flag present? -* Is `TM_OUTPUT` environmental variable set? -* Was a config file found and does it have an `output` variable? -* Is there a default set on the command line flag? - -If no variable is set and there was no default, we get back "". - -This setup allows us to have powerful command line flags, but use env variables or config files (local or 12-factor style) to avoid passing these arguments every time. - -## Nesting structures - -Sometimes we don't just need key-value pairs, but actually a multi-level config file, like - -``` -[mail] -from = "no-reply@example.com" -server = "mail.example.com" -port = 567 -password = "XXXXXX" -``` - -This CLI is too simple to warant such a structure, but I think eg. tendermint could benefit from such an approach. Here are some pointers: - -* [Accessing nested keys from config files](https://github.com/spf13/viper#accessing-nested-keys) -* [Overriding nested values with envvars](https://www.netlify.com/blog/2016/09/06/creating-a-microservice-boilerplate-in-go/#nested-config-values) - the mentioned outstanding PR is already merged into master! -* Overriding nested values with cli flags? (use `--log_config.level=info` ??) - -I'd love to see an example of this fully worked out in a more complex CLI. - -## Have your cake and eat it too - -It's easy to render data different ways. Some better for viewing, some better for importing to other programs. You can just add some global (persistent) flags to control the output formatting, and everyone gets what they want. - -``` -# keys list -e hex -All keys: -betty d0789984492b1674e276b590d56b7ae077f81adc -john b77f4720b220d1411a649b6c7f1151eb6b1c226a - -# keys list -e btc -All keys: -betty 3uTF4r29CbtnzsNHZoPSYsE4BDwH -john 3ZGp2Md35iw4XVtRvZDUaAEkCUZP - -# keys list -e b64 -o json -[ - { - "name": "betty", - "address": "0HiZhEkrFnTidrWQ1Wt64Hf4Gtw=", - "pubkey": { - "type": "secp256k1", - "data": "F83WvhT0KwttSoqQqd_0_r2ztUUaQix5EXdO8AZyREoV31Og780NW59HsqTAb2O4hZ-w-j0Z-4b2IjfdqqfhVQ==" - } - }, - { - "name": "john", - "address": "t39HILIg0UEaZJtsfxFR62scImo=", - "pubkey": { - "type": "ed25519", - "data": "t1LFmbg_8UTwj-n1wkqmnTp6NfaOivokEhlYySlGYCY=" - } - } -] -``` diff --git a/_attic/client/commands/keys/delete.go b/_attic/client/commands/keys/delete.go deleted file mode 100644 index d79f7254f6..0000000000 --- a/_attic/client/commands/keys/delete.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright © 2017 Ethan Frey -// -// 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 keys - -import ( - "fmt" - - "github.com/pkg/errors" - - "github.com/spf13/cobra" -) - -// deleteCmd represents the delete command -var deleteCmd = &cobra.Command{ - Use: "delete [name]", - Short: "DANGER: Delete a private key from your system", - RunE: runDeleteCmd, -} - -func runDeleteCmd(cmd *cobra.Command, args []string) error { - if len(args) != 1 || len(args[0]) == 0 { - return errors.New("You must provide a name for the key") - } - name := args[0] - - oldpass, err := getPassword("DANGER - enter password to permanently delete key:") - if err != nil { - return err - } - - err = GetKeyManager().Delete(name, oldpass) - if err != nil { - return err - } - fmt.Println("Password deleted forever (uh oh!)") - return nil -} diff --git a/_attic/client/commands/keys/get.go b/_attic/client/commands/keys/get.go deleted file mode 100644 index 7310d83c19..0000000000 --- a/_attic/client/commands/keys/get.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright © 2017 Ethan Frey -// -// 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 keys - -import ( - "github.com/pkg/errors" - - "github.com/spf13/cobra" -) - -// getCmd represents the get command -var getCmd = &cobra.Command{ - Use: "get [name]", - Short: "Get details of one key", - Long: `Return public details of one local key.`, - RunE: runGetCmd, -} - -func runGetCmd(cmd *cobra.Command, args []string) error { - if len(args) != 1 || len(args[0]) == 0 { - return errors.New("You must provide a name for the key") - } - name := args[0] - - info, err := GetKeyManager().Get(name) - if err == nil { - printInfo(info) - } - return err -} diff --git a/_attic/client/commands/keys/list.go b/_attic/client/commands/keys/list.go deleted file mode 100644 index afdfb27845..0000000000 --- a/_attic/client/commands/keys/list.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright © 2017 Ethan Frey -// -// 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 keys - -import "github.com/spf13/cobra" - -// listCmd represents the list command -var listCmd = &cobra.Command{ - Use: "list", - Short: "List all keys", - Long: `Return a list of all public keys stored by this key manager -along with their associated name and address.`, - RunE: runListCmd, -} - -func runListCmd(cmd *cobra.Command, args []string) error { - infos, err := GetKeyManager().List() - if err == nil { - printInfos(infos) - } - return err -} diff --git a/_attic/client/commands/keys/new.go b/_attic/client/commands/keys/new.go deleted file mode 100644 index f1f422a20a..0000000000 --- a/_attic/client/commands/keys/new.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright © 2017 Ethan Frey -// -// 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 keys - -import ( - "fmt" - - "github.com/pkg/errors" - "github.com/tendermint/go-crypto/keys" - "github.com/tendermint/go-wire/data" - "github.com/tendermint/tmlibs/cli" - - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -const ( - flagType = "type" - flagNoBackup = "no-backup" -) - -// newCmd represents the new command -var newCmd = &cobra.Command{ - Use: "new [name]", - Short: "Create a new public/private key pair", - Long: `Add a public/private key pair to the key store. -The password muts be entered in the terminal and not -passed as a command line argument for security.`, - RunE: runNewCmd, -} - -func init() { - newCmd.Flags().StringP(flagType, "t", "ed25519", "Type of key (ed25519|secp256k1|ledger") - newCmd.Flags().Bool(flagNoBackup, false, "Don't print out seed phrase (if others are watching the terminal)") -} - -func runNewCmd(cmd *cobra.Command, args []string) error { - if len(args) != 1 || len(args[0]) == 0 { - return errors.New("You must provide a name for the key") - } - name := args[0] - algo := viper.GetString(flagType) - - pass, err := getCheckPassword("Enter a passphrase:", "Repeat the passphrase:") - if err != nil { - return err - } - - info, seed, err := GetKeyManager().Create(name, pass, algo) - if err == nil { - printCreate(info, seed) - } - return err -} - -type NewOutput struct { - Key keys.Info `json:"key"` - Seed string `json:"seed"` -} - -func printCreate(info keys.Info, seed string) { - switch viper.Get(cli.OutputFlag) { - case "text": - printInfo(info) - // print seed unless requested not to. - if !viper.GetBool(flagNoBackup) { - fmt.Println("**Important** write this seed phrase in a safe place.") - fmt.Println("It is the only way to recover your account if you ever forget your password.\n") - fmt.Println(seed) - } - case "json": - out := NewOutput{Key: info} - if !viper.GetBool(flagNoBackup) { - out.Seed = seed - } - json, err := data.ToJSON(out) - if err != nil { - panic(err) // really shouldn't happen... - } - fmt.Println(string(json)) - } -} diff --git a/_attic/client/commands/keys/recover.go b/_attic/client/commands/keys/recover.go deleted file mode 100644 index 52a8d08608..0000000000 --- a/_attic/client/commands/keys/recover.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright © 2017 Ethan Frey -// -// 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 keys - -import ( - "github.com/pkg/errors" - - "github.com/spf13/cobra" -) - -// recoverCmd represents the recover command -var recoverCmd = &cobra.Command{ - Use: "recover [name]", - Short: "Recover a private key from a seed phrase", - Long: `Recover a private key from a seed phrase. - -I really hope you wrote this down when you created the new key. -The seed is only displayed on creation, never again. - -You can also use this to copy a key between multiple testnets, -simply by "recovering" the key in the other nets you want to copy -to. Of course, it has no coins on the other nets, just the same address.`, - RunE: runRecoverCmd, -} - -func runRecoverCmd(cmd *cobra.Command, args []string) error { - if len(args) != 1 || len(args[0]) == 0 { - return errors.New("You must provide a name for the key") - } - name := args[0] - - pass, err := getPassword("Enter the new passphrase:") - if err != nil { - return err - } - - // not really a password... huh? - seed, err := getSeed("Enter your recovery seed phrase:") - if err != nil { - return err - } - - info, err := GetKeyManager().Recover(name, pass, seed) - if err != nil { - return err - } - printInfo(info) - return nil -} diff --git a/_attic/client/commands/keys/root.go b/_attic/client/commands/keys/root.go deleted file mode 100644 index 9ec37a8cee..0000000000 --- a/_attic/client/commands/keys/root.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright © 2017 Ethan Frey -// -// 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 keys - -import ( - "github.com/spf13/cobra" - keys "github.com/tendermint/go-crypto/keys" -) - -var ( - manager keys.Manager -) - -// RootCmd represents the base command when called without any subcommands -var RootCmd = &cobra.Command{ - Use: "keys", - Short: "Key manager for tendermint clients", - Long: `Keys allows you to manage your local keystore for tendermint. - -These keys may be in any format supported by go-crypto and can be -used by light-clients, full nodes, or any other application that -needs to sign with a private key.`, -} - -func init() { - RootCmd.AddCommand(getCmd) - RootCmd.AddCommand(listCmd) - RootCmd.AddCommand(newCmd) - RootCmd.AddCommand(updateCmd) - RootCmd.AddCommand(deleteCmd) - RootCmd.AddCommand(recoverCmd) -} diff --git a/_attic/client/commands/keys/update.go b/_attic/client/commands/keys/update.go deleted file mode 100644 index f79a5cc1a9..0000000000 --- a/_attic/client/commands/keys/update.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright © 2017 Ethan Frey -// -// 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 keys - -import ( - "fmt" - - "github.com/pkg/errors" - - "github.com/spf13/cobra" -) - -// updateCmd represents the update command -var updateCmd = &cobra.Command{ - Use: "update [name]", - Short: "Change the password for a private key", - RunE: runUpdateCmd, -} - -func runUpdateCmd(cmd *cobra.Command, args []string) error { - if len(args) != 1 || len(args[0]) == 0 { - return errors.New("You must provide a name for the key") - } - name := args[0] - - oldpass, err := getPassword("Enter the current passphrase:") - if err != nil { - return err - } - newpass, err := getCheckPassword("Enter the new passphrase:", "Repeat the new passphrase:") - if err != nil { - return err - } - - err = GetKeyManager().Update(name, oldpass, newpass) - if err != nil { - return err - } - fmt.Println("Password successfully updated!") - return nil -} diff --git a/_attic/client/commands/keys/utils.go b/_attic/client/commands/keys/utils.go deleted file mode 100644 index 85aa434b24..0000000000 --- a/_attic/client/commands/keys/utils.go +++ /dev/null @@ -1,131 +0,0 @@ -package keys - -import ( - "bufio" - "fmt" - "os" - "strings" - - "github.com/bgentry/speakeasy" - isatty "github.com/mattn/go-isatty" - "github.com/pkg/errors" - "github.com/spf13/viper" - - keys "github.com/tendermint/go-crypto/keys" - data "github.com/tendermint/go-wire/data" - "github.com/tendermint/tmlibs/cli" - - "github.com/cosmos/cosmos-sdk/client" -) - -const MinPassLength = 10 - -// GetKeyManager initializes a key manager based on the configuration -func GetKeyManager() keys.Manager { - if manager == nil { - rootDir := viper.GetString(cli.HomeFlag) - manager = client.GetKeyManager(rootDir) - } - return manager -} - -// if we read from non-tty, we just need to init the buffer reader once, -// in case we try to read multiple passwords (eg. update) -var buf *bufio.Reader - -func inputIsTty() bool { - return isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) -} - -func stdinPassword() (string, error) { - if buf == nil { - buf = bufio.NewReader(os.Stdin) - } - pass, err := buf.ReadString('\n') - if err != nil { - return "", err - } - return strings.TrimSpace(pass), nil -} - -func getPassword(prompt string) (pass string, err error) { - if inputIsTty() { - pass, err = speakeasy.Ask(prompt) - } else { - pass, err = stdinPassword() - } - if err != nil { - return "", err - } - if len(pass) < MinPassLength { - return "", errors.Errorf("Password must be at least %d characters", MinPassLength) - } - return pass, nil -} - -func getSeed(prompt string) (seed string, err error) { - if inputIsTty() { - fmt.Println(prompt) - } - seed, err = stdinPassword() - seed = strings.TrimSpace(seed) - return -} - -func getCheckPassword(prompt, prompt2 string) (string, error) { - // simple read on no-tty - if !inputIsTty() { - return getPassword(prompt) - } - - // TODO: own function??? - pass, err := getPassword(prompt) - if err != nil { - return "", err - } - pass2, err := getPassword(prompt2) - if err != nil { - return "", err - } - if pass != pass2 { - return "", errors.New("Passphrases don't match") - } - return pass, nil -} - -func printInfo(info keys.Info) { - switch viper.Get(cli.OutputFlag) { - case "text": - addr, err := data.ToText(info.Address) - if err != nil { - panic(err) // really shouldn't happen... - } - sep := "\t\t" - if len(info.Name) > 7 { - sep = "\t" - } - fmt.Printf("%s%s%s\n", info.Name, sep, addr) - case "json": - json, err := data.ToJSON(info) - if err != nil { - panic(err) // really shouldn't happen... - } - fmt.Println(string(json)) - } -} - -func printInfos(infos keys.Infos) { - switch viper.Get(cli.OutputFlag) { - case "text": - fmt.Println("All keys:") - for _, i := range infos { - printInfo(i) - } - case "json": - json, err := data.ToJSON(infos) - if err != nil { - panic(err) // really shouldn't happen... - } - fmt.Println(string(json)) - } -} diff --git a/_attic/client/commands/proxy/root.go b/_attic/client/commands/proxy/root.go deleted file mode 100644 index e8170015c2..0000000000 --- a/_attic/client/commands/proxy/root.go +++ /dev/null @@ -1,66 +0,0 @@ -package proxy - -import ( - "os" - - "github.com/spf13/cobra" - "github.com/spf13/viper" - - cmn "github.com/tendermint/tmlibs/common" - "github.com/tendermint/tmlibs/log" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/commands" -) - -// RootCmd represents the base command when called without any subcommands -var RootCmd = &cobra.Command{ - Use: "proxy", - Short: "Run proxy server, verifying tendermint rpc", - Long: `This node will run a secure proxy to a tendermint rpc server. - -All calls that can be tracked back to a block header by a proof -will be verified before passing them back to the caller. Other that -that it will present the same interface as a full tendermint node, -just with added trust and running locally.`, - RunE: commands.RequireInit(runProxy), - SilenceUsage: true, -} - -const ( - bindFlag = "serve" -) - -func init() { - RootCmd.Flags().String(bindFlag, ":8888", "Serve the proxy on the given port") -} - -// TODO: pass in a proper logger -var logger = log.NewTMLogger(log.NewSyncWriter(os.Stdout)) - -func init() { - logger = logger.With("module", "main") - logger = log.NewFilter(logger, log.AllowInfo()) -} - -func runProxy(cmd *cobra.Command, args []string) error { - // First, connect a client - node := commands.GetNode() - bind := viper.GetString(bindFlag) - cert, err := commands.GetCertifier() - if err != nil { - return err - } - sc := client.SecureClient(node, cert) - - err = client.StartProxy(sc, bind, logger) - if err != nil { - return err - } - - cmn.TrapSignal(func() { - // TODO: close up shop - }) - - return nil -} diff --git a/_attic/client/commands/query/get.go b/_attic/client/commands/query/get.go deleted file mode 100644 index 7ffc1c1f5d..0000000000 --- a/_attic/client/commands/query/get.go +++ /dev/null @@ -1,121 +0,0 @@ -package query - -import ( - "fmt" - "io" - "os" - - "github.com/pkg/errors" - "github.com/spf13/viper" - - wire "github.com/tendermint/go-wire" - "github.com/tendermint/go-wire/data" - "github.com/tendermint/iavl" - "github.com/tendermint/light-client/proofs" - - rpcclient "github.com/tendermint/tendermint/rpc/client" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/commands" -) - -// GetParsed does most of the work of the query commands, but is quite -// opinionated, so if you want more control about parsing, call Get -// directly. -// -// It will try to get the proof for the given key. If it is successful, -// it will return the height and also unserialize proof.Data into the data -// argument (so pass in a pointer to the appropriate struct) -func GetParsed(key []byte, data interface{}, height int, prove bool) (uint64, error) { - bs, h, err := Get(key, height, prove) - if err != nil { - return 0, err - } - err = wire.ReadBinaryBytes(bs, data) - if err != nil { - return 0, err - } - return h, nil -} - -// Get queries the given key and returns the value stored there and the -// height we checked at. -// -// If prove is true (and why shouldn't it be?), -// the data is fully verified before returning. If prove is false, -// we just repeat whatever any (potentially malicious) node gives us. -// Only use that if you are running the full node yourself, -// and it is localhost or you have a secure connection (not HTTP) -func Get(key []byte, height int, prove bool) (data.Bytes, uint64, error) { - if height < 0 { - return nil, 0, fmt.Errorf("Height cannot be negative") - } - - if !prove { - node := commands.GetNode() - resp, err := node.ABCIQueryWithOptions("/key", key, - rpcclient.ABCIQueryOptions{Trusted: true, Height: uint64(height)}) - return data.Bytes(resp.Value), resp.Height, err - } - val, h, _, err := GetWithProof(key, height) - return val, h, err -} - -// GetWithProof returns the values stored under a given key at the named -// height as in Get. Additionally, it will return a validated merkle -// proof for the key-value pair if it exists, and all checks pass. -func GetWithProof(key []byte, height int) (data.Bytes, uint64, iavl.KeyProof, error) { - node := commands.GetNode() - cert, err := commands.GetCertifier() - if err != nil { - return nil, 0, nil, err - } - return client.GetWithProof(key, height, node, cert) -} - -// ParseHexKey parses the key flag as hex and converts to bytes or returns error -// argname is used to customize the error message -func ParseHexKey(args []string, argname string) ([]byte, error) { - if len(args) == 0 { - return nil, errors.Errorf("Missing required argument [%s]", argname) - } - if len(args) > 1 { - return nil, errors.Errorf("Only accepts one argument [%s]", argname) - } - rawkey := args[0] - if rawkey == "" { - return nil, errors.Errorf("[%s] argument must be non-empty ", argname) - } - // with tx, we always just parse key as hex and use to lookup - return proofs.ParseHexKey(rawkey) -} - -// GetHeight reads the viper config for the query height -func GetHeight() int { - return viper.GetInt(FlagHeight) -} - -type proof struct { - Height uint64 `json:"height"` - Data interface{} `json:"data"` -} - -// FoutputProof writes the output of wrapping height and info -// in the form {"data": , "height": } -// to the provider io.Writer -func FoutputProof(w io.Writer, v interface{}, height uint64) error { - wrap := &proof{height, v} - blob, err := data.ToJSON(wrap) - if err != nil { - return err - } - _, err = fmt.Fprintf(w, "%s\n", blob) - return err -} - -// OutputProof prints the proof to stdout -// reuse this for printing proofs and we should enhance this for text/json, -// better presentation of height -func OutputProof(data interface{}, height uint64) error { - return FoutputProof(os.Stdout, data, height) -} diff --git a/_attic/client/commands/query/root.go b/_attic/client/commands/query/root.go deleted file mode 100644 index ec583dd79f..0000000000 --- a/_attic/client/commands/query/root.go +++ /dev/null @@ -1,30 +0,0 @@ -package query - -import ( - "github.com/spf13/cobra" - "github.com/cosmos/cosmos-sdk/client/commands" -) - -// nolint -const ( - FlagHeight = "height" -) - -// RootCmd represents the base command when called without any subcommands -var RootCmd = &cobra.Command{ - Use: "query", - Short: "Get and store merkle proofs for blockchain data", - Long: `Proofs allows you to validate data and merkle proofs. - -These proofs tie the data to a checkpoint, which is managed by "seeds". -Here we can validate these proofs and import/export them to prove specific -data to other peers as needed. -`, -} - -func init() { - RootCmd.PersistentFlags().Int(FlagHeight, 0, "Height to query (skip to use latest block)") - RootCmd.PersistentFlags().Bool(commands.FlagTrustNode, false, - "DANGEROUS: blindly trust all results from the server") - RootCmd.PersistentFlags().MarkHidden(commands.FlagTrustNode) -} diff --git a/_attic/client/commands/query/state.go b/_attic/client/commands/query/state.go deleted file mode 100644 index 4412d3e100..0000000000 --- a/_attic/client/commands/query/state.go +++ /dev/null @@ -1,36 +0,0 @@ -package query - -import ( - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" -) - -// KeyQueryCmd - CLI command to query a state by key with proof -var KeyQueryCmd = &cobra.Command{ - Use: "key [key]", - Short: "Handle proofs for state of abci app", - Long: `This will look up a given key in the abci app, verify the proof, -and output it as hex. - -If you want json output, use an app-specific command that knows key and value structure.`, - RunE: commands.RequireInit(keyQueryCmd), -} - -// Note: we cannot yse GetAndParseAppProof here, as we don't use go-wire to -// parse the object, but rather return the raw bytes -func keyQueryCmd(cmd *cobra.Command, args []string) error { - // parse cli - key, err := ParseHexKey(args, "key") - if err != nil { - return err - } - prove := !viper.GetBool(commands.FlagTrustNode) - - val, h, err := Get(key, GetHeight(), prove) - if err != nil { - return err - } - return OutputProof(val, h) -} diff --git a/_attic/client/commands/query/tx.go b/_attic/client/commands/query/tx.go deleted file mode 100644 index 24087b768f..0000000000 --- a/_attic/client/commands/query/tx.go +++ /dev/null @@ -1,76 +0,0 @@ -package query - -import ( - "github.com/spf13/cobra" - "github.com/spf13/viper" - - wire "github.com/tendermint/go-wire" - "github.com/tendermint/tendermint/types" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/commands" -) - -// TxQueryCmd - CLI command to query a transaction with proof -var TxQueryCmd = &cobra.Command{ - Use: "tx [txhash]", - Short: "Handle proofs of commited txs", - Long: `Proofs allows you to validate abci state with merkle proofs. - -These proofs tie the data to a checkpoint, which is managed by "seeds". -Here we can validate these proofs and import/export them to prove specific -data to other peers as needed. -`, - RunE: commands.RequireInit(txQueryCmd), -} - -func txQueryCmd(cmd *cobra.Command, args []string) error { - // parse cli - // TODO: when querying historical heights is allowed... pass it - // height := GetHeight() - bkey, err := ParseHexKey(args, "txhash") - if err != nil { - return err - } - - // get the proof -> this will be used by all prover commands - node := commands.GetNode() - prove := !viper.GetBool(commands.FlagTrustNode) - res, err := node.Tx(bkey, prove) - if err != nil { - return err - } - - // no checks if we don't get a proof - if !prove { - return showTx(res.Height, res.Tx) - } - - cert, err := commands.GetCertifier() - if err != nil { - return err - } - - check, err := client.GetCertifiedCommit(res.Height, node, cert) - if err != nil { - return err - } - err = res.Proof.Validate(check.Header.DataHash) - if err != nil { - return err - } - - // note that we return res.Proof.Data, not res.Tx, - // as res.Proof.Validate only verifies res.Proof.Data - return showTx(res.Height, res.Proof.Data) -} - -// showTx parses anything that was previously registered as interface{} -func showTx(h int, tx types.Tx) error { - var info interface{} - err := wire.ReadBinaryBytes(tx, &info) - if err != nil { - return err - } - return OutputProof(info, uint64(h)) -} diff --git a/_attic/client/commands/rpc/helpers.go b/_attic/client/commands/rpc/helpers.go deleted file mode 100644 index 7bcd074a0f..0000000000 --- a/_attic/client/commands/rpc/helpers.go +++ /dev/null @@ -1,49 +0,0 @@ -package rpc - -import ( - "fmt" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" - - "github.com/tendermint/tendermint/rpc/client" -) - -var waitCmd = &cobra.Command{ - Use: "wait", - Short: "Wait until a given height, or number of new blocks", - RunE: commands.RequireInit(runWait), -} - -func init() { - waitCmd.Flags().Int(FlagHeight, -1, "wait for block height") - waitCmd.Flags().Int(FlagDelta, -1, "wait for given number of nodes") -} - -func runWait(cmd *cobra.Command, args []string) error { - c := commands.GetNode() - h := viper.GetInt(FlagHeight) - if h == -1 { - // read from delta - d := viper.GetInt(FlagDelta) - if d == -1 { - return errors.New("Must set --height or --delta") - } - status, err := c.Status() - if err != nil { - return err - } - h = status.LatestBlockHeight + d - } - - // now wait - err := client.WaitForHeight(c, h, nil) - if err != nil { - return err - } - fmt.Printf("Chain now at height %d\n", h) - return nil -} diff --git a/_attic/client/commands/rpc/insecure.go b/_attic/client/commands/rpc/insecure.go deleted file mode 100644 index 26c42e0ab8..0000000000 --- a/_attic/client/commands/rpc/insecure.go +++ /dev/null @@ -1,67 +0,0 @@ -package rpc - -import ( - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client/commands" -) - -var statusCmd = &cobra.Command{ - Use: "status", - Short: "Query the status of the node", - RunE: commands.RequireInit(runStatus), -} - -func runStatus(cmd *cobra.Command, args []string) error { - c := commands.GetNode() - status, err := c.Status() - if err != nil { - return err - } - return printResult(status) -} - -var infoCmd = &cobra.Command{ - Use: "info", - Short: "Query info on the abci app", - RunE: commands.RequireInit(runInfo), -} - -func runInfo(cmd *cobra.Command, args []string) error { - c := commands.GetNode() - info, err := c.ABCIInfo() - if err != nil { - return err - } - return printResult(info) -} - -var genesisCmd = &cobra.Command{ - Use: "genesis", - Short: "Query the genesis of the node", - RunE: commands.RequireInit(runGenesis), -} - -func runGenesis(cmd *cobra.Command, args []string) error { - c := commands.GetNode() - genesis, err := c.Genesis() - if err != nil { - return err - } - return printResult(genesis) -} - -var validatorsCmd = &cobra.Command{ - Use: "validators", - Short: "Query the validators of the node", - RunE: commands.RequireInit(runValidators), -} - -func runValidators(cmd *cobra.Command, args []string) error { - c := commands.GetNode() - validators, err := c.Validators(nil) - if err != nil { - return err - } - return printResult(validators) -} diff --git a/_attic/client/commands/rpc/root.go b/_attic/client/commands/rpc/root.go deleted file mode 100644 index 88003a43da..0000000000 --- a/_attic/client/commands/rpc/root.go +++ /dev/null @@ -1,64 +0,0 @@ -package rpc - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/tendermint/go-wire/data" - rpcclient "github.com/tendermint/tendermint/rpc/client" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/commands" -) - -const ( - FlagDelta = "delta" - FlagHeight = "height" - FlagMax = "max" - FlagMin = "min" -) - -// RootCmd represents the base command when called without any subcommands -var RootCmd = &cobra.Command{ - Use: "rpc", - Short: "Query the tendermint rpc, validating everything with a proof", -} - -// TODO: add support for subscribing to events???? -func init() { - RootCmd.AddCommand( - statusCmd, - infoCmd, - genesisCmd, - validatorsCmd, - blockCmd, - commitCmd, - headersCmd, - waitCmd, - ) -} - -func getSecureNode() (rpcclient.Client, error) { - // First, connect a client - c := commands.GetNode() - cert, err := commands.GetCertifier() - if err != nil { - return nil, err - } - return client.SecureClient(c, cert), nil -} - -// printResult just writes the struct to the console, returns an error if it can't -func printResult(res interface{}) error { - // TODO: handle text mode - // switch viper.Get(cli.OutputFlag) { - // case "text": - // case "json": - json, err := data.ToJSON(res) - if err != nil { - return err - } - fmt.Println(string(json)) - return nil -} diff --git a/_attic/client/commands/rpc/secure.go b/_attic/client/commands/rpc/secure.go deleted file mode 100644 index 86cf64f0c2..0000000000 --- a/_attic/client/commands/rpc/secure.go +++ /dev/null @@ -1,76 +0,0 @@ -package rpc - -import ( - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" -) - -func init() { - blockCmd.Flags().Int(FlagHeight, -1, "block height") - commitCmd.Flags().Int(FlagHeight, -1, "block height") - headersCmd.Flags().Int(FlagMin, -1, "minimum block height") - headersCmd.Flags().Int(FlagMax, -1, "maximum block height") -} - -var blockCmd = &cobra.Command{ - Use: "block", - Short: "Get a validated block at a given height", - RunE: commands.RequireInit(runBlock), -} - -func runBlock(cmd *cobra.Command, args []string) error { - c, err := getSecureNode() - if err != nil { - return err - } - - h := viper.GetInt(FlagHeight) - block, err := c.Block(&h) - if err != nil { - return err - } - return printResult(block) -} - -var commitCmd = &cobra.Command{ - Use: "commit", - Short: "Get the header and commit signature at a given height", - RunE: commands.RequireInit(runCommit), -} - -func runCommit(cmd *cobra.Command, args []string) error { - c, err := getSecureNode() - if err != nil { - return err - } - - h := viper.GetInt(FlagHeight) - commit, err := c.Commit(&h) - if err != nil { - return err - } - return printResult(commit) -} - -var headersCmd = &cobra.Command{ - Use: "headers", - Short: "Get all headers in the given height range", - RunE: commands.RequireInit(runHeaders), -} - -func runHeaders(cmd *cobra.Command, args []string) error { - c, err := getSecureNode() - if err != nil { - return err - } - - min := viper.GetInt(FlagMin) - max := viper.GetInt(FlagMax) - headers, err := c.BlockchainInfo(min, max) - if err != nil { - return err - } - return printResult(headers) -} diff --git a/_attic/client/commands/txs/helpers.go b/_attic/client/commands/txs/helpers.go deleted file mode 100644 index 716c430980..0000000000 --- a/_attic/client/commands/txs/helpers.go +++ /dev/null @@ -1,250 +0,0 @@ -package txs - -import ( - "bufio" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "os" - "strings" - - "github.com/bgentry/speakeasy" - isatty "github.com/mattn/go-isatty" - "github.com/pkg/errors" - "github.com/spf13/viper" - - crypto "github.com/tendermint/go-crypto" - "github.com/tendermint/go-crypto/keys" - wire "github.com/tendermint/go-wire" - "github.com/tendermint/go-wire/data" - - ctypes "github.com/tendermint/tendermint/rpc/core/types" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/client/commands" - keycmd "github.com/cosmos/cosmos-sdk/client/commands/keys" - "github.com/cosmos/cosmos-sdk/modules/auth" -) - -// Validatable represents anything that can be Validated -type Validatable interface { - ValidateBasic() error -} - -// GetSigner returns the pub key that will sign the tx -// returns empty key if no name provided -func GetSigner() crypto.PubKey { - name := viper.GetString(FlagName) - manager := keycmd.GetKeyManager() - info, _ := manager.Get(name) // error -> empty pubkey - return info.PubKey -} - -// GetSignerAct returns the address of the signer of the tx -// (as we still only support single sig) -func GetSignerAct() (res sdk.Actor) { - // this could be much cooler with multisig... - signer := GetSigner() - if !signer.Empty() { - res = auth.SigPerm(signer.Address()) - } - return res -} - -// DoTx is a helper function for the lazy :) -// -// It uses only public functions and goes through the standard sequence of -// wrapping the tx with middleware layers, signing it, either preparing it, -// or posting it and displaying the result. -// -// If you want a non-standard flow, just call the various functions directly. -// eg. if you already set the middleware layers in your code, or want to -// output in another format. -func DoTx(tx interface{}) (err error) { - tx, err = Middleware.Wrap(tx) - if err != nil { - return err - } - - err = SignTx(tx) - if err != nil { - return err - } - - bres, err := PrepareOrPostTx(tx) - if err != nil { - return err - } - if bres == nil { - return nil // successful prep, nothing left to do - } - return OutputTx(bres) // print response of the post - -} - -// SignTx will validate the tx, and signs it if it is wrapping a Signable. -// Modifies tx in place, and returns an error if it should sign but couldn't -func SignTx(tx interface{}) (err error) { - // TODO: validate tx client-side - // err := tx.ValidateBasic() - // if err != nil { - // return err - // } - - // abort early if we don't want to sign - if viper.GetBool(FlagNoSign) { - return nil - } - - name := viper.GetString(FlagName) - manager := keycmd.GetKeyManager() - - if sign, ok := tx.(keys.Signable); ok { - // TODO: allow us not to sign? if so then what use? - if name == "" { - return errors.New("--name is required to sign tx") - } - err = signTx(manager, sign, name) - } - return err -} - -// PrepareOrPostTx checks the flags to decide to prepare the tx for future -// multisig, or to post it to the node. Returns error on any failure. -// If no error and the result is nil, it means it already wrote to file, -// no post, no need to do more. -func PrepareOrPostTx(tx interface{}) (*ctypes.ResultBroadcastTxCommit, error) { - wrote, err := PrepareTx(tx) - // error in prep - if err != nil { - return nil, err - } - // successfully wrote the tx! - if wrote { - return nil, nil - } - // or try to post it - return PostTx(tx) -} - -// PrepareTx checks for FlagPrepare and if set, write the tx as json -// to the specified location for later multi-sig. Returns true if it -// handled the tx (no futher work required), false if it did nothing -// (and we should post the tx) -func PrepareTx(tx interface{}) (bool, error) { - prep := viper.GetString(FlagPrepare) - if prep == "" { - return false, nil - } - - js, err := data.ToJSON(tx) - if err != nil { - return false, err - } - err = writeOutput(prep, js) - if err != nil { - return false, err - } - return true, nil -} - -// PostTx does all work once we construct a proper struct -// it validates the data, signs if needed, transforms to bytes, -// and posts to the node. -func PostTx(tx interface{}) (*ctypes.ResultBroadcastTxCommit, error) { - packet := wire.BinaryBytes(tx) - // post the bytes - node := commands.GetNode() - return node.BroadcastTxCommit(packet) -} - -// OutputTx validates if success and prints the tx result to stdout -func OutputTx(res *ctypes.ResultBroadcastTxCommit) error { - if res.CheckTx.IsErr() { - return errors.Errorf("CheckTx: (%d): %s", res.CheckTx.Code, res.CheckTx.Log) - } - if res.DeliverTx.IsErr() { - return errors.Errorf("DeliverTx: (%d): %s", res.DeliverTx.Code, res.DeliverTx.Log) - } - js, err := json.MarshalIndent(res, "", " ") - if err != nil { - return err - } - fmt.Println(string(js)) - return nil -} - -func signTx(manager keys.Manager, tx keys.Signable, name string) error { - prompt := fmt.Sprintf("Please enter passphrase for %s: ", name) - pass, err := getPassword(prompt) - if err != nil { - return err - } - return manager.Sign(name, pass, tx) -} - -// if we read from non-tty, we just need to init the buffer reader once, -// in case we try to read multiple passwords -var buf *bufio.Reader - -func inputIsTty() bool { - return isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) -} - -func stdinPassword() (string, error) { - if buf == nil { - buf = bufio.NewReader(os.Stdin) - } - pass, err := buf.ReadString('\n') - if err != nil { - return "", err - } - return strings.TrimSpace(pass), nil -} - -func getPassword(prompt string) (pass string, err error) { - if inputIsTty() { - pass, err = speakeasy.Ask(prompt) - } else { - pass, err = stdinPassword() - } - return -} - -func writeOutput(file string, d []byte) error { - var writer io.Writer - if file == "-" { - writer = os.Stdout - } else { - f, err := os.Create(file) - if err != nil { - return errors.WithStack(err) - } - defer f.Close() - writer = f - } - - _, err := writer.Write(d) - // this returns nil if err == nil - return errors.WithStack(err) -} - -func readInput(file string) ([]byte, error) { - var reader io.Reader - // get the input stream - if file == "" || file == "-" { - reader = os.Stdin - } else { - f, err := os.Open(file) - if err != nil { - return nil, errors.WithStack(err) - } - defer f.Close() - reader = f - } - - // and read it all! - data, err := ioutil.ReadAll(reader) - return data, errors.WithStack(err) -} diff --git a/_attic/client/commands/txs/root.go b/_attic/client/commands/txs/root.go deleted file mode 100644 index fca14f2e46..0000000000 --- a/_attic/client/commands/txs/root.go +++ /dev/null @@ -1,61 +0,0 @@ -package txs - -import ( - "encoding/json" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -// nolint -const ( - FlagName = "name" - FlagNoSign = "no-sign" - FlagIn = "in" - FlagPrepare = "prepare" -) - -// RootCmd represents the base command when called without any subcommands -var RootCmd = &cobra.Command{ - Use: "tx", - Short: "Post tx from json input", - RunE: doRawTx, -} - -func init() { - RootCmd.PersistentFlags().String(FlagName, "", "name to sign the tx") - RootCmd.PersistentFlags().Bool(FlagNoSign, false, "don't add a signature") - RootCmd.PersistentFlags().String(FlagPrepare, "", "file to store prepared tx") - RootCmd.Flags().String(FlagIn, "", "file with tx in json format") -} - -func doRawTx(cmd *cobra.Command, args []string) error { - raw, err := readInput(viper.GetString(FlagIn)) - if err != nil { - return err - } - - // parse the input - var tx interface{} - err = json.Unmarshal(raw, &tx) - if err != nil { - return errors.WithStack(err) - } - - // sign it - err = SignTx(tx) - if err != nil { - return err - } - - // otherwise, post it and display response - bres, err := PrepareOrPostTx(tx) - if err != nil { - return err - } - if bres == nil { - return nil // successful prep, nothing left to do - } - return OutputTx(bres) // print response of the post -} diff --git a/_attic/client/commands/txs/wrapper.go b/_attic/client/commands/txs/wrapper.go deleted file mode 100644 index fcfd994004..0000000000 --- a/_attic/client/commands/txs/wrapper.go +++ /dev/null @@ -1,43 +0,0 @@ -package txs - -import ( - "github.com/spf13/pflag" -) - -var ( - // Middleware must be set in main.go to defined the wrappers we should apply - Middleware Wrapper -) - -// Wrapper defines the information needed for each middleware package that -// wraps the data. They should read all configuration out of bounds via viper. -type Wrapper interface { - Wrap(interface{}) (interface{}, error) - Register(*pflag.FlagSet) -} - -// Wrappers combines a list of wrapper middlewares. -// The first one is the inner-most layer, eg. Fee, Nonce, Chain, Auth -type Wrappers []Wrapper - -var _ Wrapper = Wrappers{} - -// Wrap applies the wrappers to the passed in tx in order, -// aborting on the first error -func (ws Wrappers) Wrap(tx interface{}) (interface{}, error) { - var err error - for _, w := range ws { - tx, err = w.Wrap(tx) - if err != nil { - break - } - } - return tx, err -} - -// Register adds any needed flags to the command -func (ws Wrappers) Register(fs *pflag.FlagSet) { - for _, w := range ws { - w.Register(fs) - } -} diff --git a/_attic/client/commands/version.go b/_attic/client/commands/version.go deleted file mode 100644 index 172185fdfb..0000000000 --- a/_attic/client/commands/version.go +++ /dev/null @@ -1,21 +0,0 @@ -package commands - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/version" -) - -// CommitHash should be filled by linker flags -var CommitHash = "" - -// VersionCmd - command to show the application version -var VersionCmd = &cobra.Command{ - Use: "version", - Short: "Show version info", - Run: func(cmd *cobra.Command, args []string) { - fmt.Printf("%s-%s\n", version.Version, CommitHash) - }, -} diff --git a/_attic/client/common.go b/_attic/client/common.go deleted file mode 100644 index 5e79b8afbd..0000000000 --- a/_attic/client/common.go +++ /dev/null @@ -1,57 +0,0 @@ -package client - -import ( - "errors" - - "github.com/tendermint/light-client/certifiers" - certclient "github.com/tendermint/light-client/certifiers/client" - certerr "github.com/tendermint/light-client/certifiers/errors" - "github.com/tendermint/light-client/certifiers/files" - - "github.com/tendermint/light-client/proofs" - - rpcclient "github.com/tendermint/tendermint/rpc/client" -) - -// GetNode prepares a simple rpc.Client for the given endpoint -func GetNode(url string) rpcclient.Client { - return rpcclient.NewHTTP(url, "/websocket") -} - -// GetRPCProvider retuns a certifier compatible data source using -// tendermint RPC -func GetRPCProvider(url string) certifiers.Provider { - return certclient.NewHTTPProvider(url) -} - -// GetLocalProvider returns a reference to a file store of headers -// wrapped with an in-memory cache -func GetLocalProvider(dir string) certifiers.Provider { - return certifiers.NewCacheProvider( - certifiers.NewMemStoreProvider(), - files.NewProvider(dir), - ) -} - -// GetCertifier initializes an inquiring certifier given a fixed chainID -// and a local source of trusted data with at least one seed -func GetCertifier(chainID string, trust certifiers.Provider, - source certifiers.Provider) (*certifiers.Inquiring, error) { - - // this gets the most recent verified commit - fc, err := trust.LatestCommit() - if certerr.IsCommitNotFoundErr(err) { - return nil, errors.New("Please run init first to establish a root of trust") - } - if err != nil { - return nil, err - } - cert := certifiers.NewInquiring(chainID, fc, trust, source) - return cert, nil -} - -// SecureClient uses a given certifier to wrap an connection to an untrusted -// host and return a cryptographically secure rpc client. -func SecureClient(c rpcclient.Client, cert *certifiers.Inquiring) rpcclient.Client { - return proofs.Wrap(c, cert) -} diff --git a/_attic/client/errors.go b/_attic/client/errors.go deleted file mode 100644 index 9f69f5e129..0000000000 --- a/_attic/client/errors.go +++ /dev/null @@ -1,22 +0,0 @@ -package client - -import ( - "fmt" - - "github.com/pkg/errors" -) - -//-------------------------------------------- - -var errNoData = fmt.Errorf("No data returned for query") - -// IsNoDataErr checks whether an error is due to a query returning empty data -func IsNoDataErr(err error) bool { - return errors.Cause(err) == errNoData -} - -func ErrNoData() error { - return errors.WithStack(errNoData) -} - -//-------------------------------------------- diff --git a/_attic/client/errors_test.go b/_attic/client/errors_test.go deleted file mode 100644 index c561c35b7a..0000000000 --- a/_attic/client/errors_test.go +++ /dev/null @@ -1,18 +0,0 @@ -package client - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestErrorNoData(t *testing.T) { - e1 := ErrNoData() - e1.Error() - assert.True(t, IsNoDataErr(e1)) - - e2 := errors.New("foobar") - assert.False(t, IsNoDataErr(e2)) - assert.False(t, IsNoDataErr(nil)) -} diff --git a/_attic/client/keys.go b/_attic/client/keys.go deleted file mode 100644 index 4c98c18425..0000000000 --- a/_attic/client/keys.go +++ /dev/null @@ -1,30 +0,0 @@ -package client - -/* - -import ( - "path/filepath" - - "github.com/tendermint/go-crypto/keys" - "github.com/tendermint/go-crypto/keys/cryptostore" - "github.com/tendermint/go-crypto/keys/storage/filestorage" -) - -// KeySubdir is the directory name under root where we store the keys -const KeySubdir = "keys" - -// GetKeyManager initializes a key manager based on the configuration -func GetKeyManager(rootDir string) keys.Manager { - keyDir := filepath.Join(rootDir, KeySubdir) - // TODO: smarter loading??? with language and fallback? - codec := keys.MustLoadCodec("english") - - // and construct the key manager - manager := cryptostore.New( - cryptostore.SecretBox, - filestorage.New(keyDir), - codec, - ) - return manager -} -*/ diff --git a/_attic/client/proxy.go b/_attic/client/proxy.go deleted file mode 100644 index 6518dfadbc..0000000000 --- a/_attic/client/proxy.go +++ /dev/null @@ -1,68 +0,0 @@ -package client - -import ( - "net/http" - - "github.com/tendermint/tmlibs/log" - - rpcclient "github.com/tendermint/tendermint/rpc/client" - "github.com/tendermint/tendermint/rpc/core" - rpc "github.com/tendermint/tendermint/rpc/lib/server" -) - -const ( - wsEndpoint = "/websocket" -) - -// StartProxy will start the websocket manager on the client, -// set up the rpc routes to proxy via the given client, -// and start up an http/rpc server on the location given by bind (eg. :1234) -func StartProxy(c rpcclient.Client, bind string, logger log.Logger) error { - c.Start() - r := RPCRoutes(c) - - // build the handler... - mux := http.NewServeMux() - rpc.RegisterRPCFuncs(mux, r, logger) - wm := rpc.NewWebsocketManager(r, c) - wm.SetLogger(logger) - core.SetLogger(logger) - mux.HandleFunc(wsEndpoint, wm.WebsocketHandler) - - _, err := rpc.StartHTTPServer(bind, mux, logger) - - return err -} - -// RPCRoutes just routes everything to the given client, as if it were -// a tendermint fullnode. -// -// if we want security, the client must implement it as a secure client -func RPCRoutes(c rpcclient.Client) map[string]*rpc.RPCFunc { - - return map[string]*rpc.RPCFunc{ - // Subscribe/unsubscribe are reserved for websocket events. - // We can just use the core tendermint impl, which uses the - // EventSwitch we registered in NewWebsocketManager above - "subscribe": rpc.NewWSRPCFunc(core.Subscribe, "event"), - "unsubscribe": rpc.NewWSRPCFunc(core.Unsubscribe, "event"), - - // info API - "status": rpc.NewRPCFunc(c.Status, ""), - "blockchain": rpc.NewRPCFunc(c.BlockchainInfo, "minHeight,maxHeight"), - "genesis": rpc.NewRPCFunc(c.Genesis, ""), - "block": rpc.NewRPCFunc(c.Block, "height"), - "commit": rpc.NewRPCFunc(c.Commit, "height"), - "tx": rpc.NewRPCFunc(c.Tx, "hash,prove"), - "validators": rpc.NewRPCFunc(c.Validators, ""), - - // broadcast API - "broadcast_tx_commit": rpc.NewRPCFunc(c.BroadcastTxCommit, "tx"), - "broadcast_tx_sync": rpc.NewRPCFunc(c.BroadcastTxSync, "tx"), - "broadcast_tx_async": rpc.NewRPCFunc(c.BroadcastTxAsync, "tx"), - - // abci API - "abci_query": rpc.NewRPCFunc(c.ABCIQuery, "path,data,prove"), - "abci_info": rpc.NewRPCFunc(c.ABCIInfo, ""), - } -} diff --git a/_attic/client/query.go b/_attic/client/query.go deleted file mode 100644 index 25b3823d6f..0000000000 --- a/_attic/client/query.go +++ /dev/null @@ -1,116 +0,0 @@ -package client - -import ( - "github.com/pkg/errors" - - "github.com/tendermint/go-wire/data" - "github.com/tendermint/iavl" - "github.com/tendermint/light-client/certifiers" - certerr "github.com/tendermint/light-client/certifiers/errors" - - "github.com/tendermint/tendermint/rpc/client" -) - -// GetWithProof will query the key on the given node, and verify it has -// a valid proof, as defined by the certifier. -// -// If there is any error in checking, returns an error. -// If val is non-empty, proof should be KeyExistsProof -// If val is empty, proof should be KeyMissingProof -func GetWithProof(key []byte, reqHeight int, node client.Client, - cert certifiers.Certifier) ( - val data.Bytes, height uint64, proof iavl.KeyProof, err error) { - - if reqHeight < 0 { - err = errors.Errorf("Height cannot be negative") - return - } - - resp, err := node.ABCIQueryWithOptions("/key", key, - client.ABCIQueryOptions{Height: uint64(reqHeight)}) - if err != nil { - return - } - - // make sure the proof is the proper height - if !resp.Code.IsOK() { - err = errors.Errorf("Query error %d: %s", resp.Code, resp.Code.String()) - return - } - if len(resp.Key) == 0 || len(resp.Proof) == 0 { - err = ErrNoData() - return - } - if resp.Height == 0 { - err = errors.New("Height returned is zero") - return - } - - // AppHash for height H is in header H+1 - var commit *certifiers.Commit - commit, err = GetCertifiedCommit(int(resp.Height+1), node, cert) - if err != nil { - return - } - - if len(resp.Value) > 0 { - // The key was found, construct a proof of existence. - var eproof *iavl.KeyExistsProof - eproof, err = iavl.ReadKeyExistsProof(resp.Proof) - if err != nil { - err = errors.Wrap(err, "Error reading proof") - return - } - - // Validate the proof against the certified header to ensure data integrity. - err = eproof.Verify(resp.Key, resp.Value, commit.Header.AppHash) - if err != nil { - err = errors.Wrap(err, "Couldn't verify proof") - return - } - val = data.Bytes(resp.Value) - proof = eproof - } else { - // The key wasn't found, construct a proof of non-existence. - var aproof *iavl.KeyAbsentProof - aproof, err = iavl.ReadKeyAbsentProof(resp.Proof) - if err != nil { - err = errors.Wrap(err, "Error reading proof") - return - } - // Validate the proof against the certified header to ensure data integrity. - err = aproof.Verify(resp.Key, nil, commit.Header.AppHash) - if err != nil { - err = errors.Wrap(err, "Couldn't verify proof") - return - } - err = ErrNoData() - proof = aproof - } - - height = resp.Height - return -} - -// GetCertifiedCommit gets the signed header for a given height -// and certifies it. Returns error if unable to get a proven header. -func GetCertifiedCommit(h int, node client.Client, - cert certifiers.Certifier) (empty *certifiers.Commit, err error) { - - // FIXME: cannot use cert.GetByHeight for now, as it also requires - // Validators and will fail on querying tendermint for non-current height. - // When this is supported, we should use it instead... - client.WaitForHeight(node, h, nil) - cresp, err := node.Commit(&h) - if err != nil { - return - } - commit := certifiers.CommitFromResult(cresp) - - // validate downloaded checkpoint with our request and trust store. - if commit.Height() != h { - return empty, certerr.ErrHeightMismatch(h, commit.Height()) - } - err = cert.Certify(commit) - return commit, nil -} diff --git a/_attic/client/query_test.go b/_attic/client/query_test.go deleted file mode 100644 index 0320176eb3..0000000000 --- a/_attic/client/query_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package client - -import ( - "fmt" - "os" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/tendermint/go-wire" - "github.com/tendermint/light-client/certifiers" - certclient "github.com/tendermint/light-client/certifiers/client" - "github.com/tendermint/tmlibs/log" - - nm "github.com/tendermint/tendermint/node" - "github.com/tendermint/tendermint/rpc/client" - rpctest "github.com/tendermint/tendermint/rpc/test" - "github.com/tendermint/tendermint/types" - - sdkapp "github.com/cosmos/cosmos-sdk/app" - "github.com/cosmos/cosmos-sdk/modules/eyes" -) - -var node *nm.Node - -func TestMain(m *testing.M) { - logger := log.TestingLogger() - store, err := sdkapp.MockStoreApp("query", logger) - if err != nil { - panic(err) - } - app := sdkapp.NewBaseApp(store, eyes.NewHandler(), nil) - - node = rpctest.StartTendermint(app) - - code := m.Run() - - node.Stop() - node.Wait() - os.Exit(code) -} - -func TestAppProofs(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - cl := client.NewLocal(node) - client.WaitForHeight(cl, 1, nil) - - k := []byte("my-key") - v := []byte("my-value") - - tx := eyes.SetTx{Key: k, Value: v}.Wrap() - btx := wire.BinaryBytes(tx) - br, err := cl.BroadcastTxCommit(btx) - require.NoError(err, "%+v", err) - require.EqualValues(0, br.CheckTx.Code, "%#v", br.CheckTx) - require.EqualValues(0, br.DeliverTx.Code) - brh := br.Height - - // This sets up our trust on the node based on some past point. - source := certclient.NewProvider(cl) - seed, err := source.GetByHeight(br.Height - 2) - require.NoError(err, "%+v", err) - cert := certifiers.NewStatic("my-chain", seed.Validators) - - client.WaitForHeight(cl, 3, nil) - latest, err := source.LatestCommit() - require.NoError(err, "%+v", err) - rootHash := latest.Header.AppHash - - // Test existing key. - var data eyes.Data - - // verify a query before the tx block has no data (and valid non-exist proof) - bs, height, proof, err := GetWithProof(k, brh-1, cl, cert) - require.NotNil(err) - require.True(IsNoDataErr(err)) - require.Nil(bs) - - // but given that block it is good - bs, height, proof, err = GetWithProof(k, brh, cl, cert) - require.NoError(err, "%+v", err) - require.NotNil(proof) - require.True(height >= uint64(latest.Header.Height)) - - // Alexis there is a bug here, somehow the above code gives us rootHash = nil - // and proof.Verify doesn't care, while proofNotExists.Verify fails. - // I am hacking this in to make it pass, but please investigate further. - rootHash = proof.Root() - - err = wire.ReadBinaryBytes(bs, &data) - require.NoError(err, "%+v", err) - assert.EqualValues(v, data.Value) - err = proof.Verify(k, bs, rootHash) - assert.NoError(err, "%+v", err) - - // Test non-existing key. - missing := []byte("my-missing-key") - bs, _, proof, err = GetWithProof(missing, 0, cl, cert) - require.True(IsNoDataErr(err)) - require.Nil(bs) - require.NotNil(proof) - err = proof.Verify(missing, nil, rootHash) - assert.NoError(err, "%+v", err) - err = proof.Verify(k, nil, rootHash) - assert.Error(err) -} - -func TestTxProofs(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - cl := client.NewLocal(node) - client.WaitForHeight(cl, 1, nil) - - tx := eyes.NewSetTx([]byte("key-a"), []byte("value-a")) - - btx := types.Tx(wire.BinaryBytes(tx)) - br, err := cl.BroadcastTxCommit(btx) - require.NoError(err, "%+v", err) - require.EqualValues(0, br.CheckTx.Code, "%#v", br.CheckTx) - require.EqualValues(0, br.DeliverTx.Code) - fmt.Printf("tx height: %d\n", br.Height) - - source := certclient.NewProvider(cl) - seed, err := source.GetByHeight(br.Height - 2) - require.NoError(err, "%+v", err) - cert := certifiers.NewStatic("my-chain", seed.Validators) - - // First let's make sure a bogus transaction hash returns a valid non-existence proof. - key := types.Tx([]byte("bogus")).Hash() - res, err := cl.Tx(key, true) - require.NotNil(err) - require.Contains(err.Error(), "not found") - - // Now let's check with the real tx hash. - key = btx.Hash() - res, err = cl.Tx(key, true) - require.NoError(err, "%+v", err) - require.NotNil(res) - err = res.Proof.Validate(key) - assert.NoError(err, "%+v", err) - - commit, err := GetCertifiedCommit(int(br.Height), cl, cert) - require.Nil(err, "%+v", err) - require.Equal(res.Proof.RootHash, commit.Header.DataHash) - -} diff --git a/_attic/client/rest/README.md b/_attic/client/rest/README.md deleted file mode 100644 index 8b8e68f22a..0000000000 --- a/_attic/client/rest/README.md +++ /dev/null @@ -1,25 +0,0 @@ -## basecoin-server - -### Proxy server -This package exposes access to key management i.e -- creating -- listing -- updating -- deleting - -The HTTP handlers can be embedded in a larger server that -does things like signing transactions and posting them to a -Tendermint chain (which requires domain-knowledge of the transaction -types and is out of scope of this generic app). - -### Key Management -We expose a couple of methods for safely managing your keychain. -If you are embedding this in a larger server, you will typically -want to mount all these paths /keys. - -HTTP Method | Route | Description ----|---|--- -POST|/|Requires a name and passphrase to create a brand new key -GET|/|Retrieves the list of all available key names, along with their public key and address -GET|/{name} | Updates the passphrase for the given key. It requires you to correctly provide the current passphrase, as well as a new one. -DELETE|/{name} | Permanently delete this private key. It requires you to correctly provide the current passphrase. diff --git a/_attic/client/rest/handlers.go b/_attic/client/rest/handlers.go deleted file mode 100644 index 330e82e2c9..0000000000 --- a/_attic/client/rest/handlers.go +++ /dev/null @@ -1,192 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/gorilla/mux" - "github.com/pkg/errors" - - keys "github.com/tendermint/go-crypto/keys" - "github.com/tendermint/tmlibs/common" - - sdk "github.com/cosmos/cosmos-sdk" - keycmd "github.com/cosmos/cosmos-sdk/client/commands/keys" -) - -type Keys struct { - algo string - manager keys.Manager -} - -func DefaultKeysManager() keys.Manager { - return keycmd.GetKeyManager() -} - -func NewDefaultKeysManager(algo string) *Keys { - return New(DefaultKeysManager(), algo) -} - -func New(manager keys.Manager, algo string) *Keys { - return &Keys{ - algo: algo, - manager: manager, - } -} - -func (k *Keys) GenerateKey(w http.ResponseWriter, r *http.Request) { - ckReq := &CreateKeyRequest{ - Algo: k.algo, - } - if err := common.ParseRequestAndValidateJSON(r, ckReq); err != nil { - common.WriteError(w, err) - return - } - - key, seed, err := k.manager.Create(ckReq.Name, ckReq.Passphrase, ckReq.Algo) - if err != nil { - common.WriteError(w, err) - return - } - - res := &CreateKeyResponse{Key: key, Seed: seed} - common.WriteSuccess(w, res) -} - -func (k *Keys) GetKey(w http.ResponseWriter, r *http.Request) { - query := mux.Vars(r) - name := query["name"] - key, err := k.manager.Get(name) - if err != nil { - common.WriteError(w, err) - return - } - common.WriteSuccess(w, &key) -} - -func (k *Keys) ListKeys(w http.ResponseWriter, r *http.Request) { - keys, err := k.manager.List() - if err != nil { - common.WriteError(w, err) - return - } - common.WriteSuccess(w, keys) -} - -var ( - errNonMatchingPathAndJSONKeyNames = errors.New("path and json key names don't match") -) - -func (k *Keys) UpdateKey(w http.ResponseWriter, r *http.Request) { - uReq := new(UpdateKeyRequest) - if err := common.ParseRequestAndValidateJSON(r, uReq); err != nil { - common.WriteError(w, err) - return - } - - query := mux.Vars(r) - name := query["name"] - if name != uReq.Name { - common.WriteError(w, errNonMatchingPathAndJSONKeyNames) - return - } - - if err := k.manager.Update(uReq.Name, uReq.OldPass, uReq.NewPass); err != nil { - common.WriteError(w, err) - return - } - - key, err := k.manager.Get(uReq.Name) - if err != nil { - common.WriteError(w, err) - return - } - common.WriteSuccess(w, &key) -} - -func (k *Keys) DeleteKey(w http.ResponseWriter, r *http.Request) { - dReq := new(DeleteKeyRequest) - if err := common.ParseRequestAndValidateJSON(r, dReq); err != nil { - common.WriteError(w, err) - return - } - - query := mux.Vars(r) - name := query["name"] - if name != dReq.Name { - common.WriteError(w, errNonMatchingPathAndJSONKeyNames) - return - } - - if err := k.manager.Delete(dReq.Name, dReq.Passphrase); err != nil { - common.WriteError(w, err) - return - } - - resp := &common.ErrorResponse{Success: true} - common.WriteSuccess(w, resp) -} - -func doPostTx(w http.ResponseWriter, r *http.Request) { - tx := new(sdk.Tx) - if err := common.ParseRequestAndValidateJSON(r, tx); err != nil { - common.WriteError(w, err) - return - } - commit, err := PostTx(*tx) - if err != nil { - common.WriteError(w, err) - return - } - - common.WriteSuccess(w, commit) -} - -func doSign(w http.ResponseWriter, r *http.Request) { - sr := new(SignRequest) - if err := common.ParseRequestAndValidateJSON(r, sr); err != nil { - common.WriteError(w, err) - return - } - - tx := sr.Tx - if err := SignTx(sr.Name, sr.Password, tx); err != nil { - common.WriteError(w, err) - return - } - common.WriteSuccess(w, tx) -} - -// mux.Router registrars - -// RegisterPostTx is a mux.Router handler that exposes POST -// method access to post a transaction to the blockchain. -func RegisterPostTx(r *mux.Router) error { - r.HandleFunc("/tx", doPostTx).Methods("POST") - return nil -} - -// RegisterAllCRUD is a convenience method to register all -// CRUD for keys to allow access by methods and routes: -// POST: /keys -// GET: /keys -// GET: /keys/{name} -// POST, PUT: /keys/{name} -// DELETE: /keys/{name} -func (k *Keys) RegisterAllCRUD(r *mux.Router) error { - r.HandleFunc("/keys", k.GenerateKey).Methods("POST") - r.HandleFunc("/keys", k.ListKeys).Methods("GET") - r.HandleFunc("/keys/{name}", k.GetKey).Methods("GET") - r.HandleFunc("/keys/{name}", k.UpdateKey).Methods("POST", "PUT") - r.HandleFunc("/keys/{name}", k.DeleteKey).Methods("DELETE") - - return nil -} - -// RegisterSignTx is a mux.Router handler that -// exposes POST method access to sign a transaction. -func RegisterSignTx(r *mux.Router) error { - r.HandleFunc("/sign", doSign).Methods("POST") - return nil -} - -// End of mux.Router registrars diff --git a/_attic/client/rest/helpers.go b/_attic/client/rest/helpers.go deleted file mode 100644 index 5085135e84..0000000000 --- a/_attic/client/rest/helpers.go +++ /dev/null @@ -1,29 +0,0 @@ -package rest - -import ( - "github.com/tendermint/go-crypto/keys" - wire "github.com/tendermint/go-wire" - - ctypes "github.com/tendermint/tendermint/rpc/core/types" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/client/commands" - keycmd "github.com/cosmos/cosmos-sdk/client/commands/keys" -) - -// PostTx is same as a tx -func PostTx(tx sdk.Tx) (*ctypes.ResultBroadcastTxCommit, error) { - packet := wire.BinaryBytes(tx) - // post the bytes - node := commands.GetNode() - return node.BroadcastTxCommit(packet) -} - -// SignTx will modify the tx in-place, adding a signature if possible -func SignTx(name, pass string, tx sdk.Tx) error { - if sign, ok := tx.Unwrap().(keys.Signable); ok { - manager := keycmd.GetKeyManager() - return manager.Sign(name, pass, sign) - } - return nil -} diff --git a/_attic/client/rest/types.go b/_attic/client/rest/types.go deleted file mode 100644 index 3ae0252ca6..0000000000 --- a/_attic/client/rest/types.go +++ /dev/null @@ -1,52 +0,0 @@ -package rest - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/modules/coin" - "github.com/tendermint/go-crypto/keys" -) - -type CreateKeyRequest struct { - Name string `json:"name,omitempty" validate:"required,min=3,printascii"` - Passphrase string `json:"password,omitempty" validate:"required,min=10"` - - // Algo is the requested algorithm to create the key - Algo string `json:"algo,omitempty"` -} - -type DeleteKeyRequest struct { - Name string `json:"name,omitempty" validate:"required,min=3,printascii"` - Passphrase string `json:"password,omitempty" validate:"required,min=10"` -} - -type UpdateKeyRequest struct { - Name string `json:"name,omitempty" validate:"required,min=3,printascii"` - OldPass string `json:"password,omitempty" validate:"required,min=10"` - NewPass string `json:"new_passphrase,omitempty" validate:"required,min=10"` -} - -type SignRequest struct { - Name string `json:"name,omitempty" validate:"required,min=3,printascii"` - Password string `json:"password,omitempty" validate:"required,min=10"` - - Tx sdk.Tx `json:"tx" validate:"required"` -} - -type CreateKeyResponse struct { - Key keys.Info `json:"key,omitempty"` - Seed string `json:"seed_phrase,omitempty"` -} - -// SendInput is the request to send an amount from one actor to another. -// Note: Not using the `validator:""` tags here because SendInput has -// many fields so it would be nice to figure out all the invalid -// inputs and report them back to the caller, in one shot. -type SendInput struct { - Fees *coin.Coin `json:"fees"` - Multi bool `json:"multi,omitempty"` - Sequence uint32 `json:"sequence"` - - To *sdk.Actor `json:"to"` - From *sdk.Actor `json:"from"` - Amount coin.Coins `json:"amount"` -} diff --git a/_attic/coins/bench_test.go b/_attic/coins/bench_test.go deleted file mode 100644 index 4fc5b8e8fd..0000000000 --- a/_attic/coins/bench_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package coin - -import ( - "testing" - - cmn "github.com/tendermint/tmlibs/common" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -func makeHandler() stack.Dispatchable { - return NewHandler() -} - -func makeSimpleTx(from, to sdk.Actor, amount Coins) sdk.Tx { - in := []TxInput{{Address: from, Coins: amount}} - out := []TxOutput{{Address: to, Coins: amount}} - return NewSendTx(in, out) -} - -func BenchmarkSimpleTransfer(b *testing.B) { - h := makeHandler() - store := state.NewMemKVStore() - logger := log.NewNopLogger() - - // set the initial account - acct := NewAccountWithKey(Coins{{"mycoin", 1234567890}}) - h.InitState(logger, store, NameCoin, "account", acct.MakeOption(), nil) - sender := acct.Actor() - receiver := sdk.Actor{App: "foo", Address: cmn.RandBytes(20)} - - // now, loop... - for i := 1; i <= b.N; i++ { - ctx := stack.MockContext("foo", 100).WithPermissions(sender) - tx := makeSimpleTx(sender, receiver, Coins{{"mycoin", 2}}) - _, err := h.DeliverTx(ctx, store, tx, nil) - // never should error - if err != nil { - panic(err) - } - } - -} diff --git a/_attic/coins/commands/query.go b/_attic/coins/commands/query.go deleted file mode 100644 index 25c8b55705..0000000000 --- a/_attic/coins/commands/query.go +++ /dev/null @@ -1,44 +0,0 @@ -package commands - -import ( - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/query" - "github.com/cosmos/cosmos-sdk/x/coin" - "github.com/cosmos/cosmos-sdk/stack" -) - -// AccountQueryCmd - command to query an account -var AccountQueryCmd = &cobra.Command{ - Use: "account [address]", - Short: "Get details of an account, with proof", - RunE: commands.RequireInit(accountQueryCmd), -} - -func accountQueryCmd(cmd *cobra.Command, args []string) error { - addr, err := commands.GetOneArg(args, "address") - if err != nil { - return err - } - act, err := commands.ParseActor(addr) - if err != nil { - return err - } - act = coin.ChainAddr(act) - key := stack.PrefixedKey(coin.NameCoin, act.Bytes()) - - acc := coin.Account{} - prove := !viper.GetBool(commands.FlagTrustNode) - height, err := query.GetParsed(key, &acc, query.GetHeight(), prove) - if client.IsNoDataErr(err) { - return errors.Errorf("Account bytes are empty for address %s ", addr) - } else if err != nil { - return err - } - - return query.OutputProof(acc, height) -} diff --git a/_attic/coins/commands/tx.go b/_attic/coins/commands/tx.go deleted file mode 100644 index 452bf89eba..0000000000 --- a/_attic/coins/commands/tx.go +++ /dev/null @@ -1,105 +0,0 @@ -package commands - -import ( - "github.com/spf13/cobra" - "github.com/spf13/viper" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/client/commands" - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - "github.com/cosmos/cosmos-sdk/x/coin" -) - -// SendTxCmd is CLI command to send tokens between basecoin accounts -var SendTxCmd = &cobra.Command{ - Use: "send", - Short: "send tokens from one account to another", - RunE: commands.RequireInit(sendTxCmd), -} - -// CreditTxCmd is CLI command to issue credit to one account -var CreditTxCmd = &cobra.Command{ - Use: "credit", - Short: "issue credit to one account", - RunE: commands.RequireInit(creditTxCmd), -} - -//nolint -const ( - FlagTo = "to" - FlagAmount = "amount" - FlagFrom = "from" -) - -func init() { - flags := SendTxCmd.Flags() - flags.String(FlagTo, "", "Destination address for the bits") - flags.String(FlagAmount, "", "Coins to send in the format ,...") - flags.String(FlagFrom, "", "Address sending coins, if not first signer") - - fs2 := CreditTxCmd.Flags() - fs2.String(FlagTo, "", "Destination address for the bits") - fs2.String(FlagAmount, "", "Coins to send in the format ,...") -} - -func sendTxCmd(cmd *cobra.Command, args []string) error { - tx, err := readSendTxFlags() - if err != nil { - return err - } - return txcmd.DoTx(tx) -} - -func readSendTxFlags() (tx sdk.Tx, err error) { - // parse to address - toAddr, err := commands.ParseActor(viper.GetString(FlagTo)) - if err != nil { - return tx, err - } - - fromAddr, err := readFromAddr() - if err != nil { - return tx, err - } - - amountCoins, err := coin.ParseCoins(viper.GetString(FlagAmount)) - if err != nil { - return tx, err - } - - // craft the inputs and outputs - tx = coin.NewSendOneTx(fromAddr, toAddr, amountCoins) - return -} - -func creditTxCmd(cmd *cobra.Command, args []string) error { - tx, err := readCreditTxFlags() - if err != nil { - return err - } - return txcmd.DoTx(tx) -} - -func readCreditTxFlags() (tx sdk.Tx, err error) { - // parse to address - toAddr, err := commands.ParseActor(viper.GetString(FlagTo)) - if err != nil { - return tx, err - } - - amount, err := coin.ParseCoins(viper.GetString(FlagAmount)) - if err != nil { - return tx, err - } - - tx = coin.CreditTx{Debitor: toAddr, Credit: amount}.Wrap() - return -} - -func readFromAddr() (sdk.Actor, error) { - from := viper.GetString(FlagFrom) - if from == "" { - return txcmd.GetSignerAct(), nil - } - return commands.ParseActor(from) -} diff --git a/_attic/coins/genesis.go b/_attic/coins/genesis.go deleted file mode 100644 index cc0163fcf0..0000000000 --- a/_attic/coins/genesis.go +++ /dev/null @@ -1,48 +0,0 @@ -package coin - -import ( - "bytes" - - "github.com/pkg/errors" - - "github.com/cosmos/cosmos-sdk/types" - crypto "github.com/tendermint/go-crypto" - "github.com/tendermint/go-wire/data" -) - -/**** code to parse accounts from genesis docs ***/ - -// GenesisAccount - genesis account parameters -type GenesisAccount struct { - Address data.Bytes `json:"address"` - // this from types.Account (don't know how to embed this properly) - PubKey crypto.PubKey `json:"pub_key"` // May be nil, if not known. - Balance types.Coins `json:"coins"` -} - -// ToAccount - GenesisAccount struct to a basecoin Account -func (g GenesisAccount) ToAccount() Account { - return Account{ - Coins: g.Balance, - } -} - -// GetAddr - Get the address of the genesis account -func (g GenesisAccount) GetAddr() ([]byte, error) { - noAddr, noPk := len(g.Address) == 0, g.PubKey.Empty() - - if noAddr { - if noPk { - return nil, errors.New("No address given") - } - return g.PubKey.Address(), nil - } - if noPk { // but is addr... - return g.Address, nil - } - // now, we have both, make sure they check out - if bytes.Equal(g.Address, g.PubKey.Address()) { - return g.Address, nil - } - return nil, errors.New("Address and pubkey don't match") -} diff --git a/_attic/coins/handler.go b/_attic/coins/handler.go deleted file mode 100644 index a51cb4320a..0000000000 --- a/_attic/coins/handler.go +++ /dev/null @@ -1,251 +0,0 @@ -package coin - -import ( - "github.com/tendermint/go-wire/data" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/store" - "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth" - // "github.com/cosmos/cosmos-sdk/x/ibc" - // "github.com/cosmos/cosmos-sdk/stack" -) - -const ( - //NameCoin - name space of the coin module - NameCoin = "coin" - // CostSend is GasAllocation per input/output - CostSend = uint64(10) - // CostCredit is GasAllocation of a credit allocation - CostCredit = uint64(20) -) - -// Handler includes an accountant -type Handler struct { - // stack.PassInitValidate -} - -// var _ stack.Dispatchable = Handler{} - -// NewHandler - new accountant handler for the coin module -func NewHandler() Handler { - return Handler{} -} - -// Name - return name space -func (Handler) Name() string { - return NameCoin -} - -// AssertDispatcher - to fulfill Dispatchable interface -func (Handler) AssertDispatcher() {} - -// CheckTx checks if there is enough money in the account -func (h Handler) CheckTx(ctx types.Context, store store.MultiStore, - tx types.Tx, _ sdk.Checker) (res sdk.CheckResult, err error) { - - err = tx.ValidateBasic() - if err != nil { - return res, err - } - - switch t := tx.Unwrap().(type) { - case SendTx: - // price based on inputs and outputs - used := uint64(len(t.Inputs) + len(t.Outputs)) - return sdk.NewCheck(used*CostSend, ""), h.checkSendTx(ctx, store, t) - case CreditTx: - // default price of 20, constant work - return sdk.NewCheck(CostCredit, ""), h.creditTx(ctx, store, t) - } - return res, errors.ErrUnknownTxType(tx.Unwrap()) -} - -// DeliverTx moves the money -func (h Handler) DeliverTx(ctx types.Context, store store.MultiStore, - tx types.Tx, cb sdk.Deliver) (res sdk.DeliverResult, err error) { - - err = tx.ValidateBasic() - if err != nil { - return res, err - } - - switch t := tx.Unwrap().(type) { - case SendTx: - return res, h.sendTx(ctx, store, t, cb) - case CreditTx: - return res, h.creditTx(ctx, store, t) - } - return res, errors.ErrUnknownTxType(tx.Unwrap()) -} - -// InitState - sets the genesis account balance -func (h Handler) InitState(l log.Logger, store store.MultiStore, - module, key, value string, cb sdk.InitStater) (log string, err error) { - if module != NameCoin { - return "", errors.ErrUnknownModule(module) - } - switch key { - case "account": - return setAccount(store, value) - case "issuer": - return setIssuer(store, value) - } - return "", errors.ErrUnknownKey(key) -} - -func (h Handler) sendTx(ctx types.Context, store store.MultiStore, - send SendTx, cb sdk.Deliver) error { - - err := checkTx(ctx, send) - if err != nil { - return err - } - - // deduct from all input accounts - senders := sdk.Actors{} - for _, in := range send.Inputs { - _, err = ChangeCoins(store, in.Address, in.Coins.Negative()) - if err != nil { - return err - } - senders = append(senders, in.Address) - } - - // add to all output accounts - for _, out := range send.Outputs { - // TODO: cleaner way, this makes sure we don't consider - // incoming ibc packets with our chain to be remote packets - if out.Address.ChainID == ctx.ChainID() { - out.Address.ChainID = "" - } - - _, err = ChangeCoins(store, out.Address, out.Coins) - if err != nil { - return err - } - // now send ibc packet if needed... - if out.Address.ChainID != "" { - // FIXME: if there are many outputs, we need to adjust inputs - // so the amounts in and out match. how? - inputs := make([]TxInput, len(send.Inputs)) - for i := range send.Inputs { - inputs[i] = send.Inputs[i] - inputs[i].Address = inputs[i].Address.WithChain(ctx.ChainID()) - } - - outTx := NewSendTx(inputs, []TxOutput{out}) - _ = outTx - /* TODO - packet := ibc.CreatePacketTx{ - DestChain: out.Address.ChainID, - Permissions: senders, - Tx: outTx, - } - ibcCtx := ctx.WithPermissions(ibc.AllowIBC(NameCoin)) - _, err := cb.DeliverTx(ibcCtx, store, packet.Wrap()) - if err != nil { - return err - } - */ - } - } - - // a-ok! - return nil -} - -func (h Handler) creditTx(ctx types.Context, store store.MultiStore, - credit CreditTx) error { - - // first check permissions!! - info, err := loadHandlerInfo(store) - if err != nil { - return err - } - if info.Issuer.Empty() || !ctx.HasPermission(info.Issuer) { - return errors.ErrUnauthorized() - } - - // load up the account - addr := ChainAddr(credit.Debitor) - acct, err := GetAccount(store, addr) - if err != nil { - return err - } - - // make and check changes - acct.Coins = acct.Coins.Plus(credit.Credit) - if !acct.Coins.IsNonnegative() { - return ErrInsufficientFunds() - } - acct.Credit = acct.Credit.Plus(credit.Credit) - if !acct.Credit.IsNonnegative() { - return ErrInsufficientCredit() - } - - err = storeAccount(store, addr.Bytes(), acct) - return err -} - -func checkTx(ctx types.Context, send SendTx) error { - // check if all inputs have permission - for _, in := range send.Inputs { - if !ctx.HasPermission(in.Address) { - return errors.ErrUnauthorized() - } - } - return nil -} - -func (Handler) checkSendTx(ctx types.Context, store store.MultiStore, send SendTx) error { - err := checkTx(ctx, send) - if err != nil { - return err - } - // now make sure there is money - for _, in := range send.Inputs { - _, err := CheckCoins(store, in.Address, in.Coins.Negative()) - if err != nil { - return err - } - } - return nil -} - -func setAccount(store store.MultiStore, value string) (log string, err error) { - var acc GenesisAccount - err = data.FromJSON([]byte(value), &acc) - if err != nil { - return "", err - } - acc.Balance.Sort() - addr, err := acc.GetAddr() - if err != nil { - return "", ErrInvalidAddress() - } - // this sets the permission for a public key signature, use that app - actor := auth.SigPerm(addr) - err = storeAccount(store, actor.Bytes(), acc.ToAccount()) - if err != nil { - return "", err - } - return "Success", nil -} - -// setIssuer sets a permission for some super-powerful account to -// mint money -func setIssuer(store store.MultiStore, value string) (log string, err error) { - var issuer sdk.Actor - err = data.FromJSON([]byte(value), &issuer) - if err != nil { - return "", err - } - err = storeIssuer(store, issuer) - if err != nil { - return "", err - } - return "Success", nil -} diff --git a/_attic/coins/handler_test.go b/_attic/coins/handler_test.go deleted file mode 100644 index c8a8eb0937..0000000000 --- a/_attic/coins/handler_test.go +++ /dev/null @@ -1,381 +0,0 @@ -package coin - -import ( - "encoding/json" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - crypto "github.com/tendermint/go-crypto" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -// this makes sure that txs are rejected with invalid data or permissions -func TestHandlerValidation(t *testing.T) { - assert := assert.New(t) - - // these are all valid, except for minusCoins - addr1 := sdk.Actor{App: "coin", Address: []byte{1, 2}} - addr2 := sdk.Actor{App: "role", Address: []byte{7, 8}} - someCoins := Coins{{"atom", 123}} - doubleCoins := Coins{{"atom", 246}} - minusCoins := Coins{{"eth", -34}} - - cases := []struct { - valid bool - tx sdk.Tx - perms []sdk.Actor - }{ - // auth works with different apps - {true, - NewSendTx( - []TxInput{NewTxInput(addr1, someCoins)}, - []TxOutput{NewTxOutput(addr2, someCoins)}), - []sdk.Actor{addr1}}, - {true, - NewSendTx( - []TxInput{NewTxInput(addr2, someCoins)}, - []TxOutput{NewTxOutput(addr1, someCoins)}), - []sdk.Actor{addr1, addr2}}, - // check multi-input with both sigs - {true, - NewSendTx( - []TxInput{NewTxInput(addr1, someCoins), NewTxInput(addr2, someCoins)}, - []TxOutput{NewTxOutput(addr1, doubleCoins)}), - []sdk.Actor{addr1, addr2}}, - // wrong permissions fail - {false, - NewSendTx( - []TxInput{NewTxInput(addr1, someCoins)}, - []TxOutput{NewTxOutput(addr2, someCoins)}), - []sdk.Actor{}}, - {false, - NewSendTx( - []TxInput{NewTxInput(addr1, someCoins)}, - []TxOutput{NewTxOutput(addr2, someCoins)}), - []sdk.Actor{addr2}}, - {false, - NewSendTx( - []TxInput{NewTxInput(addr1, someCoins), NewTxInput(addr2, someCoins)}, - []TxOutput{NewTxOutput(addr1, doubleCoins)}), - []sdk.Actor{addr1}}, - // invalid input fails - {false, - NewSendTx( - []TxInput{NewTxInput(addr1, minusCoins)}, - []TxOutput{NewTxOutput(addr2, minusCoins)}), - []sdk.Actor{addr2}}, - } - - for i, tc := range cases { - ctx := stack.MockContext("base-chain", 100).WithPermissions(tc.perms...) - err := checkTx(ctx, tc.tx.Unwrap().(SendTx)) - if tc.valid { - assert.Nil(err, "%d: %+v", i, err) - } else { - assert.NotNil(err, "%d", i) - } - } -} - -func TestCheckDeliverSendTx(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // some sample settings - addr1 := sdk.Actor{App: "coin", Address: []byte{1, 2}} - addr2 := sdk.Actor{App: "role", Address: []byte{7, 8}} - addr3 := sdk.Actor{App: "coin", Address: []byte{6, 5, 4, 3}} - - someCoins := Coins{{"atom", 123}} - moreCoins := Coins{{"atom", 6487}} - diffCoins := moreCoins.Minus(someCoins) - otherCoins := Coins{{"eth", 11}} - mixedCoins := someCoins.Plus(otherCoins) - - type money struct { - addr sdk.Actor - coins Coins - } - - cases := []struct { - init []money - tx sdk.Tx - perms []sdk.Actor - final []money // nil for error - cost uint64 // gas allocated (if not error) - }{ - { - []money{{addr1, moreCoins}}, - NewSendTx( - []TxInput{NewTxInput(addr1, someCoins)}, - []TxOutput{NewTxOutput(addr2, someCoins)}), - []sdk.Actor{addr1}, - []money{{addr1, diffCoins}, {addr2, someCoins}}, - 20, - }, - // simple multi-sig 2 accounts to 1 - { - []money{{addr1, mixedCoins}, {addr2, moreCoins}}, - NewSendTx( - []TxInput{NewTxInput(addr1, otherCoins), NewTxInput(addr2, someCoins)}, - []TxOutput{NewTxOutput(addr3, mixedCoins)}), - []sdk.Actor{addr1, addr2}, - []money{{addr1, someCoins}, {addr2, diffCoins}, {addr3, mixedCoins}}, - 30, - }, - // multi-sig with one account sending many times - { - []money{{addr1, moreCoins.Plus(otherCoins)}}, - NewSendTx( - []TxInput{NewTxInput(addr1, otherCoins), NewTxInput(addr1, someCoins)}, - []TxOutput{NewTxOutput(addr2, mixedCoins)}), - []sdk.Actor{addr1}, - []money{{addr1, diffCoins}, {addr2, mixedCoins}}, - 30, - }, - // invalid send (not enough money ) - { - []money{{addr1, moreCoins}, {addr2, someCoins}}, - NewSendTx( - []TxInput{NewTxInput(addr2, moreCoins)}, - []TxOutput{NewTxOutput(addr1, moreCoins)}), - []sdk.Actor{addr1, addr2}, - nil, - 0, - }, - } - - h := NewHandler() - for i, tc := range cases { - // setup the cases.... - store := state.NewMemKVStore() - for _, m := range tc.init { - acct := Account{Coins: m.coins} - err := storeAccount(store, m.addr.Bytes(), acct) - require.Nil(err, "%d: %+v", i, err) - } - - ctx := stack.MockContext("base-chain", 100).WithPermissions(tc.perms...) - - // throw-away state for checktx - cache := store.Checkpoint() - cres, err := h.CheckTx(ctx, cache, tc.tx, nil) - // real store for delivertx - _, err2 := h.DeliverTx(ctx, store, tc.tx, nil) - - if len(tc.final) > 0 { // valid - assert.Nil(err, "%d: %+v", i, err) - assert.Nil(err2, "%d: %+v", i, err2) - // make sure proper gas is set - assert.Equal(uint64(0), cres.GasPayment, "%d", i) - assert.Equal(tc.cost, cres.GasAllocated, "%d", i) - // make sure the final balances are correct - for _, f := range tc.final { - acct, err := loadAccount(store, f.addr.Bytes()) - assert.Nil(err, "%d: %+v", i, err) - assert.Equal(f.coins, acct.Coins) - } - } else { - // both check and deliver should fail - assert.NotNil(err, "%d", i) - assert.NotNil(err2, "%d", i) - } - - } -} - -func TestInitState(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // some sample settings - pk := crypto.GenPrivKeySecp256k1().Wrap() - addr := pk.PubKey().Address() - actor := auth.SigPerm(addr) - - someCoins := Coins{{"atom", 123}} - otherCoins := Coins{{"eth", 11}} - mixedCoins := someCoins.Plus(otherCoins) - - type money struct { - addr sdk.Actor - coins Coins - } - - cases := []struct { - init []GenesisAccount - expected []money - }{ - { - []GenesisAccount{{Address: addr, Balance: mixedCoins}}, - []money{{actor, mixedCoins}}, - }, - } - - h := NewHandler() - l := log.NewNopLogger() - for i, tc := range cases { - store := state.NewMemKVStore() - key := "account" - - // set the options - for j, gen := range tc.init { - value, err := json.Marshal(gen) - require.Nil(err, "%d,%d: %+v", i, j, err) - _, err = h.InitState(l, store, NameCoin, key, string(value), nil) - require.Nil(err) - } - - // check state is proper - for _, f := range tc.expected { - acct, err := loadAccount(store, f.addr.Bytes()) - assert.Nil(err, "%d: %+v", i, err) - assert.Equal(f.coins, acct.Coins) - } - } -} - -func TestSetIssuer(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - cases := []struct { - issuer sdk.Actor - }{ - {sdk.Actor{App: "sig", Address: []byte("gwkfgk")}}, - // and set back to empty (nil is valid, but assert.Equals doesn't match) - {sdk.Actor{}}, - {sdk.Actor{ChainID: "other", App: "role", Address: []byte("vote")}}, - } - - h := NewHandler() - l := log.NewNopLogger() - for i, tc := range cases { - store := state.NewMemKVStore() - key := "issuer" - - value, err := json.Marshal(tc.issuer) - require.Nil(err, "%d,%d: %+v", i, err) - _, err = h.InitState(l, store, NameCoin, key, string(value), nil) - require.Nil(err, "%+v", err) - - // check state is proper - info, err := loadHandlerInfo(store) - assert.Nil(err, "%d: %+v", i, err) - assert.Equal(tc.issuer, info.Issuer) - } -} - -func TestDeliverCreditTx(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // sample coins - someCoins := Coins{{"atom", 6570}} - minusCoins := Coins{{"atom", -1234}} - lessCoins := someCoins.Plus(minusCoins) - otherCoins := Coins{{"eth", 11}} - mixedCoins := someCoins.Plus(otherCoins) - - // some sample addresses - owner := sdk.Actor{App: "foo", Address: []byte("rocks")} - addr1 := sdk.Actor{App: "coin", Address: []byte{1, 2}} - key := NewAccountWithKey(someCoins) - addr2 := key.Actor() - addr3 := sdk.Actor{ChainID: "other", App: "sigs", Address: []byte{3, 9}} - - h := NewHandler() - store := state.NewMemKVStore() - ctx := stack.MockContext("secret", 77) - - // set the owner who can issue credit - js, err := json.Marshal(owner) - require.Nil(err, "%+v", err) - _, err = h.InitState(log.NewNopLogger(), store, "coin", "issuer", string(js), nil) - require.Nil(err, "%+v", err) - - // give addr2 some coins to start - _, err = h.InitState(log.NewNopLogger(), store, "coin", "account", key.MakeOption(), nil) - require.Nil(err, "%+v", err) - - cases := []struct { - tx sdk.Tx - perm sdk.Actor - check errors.CheckErr - addr sdk.Actor - expected Account - }{ - // require permission - { - tx: NewCreditTx(addr1, someCoins), - check: errors.IsUnauthorizedErr, - }, - // add credit - { - tx: NewCreditTx(addr1, someCoins), - perm: owner, - check: errors.NoErr, - addr: addr1, - expected: Account{Coins: someCoins, Credit: someCoins}, - }, - // remove some - { - tx: NewCreditTx(addr1, minusCoins), - perm: owner, - check: errors.NoErr, - addr: addr1, - expected: Account{Coins: lessCoins, Credit: lessCoins}, - }, - // can't remove more cash than there is - { - tx: NewCreditTx(addr1, otherCoins.Negative()), - perm: owner, - check: IsInsufficientFundsErr, - }, - // cumulative with initial state - { - tx: NewCreditTx(addr2, otherCoins), - perm: owner, - check: errors.NoErr, - addr: addr2, - expected: Account{Coins: mixedCoins, Credit: otherCoins}, - }, - // Even if there is cash, credit can't go negative - { - tx: NewCreditTx(addr2, minusCoins), - perm: owner, - check: IsInsufficientCreditErr, - }, - // make sure it works for other chains - { - tx: NewCreditTx(addr3, mixedCoins), - perm: owner, - check: errors.NoErr, - addr: ChainAddr(addr3), - expected: Account{Coins: mixedCoins, Credit: mixedCoins}, - }, - } - - for i, tc := range cases { - myStore := store.Checkpoint() - - myCtx := ctx.WithPermissions(tc.perm) - _, err = h.DeliverTx(myCtx, myStore, tc.tx, nil) - assert.True(tc.check(err), "%d: %+v", i, err) - - if err == nil { - store.Commit(myStore) - acct, err := GetAccount(store, tc.addr) - require.Nil(err, "%+v", err) - assert.Equal(tc.expected, acct, "%d", i) - } - } -} diff --git a/_attic/coins/helper.go b/_attic/coins/helper.go deleted file mode 100644 index 10ec3aad42..0000000000 --- a/_attic/coins/helper.go +++ /dev/null @@ -1,57 +0,0 @@ -package coin - -import ( - crypto "github.com/tendermint/go-crypto" - "github.com/tendermint/go-wire/data" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/x/auth" -) - -// AccountWithKey is a helper for tests, that includes and account -// along with the private key to access it. -type AccountWithKey struct { - Key crypto.PrivKey - Sequence uint32 - Account -} - -// NewAccountWithKey creates an account with the given balance -// and a random private key -func NewAccountWithKey(coins Coins) *AccountWithKey { - return &AccountWithKey{ - Key: crypto.GenPrivKeyEd25519().Wrap(), - Account: Account{Coins: coins}, - } -} - -// Address returns the public key address for this account -func (a *AccountWithKey) Address() []byte { - return a.Key.PubKey().Address() -} - -// Actor returns the basecoin actor associated with this account -func (a *AccountWithKey) Actor() sdk.Actor { - return auth.SigPerm(a.Key.PubKey().Address()) -} - -// NextSequence returns the next sequence to sign with -func (a *AccountWithKey) NextSequence() uint32 { - a.Sequence++ - return a.Sequence -} - -// MakeOption returns a string to use with InitState to initialize this account -// -// This is intended for use in test cases -func (a *AccountWithKey) MakeOption() string { - info := GenesisAccount{ - Address: a.Address(), - Balance: a.Coins, - } - js, err := data.ToJSON(info) - if err != nil { - panic(err) - } - return string(js) -} diff --git a/_attic/coins/ibc_test.go b/_attic/coins/ibc_test.go deleted file mode 100644 index 4b2af16cf6..0000000000 --- a/_attic/coins/ibc_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package coin - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/ibc" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" - wire "github.com/tendermint/go-wire" -) - -// TODO: other test making sure tx is output on send, balance is updated - -// This makes sure we respond properly to posttx -// TODO: set credit limit -func TestIBCPostPacket(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - otherID := "chain-2" - ourID := "dex" - start := 200 - - // create the app and our chain - app := stack.New(). - IBC(ibc.NewMiddleware()). - Dispatch( - NewHandler(), - stack.WrapHandler(ibc.NewHandler()), - ) - ourChain := ibc.NewAppChain(app, ourID) - - // set up the other chain and register it with us - otherChain := ibc.NewMockChain(otherID, 7) - registerTx := otherChain.GetRegistrationTx(start).Wrap() - _, err := ourChain.DeliverTx(registerTx) - require.Nil(err, "%+v", err) - - // set up a rich guy on this chain - wealth := Coins{{"btc", 300}, {"eth", 2000}, {"ltc", 5000}} - rich := NewAccountWithKey(wealth) - _, err = ourChain.InitState("coin", "account", rich.MakeOption()) - require.Nil(err, "%+v", err) - - // sends money to another guy on a different chain, now other chain has credit - buddy := sdk.Actor{ChainID: otherID, App: auth.NameSigs, Address: []byte("dude")} - outTx := NewSendOneTx(rich.Actor(), buddy, wealth) - _, err = ourChain.DeliverTx(outTx, rich.Actor()) - require.Nil(err, "%+v", err) - - // make sure the money moved to the other chain... - cstore := ourChain.GetStore(NameCoin) - acct, err := GetAccount(cstore, ChainAddr(buddy)) - require.Nil(err, "%+v", err) - require.Equal(wealth, acct.Coins) - - // make sure there is a proper packet for this.... - istore := ourChain.GetStore(ibc.NameIBC) - assertPacket(t, istore, otherID, wealth) - - // these are the people for testing incoming ibc from the other chain - recipient := sdk.Actor{ChainID: ourID, App: auth.NameSigs, Address: []byte("bar")} - sender := sdk.Actor{ChainID: otherID, App: auth.NameSigs, Address: []byte("foo")} - payment := Coins{{"eth", 100}, {"ltc", 300}} - coinTx := NewSendOneTx(sender, recipient, payment) - wrongCoin := NewSendOneTx(sender, recipient, Coins{{"missing", 20}}) - - p0 := ibc.NewPacket(coinTx, ourID, 0, sender) - packet0, update0 := otherChain.MakePostPacket(p0, start+5) - require.Nil(ourChain.Update(update0)) - - p1 := ibc.NewPacket(coinTx, ourID, 1, sender) - packet1, update1 := otherChain.MakePostPacket(p1, start+25) - require.Nil(ourChain.Update(update1)) - - p2 := ibc.NewPacket(wrongCoin, ourID, 2, sender) - packet2, update2 := otherChain.MakePostPacket(p2, start+50) - require.Nil(ourChain.Update(update2)) - - ibcPerm := sdk.Actors{ibc.AllowIBC(NameCoin)} - cases := []struct { - packet ibc.PostPacketTx - permissions sdk.Actors - checker errors.CheckErr - }{ - // out of order -> error - {packet1, ibcPerm, ibc.IsPacketOutOfOrderErr}, - - // all good -> execute tx - {packet0, ibcPerm, errors.NoErr}, - - // all good -> execute tx (even if earlier attempt failed) - {packet1, ibcPerm, errors.NoErr}, - - // packet 2 attempts to spend money this chain doesn't have - {packet2, ibcPerm, IsInsufficientFundsErr}, - } - - for i, tc := range cases { - _, err := ourChain.DeliverTx(tc.packet.Wrap(), tc.permissions...) - assert.True(tc.checker(err), "%d: %+v", i, err) - } - - // now, make sure the recipient got credited for the 2 successful sendtx - cstore = ourChain.GetStore(NameCoin) - // FIXME: we need to strip off this when it is local chain-id... - // think this throw and handle this better - local := recipient.WithChain("") - acct, err = GetAccount(cstore, local) - require.Nil(err, "%+v", err) - assert.Equal(payment.Plus(payment), acct.Coins) - -} - -func assertPacket(t *testing.T, istore state.SimpleDB, destID string, amount Coins) { - assert := assert.New(t) - require := require.New(t) - - iq := ibc.InputQueue(istore, destID) - require.Equal(0, iq.Size()) - - q := ibc.OutputQueue(istore, destID) - require.Equal(1, q.Size()) - d := q.Item(0) - var res ibc.Packet - err := wire.ReadBinaryBytes(d, &res) - require.Nil(err, "%+v", err) - assert.Equal(destID, res.DestChain) - assert.EqualValues(0, res.Sequence) - stx, ok := res.Tx.Unwrap().(SendTx) - if assert.True(ok) { - assert.Equal(1, len(stx.Outputs)) - assert.Equal(amount, stx.Outputs[0].Coins) - } -} diff --git a/_attic/coins/rest/handlers.go b/_attic/coins/rest/handlers.go deleted file mode 100644 index f6a9f18b32..0000000000 --- a/_attic/coins/rest/handlers.go +++ /dev/null @@ -1,166 +0,0 @@ -package rest - -import ( - "fmt" - "net/http" - "strconv" - "strings" - - "github.com/gorilla/mux" - "github.com/spf13/viper" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/query" - "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/base" - "github.com/cosmos/cosmos-sdk/x/coin" - "github.com/cosmos/cosmos-sdk/x/fee" - "github.com/cosmos/cosmos-sdk/x/nonce" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/tendermint/tmlibs/common" -) - -// SendInput is the request to send an amount from one actor to another. -// Note: Not using the `validator:""` tags here because SendInput has -// many fields so it would be nice to figure out all the invalid -// inputs and report them back to the caller, in one shot. -type SendInput struct { - Fees *coin.Coin `json:"fees"` - Multi bool `json:"multi,omitempty"` - Sequence uint32 `json:"sequence"` - - To *sdk.Actor `json:"to"` - From *sdk.Actor `json:"from"` - Amount coin.Coins `json:"amount"` -} - -// doQueryAccount is the HTTP handlerfunc to query an account -// It expects a query string with -func doQueryAccount(w http.ResponseWriter, r *http.Request) { - args := mux.Vars(r) - signature := args["signature"] - actor, err := commands.ParseActor(signature) - if err != nil { - common.WriteError(w, err) - return - } - - var h int - qHeight := r.URL.Query().Get("height") - if qHeight != "" { - h, err = strconv.Atoi(qHeight) - if err != nil { - common.WriteError(w, err) - return - } - } - - actor = coin.ChainAddr(actor) - key := stack.PrefixedKey(coin.NameCoin, actor.Bytes()) - account := new(coin.Account) - prove := !viper.GetBool(commands.FlagTrustNode) - height, err := query.GetParsed(key, account, h, prove) - if client.IsNoDataErr(err) { - err := fmt.Errorf("account bytes are empty for address: %q", signature) - common.WriteError(w, err) - return - } else if err != nil { - common.WriteError(w, err) - return - } - - if err := query.FoutputProof(w, account, height); err != nil { - common.WriteError(w, err) - } -} - -func PrepareSendTx(si *SendInput) sdk.Tx { - tx := coin.NewSendOneTx(*si.From, *si.To, si.Amount) - // fees are optional - if si.Fees != nil && !si.Fees.IsZero() { - tx = fee.NewFee(tx, *si.Fees, *si.From) - } - // only add the actual signer to the nonce - signers := []sdk.Actor{*si.From} - tx = nonce.NewTx(si.Sequence, signers, tx) - tx = base.NewChainTx(commands.GetChainID(), 0, tx) - - if si.Multi { - tx = auth.NewMulti(tx).Wrap() - } else { - tx = auth.NewSig(tx).Wrap() - } - return tx -} - -func doSend(w http.ResponseWriter, r *http.Request) { - defer r.Body.Close() - si := new(SendInput) - if err := common.ParseRequestAndValidateJSON(r, si); err != nil { - common.WriteError(w, err) - return - } - - var errsList []string - if si.From == nil { - errsList = append(errsList, `"from" cannot be nil`) - } - if si.Sequence <= 0 { - errsList = append(errsList, `"sequence" must be > 0`) - } - if si.To == nil { - errsList = append(errsList, `"to" cannot be nil`) - } - if len(si.Amount) == 0 { - errsList = append(errsList, `"amount" cannot be empty`) - } - if len(errsList) > 0 { - code := http.StatusBadRequest - err := &common.ErrorResponse{ - Err: strings.Join(errsList, ", "), - Code: code, - } - common.WriteCode(w, err, code) - return - } - - tx := PrepareSendTx(si) - common.WriteSuccess(w, tx) -} - -// mux.Router registrars - -// RegisterCoinSend is a mux.Router handler that exposes -// POST method access on route /build/send to create a -// transaction for sending money from one account to another. -func RegisterCoinSend(r *mux.Router) error { - r.HandleFunc("/build/send", doSend).Methods("POST") - return nil -} - -// RegisterQueryAccount is a mux.Router handler that exposes GET -// method access on route /query/account/{signature} to query accounts -func RegisterQueryAccount(r *mux.Router) error { - r.HandleFunc("/query/account/{signature}", doQueryAccount).Methods("GET") - return nil -} - -// RegisterAll is a convenience function to -// register all the handlers in this package. -func RegisterAll(r *mux.Router) error { - funcs := []func(*mux.Router) error{ - RegisterCoinSend, - RegisterQueryAccount, - } - - for _, fn := range funcs { - if err := fn(r); err != nil { - return err - } - } - return nil -} - -// End of mux.Router registrars diff --git a/_attic/coins/store.go b/_attic/coins/store.go deleted file mode 100644 index fd7c8ea069..0000000000 --- a/_attic/coins/store.go +++ /dev/null @@ -1,145 +0,0 @@ -package coin - -import ( - "fmt" - - wire "github.com/tendermint/go-wire" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/store" -) - -// GetAccount - Get account from store and address -func GetAccount(store store.MultiStore, addr sdk.Actor) (Account, error) { - // if the actor is another chain, we use one address for the chain.... - addr = ChainAddr(addr) - acct, err := loadAccount(store, addr.Bytes()) - - // for empty accounts, don't return an error, but rather an empty account - if IsNoAccountErr(err) { - err = nil - } - return acct, err -} - -// CheckCoins makes sure there are funds, but doesn't change anything -func CheckCoins(store store.MultiStore, addr sdk.Actor, coins Coins) (Coins, error) { - // if the actor is another chain, we use one address for the chain.... - addr = ChainAddr(addr) - - acct, err := updateCoins(store, addr, coins) - return acct.Coins, err -} - -// ChangeCoins changes the money, returns error if it would be negative -func ChangeCoins(store store.MultiStore, addr sdk.Actor, coins Coins) (Coins, error) { - // if the actor is another chain, we use one address for the chain.... - addr = ChainAddr(addr) - - acct, err := updateCoins(store, addr, coins) - if err != nil { - return acct.Coins, err - } - - err = storeAccount(store, addr.Bytes(), acct) - return acct.Coins, err -} - -// ChainAddr collapses all addresses from another chain into one, so we can -// keep an over-all balance -// -// TODO: is there a better way to do this? -func ChainAddr(addr sdk.Actor) sdk.Actor { - if addr.ChainID == "" { - return addr - } - addr.App = "" - addr.Address = nil - return addr -} - -// updateCoins will load the account, make all checks, and return the updated account. -// -// it doesn't save anything, that is up to you to decide (Check/Change Coins) -func updateCoins(store store.MultiStore, addr sdk.Actor, coins Coins) (acct Account, err error) { - acct, err = loadAccount(store, addr.Bytes()) - // we can increase an empty account... - if IsNoAccountErr(err) && coins.IsPositive() { - err = nil - } - if err != nil { - return acct, err - } - - // check amount - final := acct.Coins.Plus(coins) - if !final.IsNonnegative() { - return acct, ErrInsufficientFunds() - } - - acct.Coins = final - return acct, nil -} - -// Account - coin account structure -type Account struct { - // Coins is how much is on the account - Coins Coins `json:"coins"` - // Credit is how much has been "fronted" to the account - // (this is usually 0 except for trusted chains) - Credit Coins `json:"credit"` -} - -func loadAccount(store store.MultiStore, key []byte) (acct Account, err error) { - // fmt.Printf("load: %X\n", key) - data := store.Get(key) - if len(data) == 0 { - return acct, ErrNoAccount() - } - err = wire.ReadBinaryBytes(data, &acct) - if err != nil { - msg := fmt.Sprintf("Error reading account %X", key) - return acct, errors.ErrInternal(msg) - } - return acct, nil -} - -func storeAccount(store store.MultiStore, key []byte, acct Account) error { - // fmt.Printf("store: %X\n", key) - bin := wire.BinaryBytes(acct) - store.Set(key, bin) - return nil // real stores can return error... -} - -// HandlerInfo - this is global info on the coin handler -type HandlerInfo struct { - Issuer sdk.Actor `json:"issuer"` -} - -// TODO: where to store these special pieces?? -var handlerKey = []byte{12, 34} - -func loadHandlerInfo(store store.KVStore) (info HandlerInfo, err error) { - data := store.Get(handlerKey) - if len(data) == 0 { - return info, nil - } - err = wire.ReadBinaryBytes(data, &info) - if err != nil { - msg := "Error reading handler info" - return info, errors.ErrInternal(msg) - } - return info, nil -} - -func storeIssuer(store store.KVStore, issuer sdk.Actor) error { - info, err := loadHandlerInfo(store) - if err != nil { - return err - } - info.Issuer = issuer - d := wire.BinaryBytes(info) - store.Set(handlerKey, d) - return nil // real stores can return error... -} diff --git a/_attic/examples/basecoin/Makefile b/_attic/examples/basecoin/Makefile deleted file mode 100644 index 78dd637e89..0000000000 --- a/_attic/examples/basecoin/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -LINKER_FLAGS:="-X github.com/cosmos/cosmos-sdk/client/commands.CommitHash=`git rev-parse --short HEAD`" - -install: - @go install -ldflags $(LINKER_FLAGS) ./cmd/... - -test: test_unit test_cli - -test_unit: - @go test `glide novendor` - -test_cli: - ./tests/cli/keys.sh - ./tests/cli/rpc.sh - ./tests/cli/init.sh - ./tests/cli/init-server.sh - ./tests/cli/basictx.sh - ./tests/cli/roles.sh - ./tests/cli/restart.sh - ./tests/cli/rest.sh - ./tests/cli/ibc.sh - -.PHONY: install test test_unit test_cli diff --git a/_attic/examples/basecoin/app/handler.go b/_attic/examples/basecoin/app/handler.go deleted file mode 100644 index 69fd171a94..0000000000 --- a/_attic/examples/basecoin/app/handler.go +++ /dev/null @@ -1,73 +0,0 @@ -// XXX Rename AppHandler to DefaultAppHandler. -// XXX Register with a sdk.BaseApp instance to create Basecoin. -// XXX Create TxParser in anotehr file. - -package app - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/store" -) - -// AppHandler has no state for now, a more complex app could store state here -type AppHandler struct{} - -func NewAppHandler() sdk.Handler { - return AppHandler{} -} - -// DeliverTx applies the tx -func (h Handler) DeliverTx(ctx sdk.Context, store store.MultiStore, - msg interface{}) (res sdk.DeliverResult, err error) { - - db := store.Get("main").(sdk.KVStore) - - // Here we switch on which implementation of tx we use, - // and then take the appropriate action. - switch tx := tx.(type) { - case SendTx: - err = tx.ValidateBasic() - if err != nil { - break - } - db.Set(tx.Key, tx.Value) - res.Data = tx.Key - case RemoveTx: - err = tx.ValidateBasic() - if err != nil { - break - } - db.Remove(tx.Key) - res.Data = tx.Key - default: - err = errors.ErrInvalidFormat(TxWrapper{}, msg) - } - - return -} - -// CheckTx verifies if it is legit and returns info on how -// to prioritize it in the mempool -func (h Handler) CheckTx(ctx sdk.Context, store store.MultiStore, - msg interface{}) (res sdk.CheckResult, err error) { - - // If we wanted to use the store, - // it would look the same (as DeliverTx) - // db := store.Get("main").(sdk.KVStore) - - // Make sure it is something valid - tx, ok := msg.(Tx) - if !ok { - return res, errors.ErrInvalidFormat(TxWrapper{}, msg) - } - err = tx.ValidateBasic() - if err != nil { - return - } - - // Now return the costs (these should have meaning in your app) - return sdk.CheckResult{ - GasAllocated: 50, - GasPayment: 10, - } -} diff --git a/_attic/examples/basecoin/cmd/basecli/LIGHT_NODE.md b/_attic/examples/basecoin/cmd/basecli/LIGHT_NODE.md deleted file mode 100644 index 002c96cdf7..0000000000 --- a/_attic/examples/basecoin/cmd/basecli/LIGHT_NODE.md +++ /dev/null @@ -1,58 +0,0 @@ -# Run your own (super) lightweight node - -In addition to providing command-line tooling that goes cryptographic verification -on all the data your receive from the node, we have implemented a proxy mode, that -allows you to run a super lightweight node. It does not follow the chain on -every block or even every header, but only as needed. But still providing the -same security as running a full non-validator node on your local machine. - -Basically, it runs as a proxy that exposes the same rpc interface as the full node -and connects to a (potentially untrusted) full node. Every response is cryptographically -verified before being passed through, returning an error if it doesn't match. - -You can expect 2 rpc calls for every query plus <= 1 query for each validator set -change. Going offline for a while allows you to verify multiple validator set changes -with one call. Cuz at 1 block/sec and 1000 tx/block, it just doesn't make sense -to run a full node just to get security - -## Setup - -Just initialize your client with the proper validator set as in the [README](README.md) - -``` -$ export BCHOME=~/.lightnode -$ basecli init --node tcp://: --chain-id -``` - -## Running - -``` -$ basecli proxy --serve tcp://localhost:7890 -... -curl localhost:7890/status -curl localhost:7890/block\?height=20 -``` - -You can even subscribe to events over websockets and they are all verified -before passing them though. Though if you want every block, you might as -well run a full (nonvalidating) node. - -## Seeds - -Every time the validator set changes, the light node verifies if it is legal, -and then creates a seed at that point. These "seeds" are verified checkpoints -that we can trace any proof back to, starting with one on `init`. - -To make sure you are based on the most recent header, you can run: - -``` -basecli seeds update -basecli seeds show -``` - -## Feedback - -This is the first release of basecli and the light-weight proxy. It is secure, but -may not be useful for your workflow. Please try it out and open github issues -for any enhancements or bugs you find. I am aiming to make this a very useful -tool by tendermint 0.11, for which I need community feedback. diff --git a/_attic/examples/basecoin/cmd/basecli/README.md b/_attic/examples/basecoin/cmd/basecli/README.md deleted file mode 100644 index 2443c92ae5..0000000000 --- a/_attic/examples/basecoin/cmd/basecli/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Basic run through of using basecli.... - -To keep things clear, let's have two shells... - -`$` is for basecoin (server), `%` is for basecli (client) - -## Set up your basecli with a new key - -``` -% export BCHOME=~/.democli -% basecli keys new demo -% basecli keys get demo -o json -``` - -And set up a few more keys for fun... - -``` -% basecli keys new buddy -% basecli keys list -% ME=$(basecli keys get demo | awk '{print $2}') -% YOU=$(basecli keys get buddy | awk '{print $2}') -``` - -## Set up a clean basecoin, initialized with your account - -``` -$ export BCHOME=~/.demoserve -$ basecoin init $ME -$ basecoin start -``` - -## Connect your basecli the first time - -``` -% basecli init --chain-id test_chain_id --node tcp://localhost:46657 -``` - -## Check your balances... - -``` -% basecli query account $ME -% basecli query account $YOU -``` - -## Send the money - -``` -% basecli tx send --name demo --amount 1000mycoin --sequence 1 --to $YOU --> copy hash to HASH -% basecli query tx $HASH -% basecli query account $YOU -``` - diff --git a/_attic/examples/basecoin/cmd/basecli/main.go b/_attic/examples/basecoin/cmd/basecli/main.go deleted file mode 100644 index 107890a75e..0000000000 --- a/_attic/examples/basecoin/cmd/basecli/main.go +++ /dev/null @@ -1,91 +0,0 @@ -package main - -import ( - "os" - - "github.com/spf13/cobra" - - "github.com/tendermint/tmlibs/cli" - - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/auto" - "github.com/cosmos/cosmos-sdk/client/commands/commits" - "github.com/cosmos/cosmos-sdk/client/commands/keys" - "github.com/cosmos/cosmos-sdk/client/commands/proxy" - "github.com/cosmos/cosmos-sdk/client/commands/query" - rpccmd "github.com/cosmos/cosmos-sdk/client/commands/rpc" - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - authcmd "github.com/cosmos/cosmos-sdk/modules/auth/commands" - basecmd "github.com/cosmos/cosmos-sdk/modules/base/commands" - coincmd "github.com/cosmos/cosmos-sdk/modules/coin/commands" - feecmd "github.com/cosmos/cosmos-sdk/modules/fee/commands" - ibccmd "github.com/cosmos/cosmos-sdk/modules/ibc/commands" - noncecmd "github.com/cosmos/cosmos-sdk/modules/nonce/commands" - rolecmd "github.com/cosmos/cosmos-sdk/modules/roles/commands" -) - -// BaseCli - main basecoin client command -var BaseCli = &cobra.Command{ - Use: "basecli", - Short: "Light client for Tendermint", - Long: `Basecli is a certifying light client for the basecoin abci app. - -It leverages the power of the tendermint consensus algorithm get full -cryptographic proof of all queries while only syncing a fraction of the -block headers.`, -} - -func main() { - commands.AddBasicFlags(BaseCli) - - // Prepare queries - query.RootCmd.AddCommand( - // These are default parsers, but optional in your app (you can remove key) - query.TxQueryCmd, - query.KeyQueryCmd, - coincmd.AccountQueryCmd, - noncecmd.NonceQueryCmd, - rolecmd.RoleQueryCmd, - ibccmd.IBCQueryCmd, - ) - - // set up the middleware - txcmd.Middleware = txcmd.Wrappers{ - feecmd.FeeWrapper{}, - rolecmd.RoleWrapper{}, - noncecmd.NonceWrapper{}, - basecmd.ChainWrapper{}, - authcmd.SigWrapper{}, - } - txcmd.Middleware.Register(txcmd.RootCmd.PersistentFlags()) - - // you will always want this for the base send command - txcmd.RootCmd.AddCommand( - // This is the default transaction, optional in your app - coincmd.SendTxCmd, - coincmd.CreditTxCmd, - // this enables creating roles - rolecmd.CreateRoleTxCmd, - // these are for handling ibc - ibccmd.RegisterChainTxCmd, - ibccmd.UpdateChainTxCmd, - ibccmd.PostPacketTxCmd, - ) - - // Set up the various commands to use - BaseCli.AddCommand( - commands.InitCmd, - commands.ResetCmd, - keys.RootCmd, - commits.RootCmd, - rpccmd.RootCmd, - query.RootCmd, - txcmd.RootCmd, - proxy.RootCmd, - commands.VersionCmd, - auto.AutoCompleteCmd, - ) - - cmd := cli.PrepareMainCmd(BaseCli, "BC", os.ExpandEnv("$HOME/.basecli")) - cmd.Execute() -} diff --git a/_attic/examples/basecoin/cmd/basecoin/main.go b/_attic/examples/basecoin/cmd/basecoin/main.go deleted file mode 100644 index af31e2fe80..0000000000 --- a/_attic/examples/basecoin/cmd/basecoin/main.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "os" - - "github.com/spf13/cobra" - "github.com/tendermint/tmlibs/cli" - - sdk "github.com/cosmos/cosmos-sdk" - client "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/modules/auth" - "github.com/cosmos/cosmos-sdk/modules/base" - "github.com/cosmos/cosmos-sdk/modules/coin" - "github.com/cosmos/cosmos-sdk/modules/eyes" - "github.com/cosmos/cosmos-sdk/modules/fee" - "github.com/cosmos/cosmos-sdk/modules/ibc" - "github.com/cosmos/cosmos-sdk/modules/nonce" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/cosmos/cosmos-sdk/server/commands" - "github.com/cosmos/cosmos-sdk/stack" -) - -// RootCmd is the entry point for this binary -var RootCmd = &cobra.Command{ - Use: "basecoin", - Short: "A cryptocurrency framework in Golang based on Tendermint-Core", -} - -// BuildApp constructs the stack we want to use for this app -func BuildApp(feeDenom string) sdk.Handler { - return stack.New( - base.Logger{}, - stack.Recovery{}, - auth.Signatures{}, - base.Chain{}, - stack.Checkpoint{OnCheck: true}, - nonce.ReplayCheck{}, - ). - IBC(ibc.NewMiddleware()). - Apps( - roles.NewMiddleware(), - fee.NewSimpleFeeMiddleware(coin.Coin{feeDenom, 0}, fee.Bank), - stack.Checkpoint{OnDeliver: true}, - ). - Dispatch( - coin.NewHandler(), - stack.WrapHandler(roles.NewHandler()), - stack.WrapHandler(ibc.NewHandler()), - // and just for run, add eyes as well - stack.WrapHandler(eyes.NewHandler()), - ) -} - -func main() { - // require all fees in mycoin - change this in your app! - commands.Handler = BuildApp("mycoin") - - RootCmd.AddCommand( - commands.InitCmd, - commands.StartCmd, - //commands.RelayCmd, - commands.UnsafeResetAllCmd, - client.VersionCmd, - ) - commands.SetUpRoot(RootCmd) - - cmd := cli.PrepareMainCmd(RootCmd, "BC", os.ExpandEnv("$HOME/.basecoin")) - cmd.Execute() -} diff --git a/_attic/examples/basecoin/cmd/baseserver/README.md b/_attic/examples/basecoin/cmd/baseserver/README.md deleted file mode 100644 index a45e160b68..0000000000 --- a/_attic/examples/basecoin/cmd/baseserver/README.md +++ /dev/null @@ -1,160 +0,0 @@ -# baseserver - -baseserver is the REST counterpart to basecli - -## Compiling and running it -```shell -$ go get -u -v github.com/tendermint/basecoin/cmd/baseserver -$ baseserver init -$ baseserver serve --port 8888 -``` - -to run the server at localhost:8888, otherwise if you don't specify --port, -by default the server will be run on port 8998. - -## Supported routes -Route | Method | Completed | Description ----|---|---|--- -/keys|GET|✔️|Lists all keys -/keys|POST|✔️|Generate a new key. It expects fields: "name", "algo", "passphrase" -/keys/{name}|GET|✔️|Retrieves the specific key -/keys/{name}|POST/PUT|✔️|Updates the named key -/keys/{name}|DELETE|✔️|Deletes the named key -/build/send|POST|✔️|Send a transaction -/sign|POST|✔️|Sign a transaction -/tx|POST|✖️|Post a transaction to the blockchain -/seeds/status|GET|✖️|Returns the information on the last seed -/build/create_role|POST|✔️|Creates a role. Please note that the role MUST be valid hex for example instead of sending "role", send its hex encoded equivalent "726f6c65" - -## Preamble: -In the examples below, we assume that URL is set to `http://localhost:8889` -which can be set for example -URL=http://localhost:8889 - -## Sample usage -- Generate a key -```shell -$ curl -X POST $URL/keys --data '{"algo": "ed25519", "name": "SampleX", "passphrase": "Say no more"}' -``` - -```json -{ - "key": { - "name": "SampleX", - "address": "603EE63C41E322FC7A247864A9CD0181282EB458", - "pubkey": { - "type": "ed25519", - "data": "C050948CFC087F5E1068C7E244DDC30E03702621CC9442A28E6C9EDA7771AA0C" - } - }, - "seed_phrase": "border almost future parade speak soccer bulk orange real brisk caution body river chapter" -} -``` - -- Sign a key -```shell -$ curl -X POST $URL/sign --data '{ - "name": "matt", - "password": "Say no more", - "tx": { - "type": "sigs/multi", - "data": { - "tx": {"type":"coin/send","data":{"inputs":[{"address":{"chain":"","app":"role","addr":"62616E6B32"},"coins":[{"denom":"mycoin","amount":900000}]}],"outputs":[{"address":{"chain":"","app":"sigs","addr":"BDADF167E6CF2CDF2D621E590FF1FED2787A40E0"},"coins":[{"denom":"mycoin","amount":900000}]}]}}, - "signatures": null - } - } -}' -``` - -```json -{ - "type": "sigs/multi", - "data": { - "tx": { - "type": "coin/send", - "data": { - "inputs": [ - { - "address": { - "chain": "", - "app": "role", - "addr": "62616E6B32" - }, - "coins": [ - { - "denom": "mycoin", - "amount": 900000 - } - ] - } - ], - "outputs": [ - { - "address": { - "chain": "", - "app": "sigs", - "addr": "BDADF167E6CF2CDF2D621E590FF1FED2787A40E0" - }, - "coins": [ - { - "denom": "mycoin", - "amount": 900000 - } - ] - } - ] - } - }, - "signatures": [ - { - "Sig": { - "type": "ed25519", - "data": "F6FE3053F1E6C236F886A0D525C1AF840F7831B6E50F7E1108C345AA524303920F09945DA110AD5184B3F45717D7114E368B12AFE027FECECC2FC193D4906A0C" - }, - "Pubkey": { - "type": "ed25519", - "data": "0D8D19E527BAE9D1256A3D03009E2708171CDCB71CCDEDA2DC52DD9AD23AEE25" - } - } - ] - } -} -``` - -- Create a role -```shell -$ curl -X POST $URL/build/create_role --data \ -'{ - "role": "deadbeef", - "signers": [{ - "addr": "4FF759D47C81754D8F553DCCAC8651D0AF74C7F9", - "app": "role" - }], - "min_sigs": 1, - "seq": 1 -}' -``` - -```json -{ - "type": "chain/tx", - "data": { - "chain_id": "test_chain_id", - "expires_at": 0, - "tx": { - "type": "role/create", - "data": { - "role": "DEADBEEF", - "min_sigs": 1, - "signers": [ - { - "chain": "", - "app": "role", - "addr": "4FF759D47C81754D8F553DCCAC8651D0AF74C7F9" - } - ] - } - } - } -} -``` diff --git a/_attic/examples/basecoin/cmd/baseserver/main.go b/_attic/examples/basecoin/cmd/baseserver/main.go deleted file mode 100644 index a92e8edd01..0000000000 --- a/_attic/examples/basecoin/cmd/baseserver/main.go +++ /dev/null @@ -1,95 +0,0 @@ -package main - -import ( - "fmt" - "log" - "net/http" - "os" - - "github.com/gorilla/mux" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" - rest "github.com/cosmos/cosmos-sdk/client/rest" - coinrest "github.com/cosmos/cosmos-sdk/modules/coin/rest" - noncerest "github.com/cosmos/cosmos-sdk/modules/nonce/rest" - rolerest "github.com/cosmos/cosmos-sdk/modules/roles/rest" - "github.com/tendermint/tmlibs/cli" -) - -var srvCli = &cobra.Command{ - Use: "baseserver", - Short: "Light REST client for tendermint", - Long: `Baseserver presents a nice (not raw hex) interface to the basecoin blockchain structure.`, -} - -var serveCmd = &cobra.Command{ - Use: "serve", - Short: "Serve the light REST client for tendermint", - Long: "Access basecoin via REST", - RunE: serve, -} - -const ( - envPortFlag = "port" - defaultAlgo = "ed25519" -) - -func init() { - _ = serveCmd.PersistentFlags().Int(envPortFlag, 8998, "the port to run the server on") -} - -func serve(cmd *cobra.Command, args []string) error { - router := mux.NewRouter() - - routeRegistrars := []func(*mux.Router) error{ - // rest.Keys handlers - rest.NewDefaultKeysManager(defaultAlgo).RegisterAllCRUD, - - // Coin send handler - coinrest.RegisterCoinSend, - // Coin query account handler - coinrest.RegisterQueryAccount, - - // Roles createRole handler - rolerest.RegisterCreateRole, - - // Basecoin sign transactions handler - rest.RegisterSignTx, - // Basecoin post transaction handler - rest.RegisterPostTx, - - // Nonce query handler - noncerest.RegisterQueryNonce, - } - - for _, routeRegistrar := range routeRegistrars { - if err := routeRegistrar(router); err != nil { - log.Fatal(err) - } - } - - port := viper.GetInt(envPortFlag) - addr := fmt.Sprintf(":%d", port) - - log.Printf("Serving on %q", addr) - return http.ListenAndServe(addr, router) -} - -func main() { - commands.AddBasicFlags(srvCli) - - srvCli.AddCommand( - commands.InitCmd, - commands.VersionCmd, - serveCmd, - ) - - // this should share the dir with basecli, so you can use the cli and - // the api interchangeably - cmd := cli.PrepareMainCmd(srvCli, "BC", os.ExpandEnv("$HOME/.basecli")) - if err := cmd.Execute(); err != nil { - log.Fatal(err) - } -} diff --git a/_attic/examples/basecoin/tests/cli/basictx.sh b/_attic/examples/basecoin/tests/cli/basictx.sh deleted file mode 100755 index 853aab4b48..0000000000 --- a/_attic/examples/basecoin/tests/cli/basictx.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash - -# These global variables are required for common.sh -SERVER_EXE=basecoin -CLIENT_EXE=basecli -ACCOUNTS=(jae ethan bucky rigel igor) -RICH=${ACCOUNTS[0]} -POOR=${ACCOUNTS[4]} - -oneTimeSetUp() { - if ! quickSetup .basecoin_test_basictx basictx-chain; then - exit 1; - fi -} - -oneTimeTearDown() { - quickTearDown -} - -test00GetAccount() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - assertFalse "line=${LINENO}, requires arg" "${CLIENT_EXE} query account" - - checkAccount $SENDER "9007199254740992" - - ACCT2=$(${CLIENT_EXE} query account $RECV 2>/dev/null) - assertFalse "line=${LINENO}, has no genesis account" $? -} - -test01SendTx() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - assertFalse "line=${LINENO}, missing dest" "${CLIENT_EXE} tx send --amount=992mycoin --sequence=1" - assertFalse "line=${LINENO}, bad password" "echo foo | ${CLIENT_EXE} tx send --amount=992mycoin --sequence=1 --to=$RECV --name=$RICH" - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=992mycoin --sequence=1 --to=$RECV --name=$RICH) - txSucceeded $? "$TX" "$RECV" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - checkAccount $SENDER "9007199254740000" "$TX_HEIGHT" - # make sure 0x prefix also works - checkAccount "0x$SENDER" "9007199254740000" "$TX_HEIGHT" - checkAccount $RECV "992" "$TX_HEIGHT" - - # Make sure tx is indexed - checkSendTx $HASH $TX_HEIGHT $SENDER "992" -} - -test02SendTxWithFee() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - # Test to see if the auto-sequencing works, the sequence here should be calculated to be 2 - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=90mycoin --fee=10mycoin --to=$RECV --name=$RICH) - txSucceeded $? "$TX" "$RECV" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - # deduct 100 from sender, add 90 to receiver... fees "vanish" - checkAccount $SENDER "9007199254739900" "$TX_HEIGHT" - checkAccount $RECV "1082" "$TX_HEIGHT" - - # Make sure tx is indexed - checkSendFeeTx $HASH $TX_HEIGHT $SENDER "90" "10" - - # assert replay protection - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=90mycoin --fee=10mycoin --sequence=2 --to=$RECV --name=$RICH 2>/dev/null) - assertFalse "line=${LINENO}, replay: $TX" $? - - # checking normally - checkAccount $SENDER "9007199254739900" "$TX_HEIGHT" - checkAccount $RECV "1082" "$TX_HEIGHT" - - # make sure we can query the proper nonce - NONCE=$(${CLIENT_EXE} query nonce $SENDER) - if [ -n "$DEBUG" ]; then echo $NONCE; echo; fi - # TODO: note that cobra returns error code 0 on parse failure, - # so currently this check passes even if there is no nonce query command - if assertTrue "line=${LINENO}, no nonce query" $?; then - assertEquals "line=${LINENO}, proper nonce" "2" $(echo $NONCE | jq .data) - fi - - # make sure this works without trust also - OLD_BC_HOME=$BC_HOME - export BC_HOME=/foo - export BC_TRUST_NODE=1 - export BC_NODE=localhost:46657 - checkSendFeeTx $HASH $TX_HEIGHT $SENDER "90" "10" - checkAccount $SENDER "9007199254739900" "$TX_HEIGHT" - checkAccount $RECV "1082" "$TX_HEIGHT" - unset BC_TRUST_NODE - unset BC_NODE - export BC_HOME=$OLD_BC_HOME -} - - -test03CreditTx() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - # make sure we are controlled by permissions (only rich can issue credit) - assertFalse "line=${LINENO}, bad password" "echo qwertyuiop | ${CLIENT_EXE} tx credit --amount=1000mycoin --sequence=1 --to=$RECV --name=$POOR" - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx credit --amount=1000mycoin --sequence=3 --to=$RECV --name=$RICH) - txSucceeded $? "$TX" "$RECV" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - # receiver got cash, sender didn't lose any (1000 more than last check) - checkAccount $RECV "2082" "$TX_HEIGHT" - checkAccount $SENDER "9007199254739900" "$TX_HEIGHT" -} - - -# Load common then run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 diff --git a/_attic/examples/basecoin/tests/cli/ibc.sh b/_attic/examples/basecoin/tests/cli/ibc.sh deleted file mode 100755 index ed8a277d96..0000000000 --- a/_attic/examples/basecoin/tests/cli/ibc.sh +++ /dev/null @@ -1,284 +0,0 @@ -#!/bin/bash - -#!/bin/bash - -# These global variables are required for common.sh -SERVER_EXE=basecoin -CLIENT_EXE=basecli -ACCOUNTS=(jae ethan bucky rigel igor) -RICH=${ACCOUNTS[0]} -POOR=${ACCOUNTS[4]} - -# For full stack traces in error output, run -# BC_TRACE=1 ./ibc.sh - -oneTimeSetUp() { - # These are passed in as args - BASE_DIR_1=$HOME/.basecoin_test_ibc/chain1 - CHAIN_ID_1=test-chain-1 - CLIENT_1=${BASE_DIR_1}/client - PREFIX_1=1234 - PORT_1=${PREFIX_1}7 - - BASE_DIR_2=$HOME/.basecoin_test_ibc/chain2 - CHAIN_ID_2=test-chain-2 - CLIENT_2=${BASE_DIR_2}/client - PREFIX_2=2345 - PORT_2=${PREFIX_2}7 - - # Clean up and create the test dirs - rm -rf $BASE_DIR_1 $BASE_DIR_2 2>/dev/null - mkdir -p $BASE_DIR_1 $BASE_DIR_2 - - # Set up client for chain 1- make sure you use the proper prefix if you set - # a custom CLIENT_EXE - BC_HOME=${CLIENT_1} prepareClient - BC_HOME=${CLIENT_2} prepareClient - - # Start basecoin server, giving money to the key in the first client - BC_HOME=${CLIENT_1} initServer $BASE_DIR_1 $CHAIN_ID_1 $PREFIX_1 - if [ $? != 0 ]; then exit 1; fi - PID_SERVER_1=$PID_SERVER - - # Start second basecoin server, giving money to the key in the second client - BC_HOME=${CLIENT_2} initServer $BASE_DIR_2 $CHAIN_ID_2 $PREFIX_2 - if [ $? != 0 ]; then exit 1; fi - PID_SERVER_2=$PID_SERVER - - # Connect both clients - BC_HOME=${CLIENT_1} initClient $CHAIN_ID_1 $PORT_1 - if [ $? != 0 ]; then exit 1; fi - BC_HOME=${CLIENT_2} initClient $CHAIN_ID_2 $PORT_2 - if [ $? != 0 ]; then exit 1; fi - - printf "...Testing may begin!\n\n\n" -} - -oneTimeTearDown() { - printf "\n\nstopping both $SERVER_EXE test servers... $PID_SERVER_1 $PID_SERVER_2" - kill -9 $PID_SERVER_1 - kill -9 $PID_SERVER_2 - sleep 1 -} - -test00GetAccount() { - export BC_HOME=${CLIENT_1} - SENDER_1=$(getAddr $RICH) - RECV_1=$(getAddr $POOR) - - assertFalse "line=${LINENO}, requires arg" "${CLIENT_EXE} query account 2>/dev/null" - assertFalse "line=${LINENO}, has no genesis account" "${CLIENT_EXE} query account $RECV_1 2>/dev/null" - checkAccount $SENDER_1 "9007199254740992" - - export BC_HOME=${CLIENT_2} - SENDER_2=$(getAddr $RICH) - RECV_2=$(getAddr $POOR) - - assertFalse "line=${LINENO}, requires arg" "${CLIENT_EXE} query account 2>/dev/null" - assertFalse "line=${LINENO}, has no genesis account" "${CLIENT_EXE} query account $RECV_2 2>/dev/null" - checkAccount $SENDER_2 "9007199254740992" - - # Make sure that they have different addresses on both chains (they are random keys) - assertNotEquals "line=${LINENO}, sender keys must be different" "$SENDER_1" "$SENDER_2" - assertNotEquals "line=${LINENO}, recipient keys must be different" "$RECV_1" "$RECV_2" -} - -test01RegisterChains() { - # let's get the root commits to cross-register them - ROOT_1="$BASE_DIR_1/root_commit.json" - ${CLIENT_EXE} commits export $ROOT_1 --home=${CLIENT_1} - assertTrue "line=${LINENO}, export commit failed" $? - - ROOT_2="$BASE_DIR_2/root_commit.json" - ${CLIENT_EXE} commits export $ROOT_2 --home=${CLIENT_2} - assertTrue "line=${LINENO}, export commit failed" $? - - # register chain2 on chain1 - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx ibc-register \ - --sequence=1 --commit=${ROOT_2} --name=$POOR --home=${CLIENT_1}) - txSucceeded $? "$TX" "register chain2 on chain 1" - # an example to quit early if there is no point in more tests - if [ $? != 0 ]; then echo "aborting!"; return 1; fi - # this is used later to check data - REG_HEIGHT=$(echo $TX | jq .height) - - # register chain1 on chain2 (no money needed... yet) - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx ibc-register \ - --sequence=1 --commit=${ROOT_1} --name=$POOR --home=${CLIENT_2}) - txSucceeded $? "$TX" "register chain1 on chain 2" - # an example to quit early if there is no point in more tests - if [ $? != 0 ]; then echo "aborting!"; return 1; fi -} - -test02UpdateChains() { - # let's get the root commits to cross-register them - UPDATE_1="$BASE_DIR_1/seed_1.json" - ${CLIENT_EXE} commits update --home=${CLIENT_1} > /dev/null - ${CLIENT_EXE} commits export $UPDATE_1 --home=${CLIENT_1} - assertTrue "line=${LINENO}, export commit failed" $? - # make sure it is newer than the other.... - assertNewHeight "line=${LINENO}" $ROOT_1 $UPDATE_1 - - UPDATE_2="$BASE_DIR_2/seed_2.json" - ${CLIENT_EXE} commits update --home=${CLIENT_2} > /dev/null - ${CLIENT_EXE} commits export $UPDATE_2 --home=${CLIENT_2} - assertTrue "line=${LINENO}, export commit failed" $? - assertNewHeight "line=${LINENO}" $ROOT_2 $UPDATE_2 - # this is used later to check query data - REGISTER_2_HEIGHT=$(cat $ROOT_2 | jq .commit.header.height) - UPDATE_2_HEIGHT=$(cat $UPDATE_2 | jq .commit.header.height) - - # update chain2 on chain1 - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx ibc-update \ - --sequence=2 --commit=${UPDATE_2} --name=$POOR --home=${CLIENT_1}) - txSucceeded $? "$TX" "update chain2 on chain 1" - # an example to quit early if there is no point in more tests - if [ $? != 0 ]; then echo "aborting!"; return 1; fi - - # update chain1 on chain2 (no money needed... yet) - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx ibc-update \ - --sequence=2 --commit=${UPDATE_1} --name=$POOR --home=${CLIENT_2}) - txSucceeded $? "$TX" "update chain1 on chain 2" - # an example to quit early if there is no point in more tests - if [ $? != 0 ]; then echo "aborting!"; return 1; fi -} - -# make sure all query commands about ibc work... -test03QueryIBC() { - # just test on one chain, as they are all symetrical - export BC_HOME=${CLIENT_1} - - # make sure we can list all chains - CHAINS=$(${CLIENT_EXE} query ibc chains) - assertTrue "line=${LINENO}, cannot query chains" $? - assertEquals "1" $(echo $CHAINS | jq '.data | length') - assertEquals "line=${LINENO}" "\"$CHAIN_ID_2\"" $(echo $CHAINS | jq '.data[0]') - - # error on unknown chain, data on proper chain - assertFalse "line=${LINENO}, unknown chain" "${CLIENT_EXE} query ibc chain random 2>/dev/null" - CHAIN_INFO=$(${CLIENT_EXE} query ibc chain $CHAIN_ID_2) - assertTrue "line=${LINENO}, cannot query chain $CHAIN_ID_2" $? - assertEquals "line=${LINENO}, register height" $REG_HEIGHT $(echo $CHAIN_INFO | jq .data.registered_at) - assertEquals "line=${LINENO}, tracked height" $UPDATE_2_HEIGHT $(echo $CHAIN_INFO | jq .data.remote_block) -} - -# Trigger a cross-chain sendTx... from RICH on chain1 to POOR on chain2 -# we make sure the money was reduced, but nothing arrived -test04SendIBCPacket() { - export BC_HOME=${CLIENT_1} - - # make sure there are no packets yet - PACKETS=$(${CLIENT_EXE} query ibc packets --to=$CHAIN_ID_2 2>/dev/null) - assertFalse "line=${LINENO}, packet query" $? - - SENDER=$(getAddr $RICH) - RECV=$(BC_HOME=${CLIENT_2} getAddr $POOR) - - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=20002mycoin \ - --to=${CHAIN_ID_2}::${RECV} --name=$RICH) - txSucceeded $? "$TX" "${CHAIN_ID_2}::${RECV}" - # quit early if there is no point in more tests - if [ $? != 0 ]; then echo "aborting!"; return 1; fi - - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - # Make sure balance went down and tx is indexed - checkAccount $SENDER "9007199254720990" "$TX_HEIGHT" - checkSendTx $HASH $TX_HEIGHT $SENDER "20002" - - # look, we wrote a packet - PACKETS=$(${CLIENT_EXE} query ibc packets --to=$CHAIN_ID_2 --height=$TX_HEIGHT) - assertTrue "line=${LINENO}, packets query" $? - assertEquals "line=${LINENO}, packet count" 1 $(echo $PACKETS | jq .data) - - # and look at the packet itself - PACKET=$(${CLIENT_EXE} query ibc packet --to=$CHAIN_ID_2 --sequence=0 --height=$TX_HEIGHT) - assertTrue "line=${LINENO}, packet query" $? - assertEquals "line=${LINENO}, proper src" "\"$CHAIN_ID_1\"" $(echo $PACKET | jq .src_chain) - assertEquals "line=${LINENO}, proper dest" "\"$CHAIN_ID_2\"" $(echo $PACKET | jq .packet.dest_chain) - assertEquals "line=${LINENO}, proper sequence" "0" $(echo $PACKET | jq .packet.sequence) - if [ -n "$DEBUG" ]; then echo $PACKET; echo; fi - - # nothing arrived - ARRIVED=$(${CLIENT_EXE} query ibc packets --from=$CHAIN_ID_1 --home=$CLIENT_2 2>/dev/null) - assertFalse "line=${LINENO}, packet query" $? - assertFalse "line=${LINENO}, no relay running" "BC_HOME=${CLIENT_2} ${CLIENT_EXE} query account $RECV" -} - -test05ReceiveIBCPacket() { - export BC_HOME=${CLIENT_2} - RECV=$(getAddr $POOR) - - # make some credit, so we can accept the packet - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx credit --amount=60006mycoin --to=$CHAIN_ID_1:: --name=$RICH) - txSucceeded $? "$TX" "${CHAIN_ID_1}::" - TX_HEIGHT=$(echo $TX | jq .height) - - # make sure there is enough credit - checkAccount $CHAIN_ID_1:: "60006" "$TX_HEIGHT" - # and the poor guy doesn't have a penny to his name - ACCT2=$(${CLIENT_EXE} query account $RECV 2>/dev/null) - assertFalse "line=${LINENO}, has no genesis account" $? - - - # now, we try to post it.... (this is PACKET from last test) - - # get the commit with the proof and post it - SRC_HEIGHT=$(echo $PACKET | jq .src_height) - PROOF_HEIGHT=$(expr $SRC_HEIGHT + 1) - # FIXME: this should auto-update on proofs... - ${CLIENT_EXE} commits update --height=$PROOF_HEIGHT --home=${CLIENT_1} > /dev/null - assertTrue "line=${LINENO}, update commit failed" $? - - PACKET_COMMIT="$BASE_DIR_1/packet_commit.json" - ${CLIENT_EXE} commits export $PACKET_COMMIT --home=${CLIENT_1} --height=$PROOF_HEIGHT - assertTrue "line=${LINENO}, export commit failed" $? - if [ -n "$DEBUG" ]; then - echo "**** SEED ****" - cat $PACKET_COMMIT | jq .commit.header - echo - fi - - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx ibc-update \ - --commit=${PACKET_COMMIT} --name=$POOR --sequence=3) - txSucceeded $? "$TX" "prepare packet chain1 on chain 2" - # an example to quit early if there is no point in more tests - if [ $? != 0 ]; then echo "aborting!"; return 1; fi - TX_HEIGHT=$(echo $TX | jq .height) - - # write the packet to the file - POST_PACKET="$BASE_DIR_1/post_packet.json" - echo $PACKET > $POST_PACKET - - # post it as a tx (cross-fingers) - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx ibc-post \ - --packet=${POST_PACKET} --name=$POOR --sequence=4) - txSucceeded $? "$TX" "post packet from chain1 on chain 2" - TX_HEIGHT=$(echo $TX | jq .height) - - # ensure $POOR balance was incremented, and credit for CHAIN_1 decremented - checkAccount $CHAIN_ID_1:: "40004" "$TX_HEIGHT" - checkAccount $RECV "20002" "$TX_HEIGHT" - - # look, we wrote a packet - PACKETS=$(${CLIENT_EXE} query ibc packets --height=$TX_HEIGHT --from=$CHAIN_ID_1) - assertTrue "line=${LINENO}, packets query" $? - assertEquals "line=${LINENO}, packet count" 1 $(echo $PACKETS | jq .data) -} - -# XXX Ex Usage: assertNewHeight $MSG $SEED_1 $SEED_2 -# Desc: Asserts that seed2 has a higher block height than commit 1 -assertNewHeight() { - H1=$(cat $2 | jq .commit.header.height) - H2=$(cat $3 | jq .commit.header.height) - assertTrue "$1" "test $H2 -gt $H1" - return $? -} - -# Load common then run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 diff --git a/_attic/examples/basecoin/tests/cli/init-server.sh b/_attic/examples/basecoin/tests/cli/init-server.sh deleted file mode 100755 index 9923540819..0000000000 --- a/_attic/examples/basecoin/tests/cli/init-server.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -CLIENT_EXE=basecli -SERVER_EXE=basecoin - -test01initOption() { - BASE=~/.bc_init_test - rm -rf "$BASE" - mkdir -p "$BASE" - - SERVE_DIR="${BASE}/server" - GENESIS_FILE=${SERVE_DIR}/genesis.json - HEX="deadbeef1234deadbeef1234deadbeef1234aaaa" - - ${SERVER_EXE} init ${HEX} --home="$SERVE_DIR" -p=eyes/key1/val1 -p='"eyes/key2/{""name"": ""joe"", ""age"": ""100""}"' >/dev/null - if ! assertTrue "line=${LINENO}" $?; then return 1; fi - - OPTION1KEY=$(cat ${GENESIS_FILE} | jq '.app_options.plugin_options[2]') - OPTION1VAL=$(cat ${GENESIS_FILE} | jq '.app_options.plugin_options[3]') - OPTION2KEY=$(cat ${GENESIS_FILE} | jq '.app_options.plugin_options[4]') - OPTION2VAL=$(cat ${GENESIS_FILE} | jq '.app_options.plugin_options[5]') - OPTION2VALEXPECTED=$(echo '{"name": "joe", "age": "100"}' | jq '.') - - assertEquals "line=${LINENO}" '"eyes/key1"' $OPTION1KEY - assertEquals "line=${LINENO}" '"val1"' $OPTION1VAL - assertEquals "line=${LINENO}" '"eyes/key2"' $OPTION2KEY - assertEquals "line=${LINENO}" "$OPTION2VALEXPECTED" "$OPTION2VAL" -} - -test02runServer() { - # Attempt to begin the server with the custom genesis - SERVER_LOG=$BASE/${SERVER_EXE}.log - startServer $SERVE_DIR $SERVER_LOG -} - -oneTimeTearDown() { - quickTearDown -} - -# load and run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 diff --git a/_attic/examples/basecoin/tests/cli/init.sh b/_attic/examples/basecoin/tests/cli/init.sh deleted file mode 100755 index 4735832221..0000000000 --- a/_attic/examples/basecoin/tests/cli/init.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash - -CLIENT_EXE=basecli -SERVER_EXE=basecoin - -oneTimeSetUp() { - BASE=~/.bc_init_test - rm -rf "$BASE" - mkdir -p "$BASE" - - SERVER="${BASE}/server" - SERVER_LOG="${BASE}/${SERVER_EXE}.log" - - HEX="deadbeef1234deadbeef1234deadbeef1234aaaa" - ${SERVER_EXE} init ${HEX} --home="$SERVER" >> "$SERVER_LOG" - if ! assertTrue "line=${LINENO}" $?; then return 1; fi - - GENESIS_FILE=${SERVER}/genesis.json - CHAIN_ID=$(cat ${GENESIS_FILE} | jq .chain_id | tr -d \") - - printf "starting ${SERVER_EXE}...\n" - ${SERVER_EXE} start --home="$SERVER" >> "$SERVER_LOG" 2>&1 & - sleep 5 - PID_SERVER=$! - disown - if ! ps $PID_SERVER >/dev/null; then - echo "**STARTUP FAILED**" - cat $SERVER_LOG - return 1 - fi -} - -oneTimeTearDown() { - printf "\nstopping ${SERVER_EXE}..." - kill -9 $PID_SERVER >/dev/null 2>&1 - sleep 1 -} - -test01goodInit() { - export BCHOME=${BASE}/client-01 - assertFalse "line=${LINENO}" "ls ${BCHOME} 2>/dev/null >&2" - - echo y | ${CLIENT_EXE} init --node=tcp://localhost:46657 --chain-id="${CHAIN_ID}" > /dev/null - assertTrue "line=${LINENO}, initialized light-client" $? - checkDir $BCHOME 3 -} - -test02badInit() { - export BCHOME=${BASE}/client-02 - assertFalse "line=${LINENO}" "ls ${BCHOME} 2>/dev/null >&2" - - # no node where we go - echo y | ${CLIENT_EXE} init --node=tcp://localhost:9999 --chain-id="${CHAIN_ID}" > /dev/null 2>&1 - assertFalse "line=${LINENO}, invalid init" $? - # dir there, but empty... - checkDir $BCHOME 0 - - # try with invalid chain id - echo y | ${CLIENT_EXE} init --node=tcp://localhost:46657 --chain-id="bad-chain-id" > /dev/null 2>&1 - assertFalse "line=${LINENO}, invalid init" $? - checkDir $BCHOME 0 - - # reject the response - echo n | ${CLIENT_EXE} init --node=tcp://localhost:46657 --chain-id="${CHAIN_ID}" > /dev/null 2>&1 - assertFalse "line=${LINENO}, invalid init" $? - checkDir $BCHOME 0 -} - -test03noDoubleInit() { - export BCHOME=${BASE}/client-03 - assertFalse "line=${LINENO}" "ls ${BCHOME} 2>/dev/null >&2" - - # init properly - echo y | ${CLIENT_EXE} init --node=tcp://localhost:46657 --chain-id="${CHAIN_ID}" > /dev/null 2>&1 - assertTrue "line=${LINENO}, initialized light-client" $? - checkDir $BCHOME 3 - - # try again, and we get an error - echo y | ${CLIENT_EXE} init --node=tcp://localhost:46657 --chain-id="${CHAIN_ID}" > /dev/null 2>&1 - assertFalse "line=${LINENO}, warning on re-init" $? - checkDir $BCHOME 3 - - # unless we --force-reset - echo y | ${CLIENT_EXE} init --force-reset --node=tcp://localhost:46657 --chain-id="${CHAIN_ID}" > /dev/null 2>&1 - assertTrue "line=${LINENO}, re-initialized light-client" $? - checkDir $BCHOME 3 -} - -test04acceptGenesisFile() { - export BCHOME=${BASE}/client-04 - assertFalse "line=${LINENO}" "ls ${BCHOME} 2>/dev/null >&2" - - # init properly - ${CLIENT_EXE} init --node=tcp://localhost:46657 --genesis=${GENESIS_FILE} > /dev/null 2>&1 - assertTrue "line=${LINENO}, initialized light-client" $? - checkDir $BCHOME 3 -} - -# XXX Ex: checkDir $DIR $FILES -# Makes sure directory exists and has the given number of files -checkDir() { - assertTrue "line=${LINENO}" "ls ${1} 2>/dev/null >&2" - assertEquals "line=${LINENO}, no files created" "$2" $(ls $1 | wc -l) -} - -# load and run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/shunit2 diff --git a/_attic/examples/basecoin/tests/cli/keys.sh b/_attic/examples/basecoin/tests/cli/keys.sh deleted file mode 100755 index a7253a57af..0000000000 --- a/_attic/examples/basecoin/tests/cli/keys.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/bash -EXE=basecli - - -oneTimeSetUp() { - PASS=qwertyuiop - export BCHOME=$HOME/.bc_keys_test - ${EXE} reset_all - assertTrue "line ${LINENO}" $? -} - -newKey(){ - assertNotNull "keyname required" "$1" - KEYPASS=${2:-qwertyuiop} - KEY=$(echo $KEYPASS | ${EXE} keys new $1 -o json) - if ! assertTrue "line ${LINENO}: created $1" $?; then return 1; fi - assertEquals "$1" $(echo $KEY | jq .key.name | tr -d \") - return $? -} - -# updateKey -updateKey() { - (echo $2; echo $3) | ${EXE} keys update $1 > /dev/null - return $? -} - -test00MakeKeys() { - USER=demouser - assertFalse "line ${LINENO}: already user $USER" "${EXE} keys get $USER" - newKey $USER - assertTrue "line ${LINENO}: no user $USER" "${EXE} keys get $USER" - # make sure bad password not accepted - assertFalse "accepts short password" "echo 123 | ${EXE} keys new badpass" -} - -test01ListKeys() { - # one line plus the number of keys - assertEquals "2" $(${EXE} keys list | wc -l) - newKey foobar - assertEquals "3" $(${EXE} keys list | wc -l) - # we got the proper name here... - assertEquals "foobar" $(${EXE} keys list -o json | jq .[1].name | tr -d \" ) - # we get all names in normal output - EXPECTEDNAMES=$(echo demouser; echo foobar) - TEXTNAMES=$(${EXE} keys list | tail -n +2 | cut -f1) - assertEquals "$EXPECTEDNAMES" "$TEXTNAMES" - # let's make sure the addresses match! - assertEquals "line ${LINENO}: text and json addresses don't match" $(${EXE} keys list | tail -1 | cut -f3) $(${EXE} keys list -o json | jq .[1].address | tr -d \") -} - -test02updateKeys() { - USER=changer - PASS1=awsedrftgyhu - PASS2=S4H.9j.D9S7hso - PASS3=h8ybO7GY6d2 - - newKey $USER $PASS1 - assertFalse "line ${LINENO}: accepts invalid pass" "updateKey $USER $PASS2 $PASS2" - assertTrue "line ${LINENO}: doesn't update" "updateKey $USER $PASS1 $PASS2" - assertTrue "line ${LINENO}: takes new key after update" "updateKey $USER $PASS2 $PASS3" -} - -test03recoverKeys() { - USER=sleepy - PASS1=S4H.9j.D9S7hso - - USER2=easy - PASS2=1234567890 - - # make a user and check they exist - KEY=$(echo $PASS1 | ${EXE} keys new $USER -o json) - if ! assertTrue "created $USER" $?; then return 1; fi - if [ -n "$DEBUG" ]; then echo $KEY; echo; fi - - SEED=$(echo $KEY | jq .seed | tr -d \") - ADDR=$(echo $KEY | jq .key.address | tr -d \") - PUBKEY=$(echo $KEY | jq .key.pubkey | tr -d \") - assertTrue "line ${LINENO}" "${EXE} keys get $USER > /dev/null" - - # let's delete this key - assertFalse "line ${LINENO}" "echo foo | ${EXE} keys delete $USER > /dev/null" - assertTrue "line ${LINENO}" "echo $PASS1 | ${EXE} keys delete $USER > /dev/null" - assertFalse "line ${LINENO}" "${EXE} keys get $USER > /dev/null" - - # fails on short password - assertFalse "line ${LINENO}" "echo foo; echo $SEED | ${EXE} keys recover $USER2 -o json > /dev/null" - # fails on bad seed - assertFalse "line ${LINENO}" "echo $PASS2; echo \"silly white whale tower bongo\" | ${EXE} keys recover $USER2 -o json > /dev/null" - # now we got it - KEY2=$((echo $PASS2; echo $SEED) | ${EXE} keys recover $USER2 -o json) - if ! assertTrue "recovery failed: $KEY2" $?; then return 1; fi - if [ -n "$DEBUG" ]; then echo $KEY2; echo; fi - - # make sure it looks the same - NAME2=$(echo $KEY2 | jq .name | tr -d \") - ADDR2=$(echo $KEY2 | jq .address | tr -d \") - PUBKEY2=$(echo $KEY2 | jq .pubkey | tr -d \") - assertEquals "line ${LINENO}: wrong username" "$USER2" "$NAME2" - assertEquals "line ${LINENO}: address doesn't match" "$ADDR" "$ADDR2" - assertEquals "line ${LINENO}: pubkey doesn't match" "$PUBKEY" "$PUBKEY2" - - # and we can find the info - assertTrue "line ${LINENO}" "${EXE} keys get $USER2 > /dev/null" -} - -# try recovery with secp256k1 keys -test03recoverSecp() { - USER=dings - PASS1=Sbub-U9byS7hso - - USER2=booms - PASS2=1234567890 - - KEY=$(echo $PASS1 | ${EXE} keys new $USER -o json -t secp256k1) - if ! assertTrue "created $USER" $?; then return 1; fi - if [ -n "$DEBUG" ]; then echo $KEY; echo; fi - - SEED=$(echo $KEY | jq .seed | tr -d \") - ADDR=$(echo $KEY | jq .key.address | tr -d \") - PUBKEY=$(echo $KEY | jq .key.pubkey | tr -d \") - assertTrue "line ${LINENO}" "${EXE} keys get $USER > /dev/null" - - # now we got it - KEY2=$((echo $PASS2; echo $SEED) | ${EXE} keys recover $USER2 -o json) - if ! assertTrue "recovery failed: $KEY2" $?; then return 1; fi - if [ -n "$DEBUG" ]; then echo $KEY2; echo; fi - - # make sure it looks the same - NAME2=$(echo $KEY2 | jq .name | tr -d \") - ADDR2=$(echo $KEY2 | jq .address | tr -d \") - PUBKEY2=$(echo $KEY2 | jq .pubkey | tr -d \") - assertEquals "line ${LINENO}: wrong username" "$USER2" "$NAME2" - assertEquals "line ${LINENO}: address doesn't match" "$ADDR" "$ADDR2" - assertEquals "line ${LINENO}: pubkey doesn't match" "$PUBKEY" "$PUBKEY2" - - # and we can find the info - assertTrue "line ${LINENO}" "${EXE} keys get $USER2 > /dev/null" -} - -# load and run these tests with shunit2! - -# load and run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/shunit2 diff --git a/_attic/examples/basecoin/tests/cli/rest.sh b/_attic/examples/basecoin/tests/cli/rest.sh deleted file mode 100755 index 076e08e3e4..0000000000 --- a/_attic/examples/basecoin/tests/cli/rest.sh +++ /dev/null @@ -1,161 +0,0 @@ -#!/bin/bash - -# These global variables are required for common.sh -SERVER_EXE=basecoin -CLIENT_EXE=basecli -ACCOUNTS=(jae ethan bucky rigel igor) -RICH=${ACCOUNTS[0]} -POOR=${ACCOUNTS[4]} - -BPORT=7000 -URL="localhost:${BPORT}" - -oneTimeSetUp() { - if ! quickSetup .basecoin_test_rest rest-chain; then - exit 1; - fi - baseserver serve --port $BPORT >/dev/null & - sleep 0.1 # for startup - PID_PROXY=$! - disown -} - -oneTimeTearDown() { - quickTearDown - kill -9 $PID_PROXY -} - -# XXX Ex Usage: restAddr $NAME -# Desc: Gets the address for a key name via rest -restAddr() { - assertNotNull "line=${LINENO}, keyname required" "$1" - ADDR=$(curl ${URL}/keys/${1} 2>/dev/null | jq .address | tr -d \") - assertNotEquals "line=${LINENO}, null key" "null" "$ADDR" - assertNotEquals "line=${LINENO}, no key" "" "$ADDR" - echo $ADDR -} - -# XXX Ex Usage: restAccount $ADDR $AMOUNT [$HEIGHT] -# Desc: Assumes just one coin, checks the balance of first coin in any case -restAccount() { - assertNotNull "line=${LINENO}, address required" "$1" - QUERY=${URL}/query/account/sigs:$1 - if [ -n "$3" ]; then - QUERY="${QUERY}?height=${3}" - fi - ACCT=$(curl ${QUERY} 2>/dev/null) - if [ -n "$DEBUG" ]; then echo $QUERY; echo $ACCT; echo; fi - assertEquals "line=${LINENO}, proper money" "$2" $(echo $ACCT | jq .data.coins[0].amount) - return $? -} - -restNoAccount() { - ERROR=$(curl ${URL}/query/account/sigs:$1 2>/dev/null) - assertEquals "line=${LINENO}, should error" 400 $(echo $ERROR | jq .code) -} - -test00GetAccount() { - RECV=$(restAddr $POOR) - SENDER=$(restAddr $RICH) - - restNoAccount $RECV - restAccount $SENDER "9007199254740992" -} - -test01SendTx() { - SENDER=$(restAddr $RICH) - RECV=$(restAddr $POOR) - - CMD="{\"from\": {\"app\": \"sigs\", \"addr\": \"$SENDER\"}, \"to\": {\"app\": \"sigs\", \"addr\": \"$RECV\"}, \"amount\": [{\"denom\": \"mycoin\", \"amount\": 992}], \"sequence\": 1}" - - UNSIGNED=$(curl -XPOST ${URL}/build/send -d "$CMD" 2>/dev/null) - if [ -n "$DEBUG" ]; then echo $UNSIGNED; echo; fi - - TOSIGN="{\"name\": \"$RICH\", \"password\": \"qwertyuiop\", \"tx\": $UNSIGNED}" - SIGNED=$(curl -XPOST ${URL}/sign -d "$TOSIGN" 2>/dev/null) - TX=$(curl -XPOST ${URL}/tx -d "$SIGNED" 2>/dev/null) - if [ -n "$DEBUG" ]; then echo $TX; echo; fi - - txSucceeded $? "$TX" "$RECV" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - restAccount $SENDER "9007199254740000" "$TX_HEIGHT" - restAccount $RECV "992" "$TX_HEIGHT" - - # Make sure tx is indexed - checkSendTx $HASH $TX_HEIGHT $SENDER "992" -} - - -# XXX Ex Usage: restCreateRole $PAYLOAD $EXPECTED -# Desc: Tests that the first returned signer.addr matches the expected -restCreateRole() { - assertNotNull "line=${LINENO}, data required" "$1" - ROLE=$(curl ${URL}/build/create_role --data "$1" 2>/dev/null) - if [ -n "$DEBUG" ]; then echo -e "$ROLE\n"; fi - assertEquals "line=${LINENO}, role required" "$2" $(echo $ROLE | jq .data.tx.data.signers[0].addr) - return $? -} - -test03CreateRole() { - DATA="{\"role\": \"726f6c65\", \"seq\": 1, \"min_sigs\": 1, \"signers\": [{\"addr\": \"4FF759D47C81754D8F553DCCAC8651D0AF74C7F9\", \"app\": \"role\"}]}" - restCreateRole "$DATA" \""4FF759D47C81754D8F553DCCAC8651D0AF74C7F9"\" -} - -test04CreateRoleInvalid() { - ERROR=$(curl ${URL}/build/create_role --data '{}' 2>/dev/null) - assertEquals "line=${LINENO}, should report validation failed" 0 $(echo $ERROR | grep "failed" > /dev/null && echo 0 || echo 1) - - ERROR=$(curl ${URL}/build/create_role --data '{"role": "foo"}' 2>/dev/null) - assertEquals "line=${LINENO}, should report validation failed" 0 $(echo $ERROR | grep "failed" > /dev/null && echo 0 || echo 1) - - ERROR=$(curl ${URL}/build/create_role --data '{"min_sigs": 2, "role": "abcdef"}' 2>/dev/null) - assertEquals "line=${LINENO}, should report validation failed" 0 $(echo $ERROR | grep "failed" > /dev/null && echo 0 || echo 1) - - ## Non-hex roles should be rejected - ERROR=$(curl ${URL}/build/create_role --data "{\"role\": \"foobar\", \"seq\": 2, \"signers\": [{\"addr\": \"4FF759D47C81754D8F553DCCAC8651D0AF74C7F9\", \"app\": \"role\"}], \"min_sigs\": 1}" 2>/dev/null) - assertEquals "line=${LINENO}, should report validation failed" 0 $(echo $ERROR | grep "invalid hex" > /dev/null && echo 0 || echo 1) -} - - -# test02SendTxWithFee() { -# SENDER=$(getAddr $RICH) -# RECV=$(getAddr $POOR) - -# # Test to see if the auto-sequencing works, the sequence here should be calculated to be 2 -# TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=90mycoin --fee=10mycoin --to=$RECV --name=$RICH) -# txSucceeded $? "$TX" "$RECV" -# HASH=$(echo $TX | jq .hash | tr -d \") -# TX_HEIGHT=$(echo $TX | jq .height) - -# # deduct 100 from sender, add 90 to receiver... fees "vanish" -# checkAccount $SENDER "9007199254739900" "$TX_HEIGHT" -# checkAccount $RECV "1082" "$TX_HEIGHT" - -# # Make sure tx is indexed -# checkSendFeeTx $HASH $TX_HEIGHT $SENDER "90" "10" - -# # assert replay protection -# TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=90mycoin --fee=10mycoin --sequence=2 --to=$RECV --name=$RICH 2>/dev/null) -# assertFalse "line=${LINENO}, replay: $TX" $? -# checkAccount $SENDER "9007199254739900" "$TX_HEIGHT" -# checkAccount $RECV "1082" "$TX_HEIGHT" - -# # make sure we can query the proper nonce -# NONCE=$(${CLIENT_EXE} query nonce $SENDER) -# if [ -n "$DEBUG" ]; then echo $NONCE; echo; fi -# # TODO: note that cobra returns error code 0 on parse failure, -# # so currently this check passes even if there is no nonce query command -# if assertTrue "line=${LINENO}, no nonce query" $?; then -# assertEquals "line=${LINENO}, proper nonce" "2" $(echo $NONCE | jq .data) -# fi -# } - - -# Load common then run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 diff --git a/_attic/examples/basecoin/tests/cli/restart.sh b/_attic/examples/basecoin/tests/cli/restart.sh deleted file mode 100755 index 1d85f94ccc..0000000000 --- a/_attic/examples/basecoin/tests/cli/restart.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash - -# these are two globals to control all scripts (can use eg. counter instead) -SERVER_EXE=basecoin -CLIENT_EXE=basecli -ACCOUNTS=(jae ethan bucky rigel igor) -RICH=${ACCOUNTS[0]} -POOR=${ACCOUNTS[4]} - -oneTimeSetUp() { - if ! quickSetup .basecoin_test_restart restart-chain; then - exit 1; - fi -} - -oneTimeTearDown() { - quickTearDown -} - -test00PreRestart() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=992mycoin --sequence=1 --to=$RECV --name=$RICH) - txSucceeded $? "$TX" "$RECV" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - checkAccount $SENDER "9007199254740000" "$TX_HEIGHT" - checkAccount $RECV "992" "$TX_HEIGHT" - - # make sure tx is indexed - checkSendTx $HASH $TX_HEIGHT $SENDER "992" - -} - -test01OnRestart() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=10000mycoin --sequence=2 --to=$RECV --name=$RICH) - txSucceeded $? "$TX" "$RECV" - if [ $? != 0 ]; then echo "can't make tx!"; return 1; fi - - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - # wait til we have quite a few blocks... like at least 20, - # so the query command won't just wait for the next eg. 7 blocks to verify the result - echo "waiting to generate lots of blocks..." - sleep 5 - echo "done waiting!" - - # last minute tx just at the block cut-off... - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=20000mycoin --sequence=3 --to=$RECV --name=$RICH) - txSucceeded $? "$TX" "$RECV" - if [ $? != 0 ]; then echo "can't make second tx!"; return 1; fi - - # now we do a restart... - quickTearDown - startServer $BASE_DIR/server $BASE_DIR/${SERVER_EXE}.log - if [ $? != 0 ]; then echo "can't restart server!"; return 1; fi - - # make sure queries still work properly, with all 3 tx now executed - echo "Checking state after restart..." - checkAccount $SENDER "9007199254710000" - checkAccount $RECV "30992" - - # make sure tx is indexed - checkSendTx $HASH $TX_HEIGHT $SENDER "10000" - - # for double-check of logs - if [ -n "$DEBUG" ]; then - cat $BASE_DIR/${SERVER_EXE}.log; - fi -} - - -# Load common then run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 - diff --git a/_attic/examples/basecoin/tests/cli/roles.sh b/_attic/examples/basecoin/tests/cli/roles.sh deleted file mode 100755 index 77d5f169d1..0000000000 --- a/_attic/examples/basecoin/tests/cli/roles.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash - -# These global variables are required for common.sh -SERVER_EXE=basecoin -CLIENT_EXE=basecli -ACCOUNTS=(jae ethan bucky rigel igor) -RICH=${ACCOUNTS[0]} -POOR=${ACCOUNTS[4]} -DUDE=${ACCOUNTS[2]} -ROLE="10CAFE4E" - -oneTimeSetUp() { - if ! quickSetup .basecoin_test_roles roles-chain; then - exit 1; - fi -} - -oneTimeTearDown() { - quickTearDown -} - -test01SetupRole() { - ONE=$(getAddr $RICH) - TWO=$(getAddr $POOR) - THREE=$(getAddr $DUDE) - MEMBERS=${ONE},${TWO},${THREE} - - SIGS=2 - - assertFalse "line=${LINENO}, missing min-sigs" "echo qwertyuiop | ${CLIENT_EXE} tx create-role --role=${ROLE} --members=${MEMBERS} --sequence=1 --name=$RICH" - assertFalse "line=${LINENO}, missing members" "echo qwertyuiop | ${CLIENT_EXE} tx create-role --role=${ROLE} --min-sigs=2 --sequence=1 --name=$RICH" - assertFalse "line=${LINENO}, missing role" "echo qwertyuiop | ${CLIENT_EXE} tx create-role --min-sigs=2 --members=${MEMBERS} --sequence=1 --name=$RICH" - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx create-role --role=${ROLE} --min-sigs=$SIGS --members=${MEMBERS} --sequence=1 --name=$RICH) - txSucceeded $? "$TX" "${ROLE}" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - checkRole "${ROLE}" $SIGS 3 "$TX_HEIGHT" - - # Make sure tx is indexed - checkRoleTx $HASH $TX_HEIGHT "${ROLE}" 3 -} - -test02SendTxToRole() { - SENDER=$(getAddr $RICH) - RECV=role:${ROLE} - - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --fee=90mycoin --amount=10000mycoin --to=$RECV --sequence=2 --name=$RICH) - txSucceeded $? "$TX" "${ROLE}" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - # reduce by 10090 - checkAccount $SENDER "9007199254730902" "$TX_HEIGHT" - checkAccount $RECV "10000" "$TX_HEIGHT" - - checkSendFeeTx $HASH $TX_HEIGHT $SENDER "10000" "90" -} - -test03SendMultiFromRole() { - ONE=$(getAddr $RICH) - TWO=$(getAddr $POOR) - THREE=$(getAddr $DUDE) - BANK=role:${ROLE} - - # no money to start mr. poor... - assertFalse "line=${LINENO}, has no money yet" "${CLIENT_EXE} query account $TWO 2>/dev/null" - - # let's try to send money from the role directly without multisig - FAIL=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=6000mycoin --from=$BANK --to=$TWO --sequence=1 --name=$POOR 2>/dev/null) - assertFalse "need to assume role" $? - FAIL=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=6000mycoin --from=$BANK --to=$TWO --sequence=2 --assume-role=${ROLE} --name=$POOR 2>/dev/null) - assertFalse "need two signatures" $? - - # okay, begin a multisig transaction mr. poor... - TX_FILE=$BASE_DIR/tx.json - echo qwertyuiop | ${CLIENT_EXE} tx send --amount=6000mycoin --from=$BANK --to=$TWO --sequence=1 --assume-role=${ROLE} --name=$POOR --multi --prepare=$TX_FILE - assertTrue "line=${LINENO}, successfully prepare tx" $? - # and get some dude to sign it - # FAIL=$(echo qwertyuiop | ${CLIENT_EXE} tx --in=$TX_FILE --name=$POOR 2>/dev/null) - # assertFalse "line=${LINENO}, double signing doesn't get bank" $? - # and get some dude to sign it for the full access - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx --in=$TX_FILE --name=$DUDE) - txSucceeded $? "$TX" "multi-bank" - TX_HEIGHT=$(echo $TX | jq .height) - - checkAccount $TWO "6000" "$TX_HEIGHT" - checkAccount $BANK "4000" "$TX_HEIGHT" -} - - -# Load common then run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 diff --git a/_attic/examples/basecoin/tests/cli/rpc.sh b/_attic/examples/basecoin/tests/cli/rpc.sh deleted file mode 100755 index 5ab6022d9b..0000000000 --- a/_attic/examples/basecoin/tests/cli/rpc.sh +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/bash - -CLIENT_EXE=basecli -SERVER_EXE=basecoin - -oneTimeSetUp() { - BASE=~/.bc_init_test - rm -rf "$BASE" - mkdir -p "$BASE" - - SERVER="${BASE}/server" - SERVER_LOG="${BASE}/${SERVER_EXE}.log" - - HEX="deadbeef1234deadbeef1234deadbeef1234aaaa" - ${SERVER_EXE} init ${HEX} --home="$SERVER" >> "$SERVER_LOG" - if ! assertTrue "line=${LINENO}" $?; then return 1; fi - - GENESIS_FILE=${SERVER}/genesis.json - CHAIN_ID=$(cat ${GENESIS_FILE} | jq .chain_id | tr -d \") - - printf "starting ${SERVER_EXE}...\n" - ${SERVER_EXE} start --home="$SERVER" >> "$SERVER_LOG" 2>&1 & - sleep 5 - PID_SERVER=$! - disown - if ! ps $PID_SERVER >/dev/null; then - echo "**STARTUP FAILED**" - cat $SERVER_LOG - return 1 - fi - - # this sets the base for all client queries in the tests - export BCHOME=${BASE}/client - ${CLIENT_EXE} init --node=tcp://localhost:46657 --genesis=${GENESIS_FILE} > /dev/null 2>&1 - if ! assertTrue "line=${LINENO}, initialized light-client" "$?"; then - return 1 - fi -} - -oneTimeTearDown() { - printf "\nstopping ${SERVER_EXE}..." - kill -9 $PID_SERVER >/dev/null 2>&1 - sleep 1 -} - -test01GetInsecure() { - GENESIS=$(${CLIENT_EXE} rpc genesis) - assertTrue "line=${LINENO}, get genesis" "$?" - MYCHAIN=$(echo ${GENESIS} | jq .genesis.chain_id | tr -d \") - assertEquals "line=${LINENO}, genesis chain matches" "${CHAIN_ID}" "${MYCHAIN}" - - STATUS=$(${CLIENT_EXE} rpc status) - assertTrue "line=${LINENO}, get status" "$?" - SHEIGHT=$(echo ${STATUS} | jq .latest_block_height) - assertTrue "line=${LINENO}, parsed status" "$?" - assertNotNull "line=${LINENO}, has a height" "${SHEIGHT}" - - VALS=$(${CLIENT_EXE} rpc validators) - assertTrue "line=${LINENO}, get validators" "$?" - VHEIGHT=$(echo ${VALS} | jq .block_height) - assertTrue "line=${LINENO}, parsed validators" "$?" - assertTrue "line=${LINENO}, sensible heights: $SHEIGHT / $VHEIGHT" "test $VHEIGHT -ge $SHEIGHT" - VCNT=$(echo ${VALS} | jq '.validators | length') - assertEquals "line=${LINENO}, one validator" "1" "$VCNT" - - INFO=$(${CLIENT_EXE} rpc info) - assertTrue "line=${LINENO}, get info" "$?" - DATA=$(echo $INFO | jq .response.data) - assertEquals "line=${LINENO}, basecoin info" '"basecoin v0.7.1"' "$DATA" -} - -test02GetSecure() { - HEIGHT=$(${CLIENT_EXE} rpc status | jq .latest_block_height) - assertTrue "line=${LINENO}, get status" "$?" - - # check block produces something reasonable - assertFalse "line=${LINENO}, missing height" "${CLIENT_EXE} rpc block" - BLOCK=$(${CLIENT_EXE} rpc block --height=$HEIGHT) - assertTrue "line=${LINENO}, get block" "$?" - MHEIGHT=$(echo $BLOCK | jq .block_meta.header.height) - assertEquals "line=${LINENO}, meta height" "${HEIGHT}" "${MHEIGHT}" - BHEIGHT=$(echo $BLOCK | jq .block.header.height) - assertEquals "line=${LINENO}, meta height" "${HEIGHT}" "${BHEIGHT}" - - # check commit produces something reasonable - assertFalse "line=${LINENO}, missing height" "${CLIENT_EXE} rpc commit" - let "CHEIGHT = $HEIGHT - 1" - COMMIT=$(${CLIENT_EXE} rpc commit --height=$CHEIGHT) - assertTrue "line=${LINENO}, get commit" "$?" - HHEIGHT=$(echo $COMMIT | jq .header.height) - assertEquals "line=${LINENO}, commit height" "${CHEIGHT}" "${HHEIGHT}" - assertEquals "line=${LINENO}, canonical" "true" $(echo $COMMIT | jq .canonical) - BSIG=$(echo $BLOCK | jq .block.last_commit) - CSIG=$(echo $COMMIT | jq .commit) - assertEquals "line=${LINENO}, block and commit" "$BSIG" "$CSIG" - - # now let's get some headers - # assertFalse "missing height" "${CLIENT_EXE} rpc headers" - HEADERS=$(${CLIENT_EXE} rpc headers --min=$CHEIGHT --max=$HEIGHT) - assertTrue "line=${LINENO}, get headers" "$?" - assertEquals "line=${LINENO}, proper height" "$HEIGHT" $(echo $HEADERS | jq '.block_metas[0].header.height') - assertEquals "line=${LINENO}, two headers" "2" $(echo $HEADERS | jq '.block_metas | length') - # should we check these headers? - CHEAD=$(echo $COMMIT | jq .header) - # most recent first, so the commit header is second.... - HHEAD=$(echo $HEADERS | jq .block_metas[1].header) - assertEquals "line=${LINENO}, commit and header" "$CHEAD" "$HHEAD" -} - -test03Waiting() { - START=$(${CLIENT_EXE} rpc status | jq .latest_block_height) - assertTrue "line=${LINENO}, get status" "$?" - - let "NEXT = $START + 5" - assertFalse "line=${LINENO}, no args" "${CLIENT_EXE} rpc wait" - assertFalse "line=${LINENO}, too long" "${CLIENT_EXE} rpc wait --height=1234" - assertTrue "line=${LINENO}, normal wait" "${CLIENT_EXE} rpc wait --height=$NEXT" - - STEP=$(${CLIENT_EXE} rpc status | jq .latest_block_height) - assertEquals "line=${LINENO}, wait until height" "$NEXT" "$STEP" - - let "NEXT = $STEP + 3" - assertTrue "line=${LINENO}, ${CLIENT_EXE} rpc wait --delta=3" - STEP=$(${CLIENT_EXE} rpc status | jq .latest_block_height) - assertEquals "line=${LINENO}, wait for delta" "$NEXT" "$STEP" -} - -# load and run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/shunit2 diff --git a/_attic/examples/counter/Makefile b/_attic/examples/counter/Makefile deleted file mode 100644 index 9fd61be897..0000000000 --- a/_attic/examples/counter/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -LINKER_FLAGS:="-X github.com/cosmos/cosmos-sdk/client/commands.CommitHash=`git rev-parse --short HEAD`" - -install: - @go install -ldflags $(LINKER_FLAGS) ./cmd/... - -test: test_unit test_cli - -test_unit: - @go test `glide novendor` - -test_cli: - ./tests/cli/counter.sh - -.PHONY: install test test_unit test_cli diff --git a/_attic/examples/counter/cmd/counter/main.go b/_attic/examples/counter/cmd/counter/main.go deleted file mode 100644 index b747e3be0d..0000000000 --- a/_attic/examples/counter/cmd/counter/main.go +++ /dev/null @@ -1,36 +0,0 @@ -package main - -import ( - "os" - - "github.com/spf13/cobra" - - "github.com/tendermint/tmlibs/cli" - - client "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/examples/counter/plugins/counter" - "github.com/cosmos/cosmos-sdk/server/commands" -) - -// RootCmd is the entry point for this binary -var RootCmd = &cobra.Command{ - Use: "counter", - Short: "demo application for cosmos sdk", -} - -func main() { - - // TODO: register the counter here - commands.Handler = counter.NewHandler("mycoin") - - RootCmd.AddCommand( - commands.InitCmd, - commands.StartCmd, - commands.UnsafeResetAllCmd, - client.VersionCmd, - ) - commands.SetUpRoot(RootCmd) - - cmd := cli.PrepareMainCmd(RootCmd, "CT", os.ExpandEnv("$HOME/.counter")) - cmd.Execute() -} diff --git a/_attic/examples/counter/cmd/countercli/commands/counter.go b/_attic/examples/counter/cmd/countercli/commands/counter.go deleted file mode 100644 index cb22cdb502..0000000000 --- a/_attic/examples/counter/cmd/countercli/commands/counter.go +++ /dev/null @@ -1,52 +0,0 @@ -package commands - -import ( - "github.com/spf13/cobra" - "github.com/spf13/viper" - - sdk "github.com/cosmos/cosmos-sdk" - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - "github.com/cosmos/cosmos-sdk/examples/counter/plugins/counter" - "github.com/cosmos/cosmos-sdk/modules/coin" -) - -//CounterTxCmd is the CLI command to execute the counter -// through the appTx Command -var CounterTxCmd = &cobra.Command{ - Use: "counter", - Short: "add a vote to the counter", - Long: `Add a vote to the counter. - -You must pass --valid for it to count and the countfee will be added to the counter.`, - RunE: counterTx, -} - -// nolint - flags names -const ( - FlagCountFee = "countfee" - FlagValid = "valid" -) - -func init() { - fs := CounterTxCmd.Flags() - fs.String(FlagCountFee, "", "Coins to send in the format ,...") - fs.Bool(FlagValid, false, "Is count valid?") -} - -func counterTx(cmd *cobra.Command, args []string) error { - tx, err := readCounterTxFlags() - if err != nil { - return err - } - return txcmd.DoTx(tx) -} - -func readCounterTxFlags() (tx sdk.Tx, err error) { - feeCoins, err := coin.ParseCoins(viper.GetString(FlagCountFee)) - if err != nil { - return tx, err - } - - tx = counter.NewTx(viper.GetBool(FlagValid), feeCoins) - return tx, nil -} diff --git a/_attic/examples/counter/cmd/countercli/commands/query.go b/_attic/examples/counter/cmd/countercli/commands/query.go deleted file mode 100644 index 40a42df725..0000000000 --- a/_attic/examples/counter/cmd/countercli/commands/query.go +++ /dev/null @@ -1,32 +0,0 @@ -package commands - -import ( - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/query" - - "github.com/cosmos/cosmos-sdk/examples/counter/plugins/counter" - "github.com/cosmos/cosmos-sdk/stack" -) - -//CounterQueryCmd - CLI command to query the counter state -var CounterQueryCmd = &cobra.Command{ - Use: "counter", - Short: "Query counter state, with proof", - RunE: counterQueryCmd, -} - -func counterQueryCmd(cmd *cobra.Command, args []string) error { - var cp counter.State - - prove := !viper.GetBool(commands.FlagTrustNode) - key := stack.PrefixedKey(counter.NameCounter, counter.StateKey()) - h, err := query.GetParsed(key, &cp, query.GetHeight(), prove) - if err != nil { - return err - } - - return query.OutputProof(cp, h) -} diff --git a/_attic/examples/counter/cmd/countercli/main.go b/_attic/examples/counter/cmd/countercli/main.go deleted file mode 100644 index d2845aefc9..0000000000 --- a/_attic/examples/counter/cmd/countercli/main.go +++ /dev/null @@ -1,85 +0,0 @@ -package main - -import ( - "os" - - "github.com/spf13/cobra" - - "github.com/tendermint/tmlibs/cli" - - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/commits" - "github.com/cosmos/cosmos-sdk/client/commands/keys" - "github.com/cosmos/cosmos-sdk/client/commands/proxy" - "github.com/cosmos/cosmos-sdk/client/commands/query" - - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - bcount "github.com/cosmos/cosmos-sdk/examples/counter/cmd/countercli/commands" - authcmd "github.com/cosmos/cosmos-sdk/modules/auth/commands" - basecmd "github.com/cosmos/cosmos-sdk/modules/base/commands" - coincmd "github.com/cosmos/cosmos-sdk/modules/coin/commands" - feecmd "github.com/cosmos/cosmos-sdk/modules/fee/commands" - noncecmd "github.com/cosmos/cosmos-sdk/modules/nonce/commands" -) - -// CounterCli represents the base command when called without any subcommands -var CounterCli = &cobra.Command{ - Use: "countercli", - Short: "Example app built using the Cosmos SDK", - Long: `Countercli is a demo app that includes custom logic to -present a formatted interface to a custom blockchain structure. - -This is a useful tool and also serves to demonstrate how to configure -the Cosmos SDK to work for any custom ABCI app, see: - -`, -} - -func main() { - commands.AddBasicFlags(CounterCli) - - // Prepare queries - query.RootCmd.AddCommand( - // These are default parsers, optional in your app - query.TxQueryCmd, - query.KeyQueryCmd, - coincmd.AccountQueryCmd, - noncecmd.NonceQueryCmd, - - // XXX IMPORTANT: here is how you add custom query commands in your app - bcount.CounterQueryCmd, - ) - - // set up the middleware - txcmd.Middleware = txcmd.Wrappers{ - feecmd.FeeWrapper{}, - noncecmd.NonceWrapper{}, - basecmd.ChainWrapper{}, - authcmd.SigWrapper{}, - } - txcmd.Middleware.Register(txcmd.RootCmd.PersistentFlags()) - - // Prepare transactions - txcmd.RootCmd.AddCommand( - // This is the default transaction, optional in your app - coincmd.SendTxCmd, - - // XXX IMPORTANT: here is how you add custom tx construction for your app - bcount.CounterTxCmd, - ) - - // Set up the various commands to use - CounterCli.AddCommand( - commands.InitCmd, - commands.ResetCmd, - commands.VersionCmd, - keys.RootCmd, - commits.RootCmd, - query.RootCmd, - txcmd.RootCmd, - proxy.RootCmd, - ) - - cmd := cli.PrepareMainCmd(CounterCli, "CTL", os.ExpandEnv("$HOME/.countercli")) - cmd.Execute() -} diff --git a/_attic/examples/counter/plugins/counter/counter.go b/_attic/examples/counter/plugins/counter/counter.go deleted file mode 100644 index 7ce08761db..0000000000 --- a/_attic/examples/counter/plugins/counter/counter.go +++ /dev/null @@ -1,226 +0,0 @@ -package counter - -import ( - "fmt" - - abci "github.com/tendermint/abci/types" - "github.com/tendermint/go-wire" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/modules/auth" - "github.com/cosmos/cosmos-sdk/modules/base" - "github.com/cosmos/cosmos-sdk/modules/coin" - "github.com/cosmos/cosmos-sdk/modules/fee" - "github.com/cosmos/cosmos-sdk/modules/ibc" - "github.com/cosmos/cosmos-sdk/modules/nonce" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -// Tx -//-------------------------------------------------------------------------------- - -// register the tx type with it's validation logic -// make sure to use the name of the handler as the prefix in the tx type, -// so it gets routed properly -const ( - NameCounter = "cntr" - ByteTx = 0x2F //TODO What does this byte represent should use typebytes probably - TypeTx = NameCounter + "/count" -) - -func init() { - sdk.TxMapper.RegisterImplementation(Tx{}, TypeTx, ByteTx) -} - -// Tx - struct for all counter transactions -type Tx struct { - Valid bool `json:"valid"` - Fee coin.Coins `json:"fee"` -} - -// NewTx - return a new counter transaction struct wrapped as a basecoin transaction -func NewTx(valid bool, fee coin.Coins) sdk.Tx { - return Tx{ - Valid: valid, - Fee: fee, - }.Wrap() -} - -// Wrap - Wrap a Tx as a Basecoin Tx, used to satisfy the XXX interface -func (c Tx) Wrap() sdk.Tx { - return sdk.Tx{TxInner: c} -} - -// ValidateBasic just makes sure the Fee is a valid, non-negative value -func (c Tx) ValidateBasic() error { - if !c.Fee.IsValid() { - return coin.ErrInvalidCoins() - } - if !c.Fee.IsNonnegative() { - return coin.ErrInvalidCoins() - } - return nil -} - -// Custom errors -//-------------------------------------------------------------------------------- - -var ( - errInvalidCounter = fmt.Errorf("Counter Tx marked invalid") -) - -// ErrInvalidCounter - custom error class -func ErrInvalidCounter() error { - return errors.WithCode(errInvalidCounter, abci.CodeType_BaseInvalidInput) -} - -// IsInvalidCounterErr - custom error class check -func IsInvalidCounterErr(err error) bool { - return errors.IsSameError(errInvalidCounter, err) -} - -// ErrDecoding - This is just a helper function to return a generic "internal error" -func ErrDecoding() error { - return errors.ErrInternal("Error decoding state") -} - -// Counter Handler -//-------------------------------------------------------------------------------- - -// NewHandler returns a new counter transaction processing handler -func NewHandler(feeDenom string) sdk.Handler { - return stack.New( - base.Logger{}, - stack.Recovery{}, - auth.Signatures{}, - base.Chain{}, - stack.Checkpoint{OnCheck: true}, - nonce.ReplayCheck{}, - ). - IBC(ibc.NewMiddleware()). - Apps( - roles.NewMiddleware(), - fee.NewSimpleFeeMiddleware(coin.Coin{feeDenom, 0}, fee.Bank), - stack.Checkpoint{OnDeliver: true}, - ). - Dispatch( - coin.NewHandler(), - Handler{}, - ) -} - -// Handler the counter transaction processing handler -type Handler struct { - stack.PassInitState - stack.PassInitValidate -} - -var _ stack.Dispatchable = Handler{} - -// Name - return counter namespace -func (Handler) Name() string { - return NameCounter -} - -// AssertDispatcher - placeholder to satisfy XXX -func (Handler) AssertDispatcher() {} - -// CheckTx checks if the tx is properly structured -func (h Handler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, _ sdk.Checker) (res sdk.CheckResult, err error) { - _, err = checkTx(ctx, tx) - return -} - -// DeliverTx executes the tx if valid -func (h Handler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, dispatch sdk.Deliver) (res sdk.DeliverResult, err error) { - ctr, err := checkTx(ctx, tx) - if err != nil { - return res, err - } - // note that we don't assert this on CheckTx (ValidateBasic), - // as we allow them to be writen to the chain - if !ctr.Valid { - return res, ErrInvalidCounter() - } - - // handle coin movement.... like, actually decrement the other account - if !ctr.Fee.IsZero() { - // take the coins and put them in out account! - senders := ctx.GetPermissions("", auth.NameSigs) - if len(senders) == 0 { - return res, errors.ErrMissingSignature() - } - in := []coin.TxInput{{Address: senders[0], Coins: ctr.Fee}} - out := []coin.TxOutput{{Address: StoreActor(), Coins: ctr.Fee}} - send := coin.NewSendTx(in, out) - // if the deduction fails (too high), abort the command - _, err = dispatch.DeliverTx(ctx, store, send) - if err != nil { - return res, err - } - } - - // update the counter - state, err := LoadState(store) - if err != nil { - return res, err - } - state.Counter++ - state.TotalFees = state.TotalFees.Plus(ctr.Fee) - err = SaveState(store, state) - - return res, err -} - -func checkTx(ctx sdk.Context, tx sdk.Tx) (ctr Tx, err error) { - ctr, ok := tx.Unwrap().(Tx) - if !ok { - return ctr, errors.ErrInvalidFormat(TypeTx, tx) - } - err = ctr.ValidateBasic() - if err != nil { - return ctr, err - } - return ctr, nil -} - -// CounterStore -//-------------------------------------------------------------------------------- - -// StoreActor - return the basecoin actor for the account -func StoreActor() sdk.Actor { - return sdk.Actor{App: NameCounter, Address: []byte{0x04, 0x20}} //XXX what do these bytes represent? - should use typebyte variables -} - -// State - state of the counter applicaton -type State struct { - Counter int `json:"counter"` - TotalFees coin.Coins `json:"total_fees"` -} - -// StateKey - store key for the counter state -func StateKey() []byte { - return []byte("state") -} - -// LoadState - retrieve the counter state from the store -func LoadState(store state.SimpleDB) (state State, err error) { - bytes := store.Get(StateKey()) - if len(bytes) > 0 { - err = wire.ReadBinaryBytes(bytes, &state) - if err != nil { - return state, errors.ErrDecoding() - } - } - return state, nil -} - -// SaveState - save the counter state to the provided store -func SaveState(store state.SimpleDB, state State) error { - bytes := wire.BinaryBytes(state) - store.Set(StateKey(), bytes) - return nil -} diff --git a/_attic/examples/counter/plugins/counter/counter_test.go b/_attic/examples/counter/plugins/counter/counter_test.go deleted file mode 100644 index 5c1ef254a2..0000000000 --- a/_attic/examples/counter/plugins/counter/counter_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package counter - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - abci "github.com/tendermint/abci/types" - "github.com/tendermint/go-wire" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/app" - "github.com/cosmos/cosmos-sdk/modules/auth" - "github.com/cosmos/cosmos-sdk/modules/base" - "github.com/cosmos/cosmos-sdk/modules/coin" - "github.com/cosmos/cosmos-sdk/modules/nonce" -) - -func TestCounterPlugin(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // Basecoin initialization - chainID := "test_chain_id" - logger := log.TestingLogger() - // logger := log.NewTracingLogger(log.NewTMLogger(os.Stdout)) - - h := NewHandler("gold") - store, err := app.MockStoreApp("counter", logger) - require.Nil(err, "%+v", err) - bcApp := app.NewBaseApp(store, h, nil) - err = bcApp.InitState("base", "chain_id", chainID) - require.Nil(err, "%+v", err) - - // Account initialization - bal := coin.Coins{{"", 1000}, {"gold", 1000}} - acct := coin.NewAccountWithKey(bal) - err = bcApp.InitState("coin", "account", acct.MakeOption()) - require.Nil(err, "%+v", err) - - // Deliver a CounterTx - DeliverCounterTx := func(valid bool, counterFee coin.Coins, sequence uint32) abci.Result { - tx := NewTx(valid, counterFee) - tx = nonce.NewTx(sequence, []sdk.Actor{acct.Actor()}, tx) - tx = base.NewChainTx(chainID, 0, tx) - stx := auth.NewSig(tx) - auth.Sign(stx, acct.Key) - txBytes := wire.BinaryBytes(stx.Wrap()) - return bcApp.DeliverTx(txBytes) - } - - // Test a basic send, no fee - res := DeliverCounterTx(true, nil, 1) - assert.True(res.IsOK(), res.String()) - - // Test an invalid send, no fee - res = DeliverCounterTx(false, nil, 2) - assert.True(res.IsErr(), res.String()) - - // Test an invalid sequence - res = DeliverCounterTx(true, nil, 2) - assert.True(res.IsErr(), res.String()) - - // Test an valid send, with supported fee - res = DeliverCounterTx(true, coin.Coins{{"gold", 100}}, 3) - assert.True(res.IsOK(), res.String()) - - // Test unsupported fee - res = DeliverCounterTx(true, coin.Coins{{"silver", 100}}, 4) - assert.True(res.IsErr(), res.String()) -} diff --git a/_attic/examples/counter/tests/cli/counter.sh b/_attic/examples/counter/tests/cli/counter.sh deleted file mode 100755 index f1c9a4c05d..0000000000 --- a/_attic/examples/counter/tests/cli/counter.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/bash - -# These global variables are required for common.sh -SERVER_EXE=counter -CLIENT_EXE=countercli -ACCOUNTS=(jae ethan bucky rigel igor) -RICH=${ACCOUNTS[0]} -POOR=${ACCOUNTS[4]} - -oneTimeSetUp() { - if ! quickSetup .basecoin_test_counter counter-chain; then - exit 1; - fi -} - -oneTimeTearDown() { - quickTearDown -} - -test00GetAccount() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - assertFalse "Line=${LINENO}, requires arg" "${CLIENT_EXE} query account" - - checkAccount $SENDER "9007199254740992" - - ACCT2=$(${CLIENT_EXE} query account $RECV 2>/dev/null) - assertFalse "Line=${LINENO}, has no genesis account" $? -} - -test01SendTx() { - SENDER=$(getAddr $RICH) - RECV=$(getAddr $POOR) - - # sequence should work well for first time also - assertFalse "Line=${LINENO}, missing dest" "${CLIENT_EXE} tx send --amount=992mycoin 2>/dev/null" - assertFalse "Line=${LINENO}, bad password" "echo foo | ${CLIENT_EXE} tx send --amount=992mycoin --to=$RECV --name=$RICH 2>/dev/null" - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx send --amount=992mycoin --to=$RECV --name=$RICH) - txSucceeded $? "$TX" "$RECV" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - checkAccount $SENDER "9007199254740000" "$TX_HEIGHT" - checkAccount $RECV "992" "$TX_HEIGHT" - - # make sure tx is indexed - checkSendTx $HASH $TX_HEIGHT $SENDER "992" -} - -test02GetCounter() { - COUNT=$(${CLIENT_EXE} query counter 2>/dev/null) - assertFalse "Line=${LINENO}, no default count" $? -} - -# checkCounter $COUNT $BALANCE [$HEIGHT] -# Assumes just one coin, checks the balance of first coin in any case -# pass optional height to query which block to query -checkCounter() { - # default height of 0, but accept an argument - HEIGHT=${3:-0} - - # make sure sender goes down - ACCT=$(${CLIENT_EXE} query counter --height=$HEIGHT) - if assertTrue "Line=${LINENO}, count is set" $?; then - assertEquals "Line=${LINENO}, proper count" "$1" $(echo $ACCT | jq .data.counter) - assertEquals "Line=${LINENO}, proper money" "$2" $(echo $ACCT | jq .data.total_fees[0].amount) - fi -} - -test03AddCount() { - SENDER=$(getAddr $RICH) - assertFalse "Line=${LINENO}, bad password" "echo hi | ${CLIENT_EXE} tx counter --countfee=100mycoin --sequence=2 --name=${RICH} 2>/dev/null" - - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx counter --countfee=10mycoin --sequence=2 --name=${RICH} --valid) - txSucceeded $? "$TX" "counter" - HASH=$(echo $TX | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TX | jq .height) - - # make sure the counter was updated - checkCounter "1" "10" "$TX_HEIGHT" - - # make sure the account was debited - checkAccount $SENDER "9007199254739990" "$TX_HEIGHT" - - # make sure tx is indexed - TX=$(${CLIENT_EXE} query tx $HASH --trace) - if assertTrue "Line=${LINENO}, found tx" $?; then - assertEquals "Line=${LINENO}, proper height" $TX_HEIGHT $(echo $TX | jq .height) - assertEquals "Line=${LINENO}, type=sigs/one" '"sigs/one"' $(echo $TX | jq .data.type) - CTX=$(echo $TX | jq .data.data.tx) - assertEquals "Line=${LINENO}, type=chain/tx" '"chain/tx"' $(echo $CTX | jq .type) - NTX=$(echo $CTX | jq .data.tx) - assertEquals "line=${LINENO}, type=nonce" '"nonce"' $(echo $NTX | jq .type) - CNTX=$(echo $NTX | jq .data.tx) - assertEquals "Line=${LINENO}, type=cntr/count" '"cntr/count"' $(echo $CNTX | jq .type) - assertEquals "Line=${LINENO}, proper fee" "10" $(echo $CNTX | jq .data.fee[0].amount) - fi - - # test again with fees... - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx counter --countfee=7mycoin --fee=4mycoin --sequence=3 --name=${RICH} --valid) - txSucceeded $? "$TX" "counter" - TX_HEIGHT=$(echo $TX | jq .height) - - # make sure the counter was updated, added 7 - checkCounter "2" "17" "$TX_HEIGHT" - # make sure the account was debited 11 - checkAccount $SENDER "9007199254739979" "$TX_HEIGHT" - - # make sure we cannot replay the counter, no state change - TX=$(echo qwertyuiop | ${CLIENT_EXE} tx counter --countfee=10mycoin --sequence=2 --name=${RICH} --valid 2>/dev/null) - assertFalse "line=${LINENO}, replay: $TX" $? - TX_HEIGHT=$(echo $TX | jq .height) - - checkCounter "2" "17" "$TX_HEIGHT" - checkAccount $SENDER "9007199254739979" "$TX_HEIGHT" -} - -# Load common then run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 diff --git a/_attic/examples/eyes/Makefile b/_attic/examples/eyes/Makefile deleted file mode 100644 index e543a4ccf0..0000000000 --- a/_attic/examples/eyes/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -LINKER_FLAGS:="-X github.com/cosmos/cosmos-sdk/client/commands.CommitHash=`git rev-parse --short HEAD`" - -install: - @go install -ldflags $(LINKER_FLAGS) ./cmd/... - -test: test_unit test_cli - -test_unit: - @go test `glide novendor` - -test_cli: - ./tests/cli/eyes.sh - -.PHONY: install test test_unit test_cli diff --git a/_attic/examples/eyes/cmd/eyes/init.go b/_attic/examples/eyes/cmd/eyes/init.go deleted file mode 100644 index 29e682193b..0000000000 --- a/_attic/examples/eyes/cmd/eyes/init.go +++ /dev/null @@ -1,58 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/spf13/cobra" - "github.com/spf13/viper" - - tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" - - "github.com/cosmos/cosmos-sdk/server/commands" -) - -// InitCmd - node initialization command -var InitCmd = &cobra.Command{ - Use: "init", - Short: "Initialize eyes abci server", - RunE: initCmd, -} - -//nolint - flags -var ( - FlagChainID = "chain-id" //TODO group with other flags or remove? is this already a flag here? -) - -func init() { - InitCmd.Flags().String(FlagChainID, "eyes_test_id", "Chain ID") -} - -func initCmd(cmd *cobra.Command, args []string) error { - // this will ensure that config.toml is there if not yet created, and create dir - cfg, err := tcmd.ParseConfig() - if err != nil { - return err - } - - genesis := getGenesisJSON(viper.GetString(commands.FlagChainID)) - return commands.CreateGenesisValidatorFiles(cfg, genesis, commands.StaticPrivValJSON, cmd.Root().Name()) -} - -// TODO: better, auto-generate validator... -func getGenesisJSON(chainID string) string { - return fmt.Sprintf(`{ - "app_hash": "", - "chain_id": "%s", - "genesis_time": "0001-01-01T00:00:00.000Z", - "validators": [ - { - "power": 10, - "name": "", - "pub_key": { - "type": "ed25519", - "data": "7B90EA87E7DC0C7145C8C48C08992BE271C7234134343E8A8E8008E617DE7B30" - } - } - ] -}`, chainID) -} diff --git a/_attic/examples/eyes/cmd/eyes/main.go b/_attic/examples/eyes/cmd/eyes/main.go deleted file mode 100644 index df30fc9213..0000000000 --- a/_attic/examples/eyes/cmd/eyes/main.go +++ /dev/null @@ -1,51 +0,0 @@ -package main - -import ( - "os" - - "github.com/spf13/cobra" - "github.com/tendermint/tmlibs/cli" - - sdk "github.com/cosmos/cosmos-sdk" - client "github.com/cosmos/cosmos-sdk/client/commands" - eyesmod "github.com/cosmos/cosmos-sdk/modules/eyes" - "github.com/cosmos/cosmos-sdk/server/commands" - "github.com/cosmos/cosmos-sdk/util" - - "github.com/cosmos/cosmos-sdk/examples/eyes" -) - -// RootCmd is the entry point for this binary -var RootCmd = &cobra.Command{ - Use: "eyes", - Short: "key-value store", - Long: "A demo app to show key-value store with proofs over abci", -} - -// BuildApp constructs the stack we want to use for this app -func BuildApp() sdk.Handler { - return sdk.ChainDecorators( - util.Logger{}, - util.Recovery{}, - eyes.Parser{}, - util.Chain{}, - ).WithHandler( - eyesmod.NewHandler(), - ) -} - -func main() { - commands.Handler = BuildApp() - - RootCmd.AddCommand( - // out own init command to not require argument - InitCmd, - commands.StartCmd, - commands.UnsafeResetAllCmd, - client.VersionCmd, - ) - commands.SetUpRoot(RootCmd) - - cmd := cli.PrepareMainCmd(RootCmd, "EYE", os.ExpandEnv("$HOME/.eyes")) - cmd.Execute() -} diff --git a/_attic/examples/eyes/cmd/eyescli/main.go b/_attic/examples/eyes/cmd/eyescli/main.go deleted file mode 100644 index d23a0e8dc3..0000000000 --- a/_attic/examples/eyes/cmd/eyescli/main.go +++ /dev/null @@ -1,63 +0,0 @@ -package main - -import ( - "os" - - "github.com/spf13/cobra" - - "github.com/tendermint/tmlibs/cli" - - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/auto" - "github.com/cosmos/cosmos-sdk/client/commands/commits" - "github.com/cosmos/cosmos-sdk/client/commands/query" - rpccmd "github.com/cosmos/cosmos-sdk/client/commands/rpc" - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - eyescmd "github.com/cosmos/cosmos-sdk/modules/eyes/commands" -) - -// EyesCli - main basecoin client command -var EyesCli = &cobra.Command{ - Use: "eyescli", - Short: "Light client for Tendermint", - Long: `EyesCli is the light client for a merkle key-value store (eyes)`, -} - -func main() { - commands.AddBasicFlags(EyesCli) - - // Prepare queries - query.RootCmd.AddCommand( - // These are default parsers, but optional in your app (you can remove key) - query.TxQueryCmd, - query.KeyQueryCmd, - // this is our custom parser - eyescmd.EyesQueryCmd, - ) - - // no middleware wrapers - txcmd.Middleware = txcmd.Wrappers{} - // txcmd.Middleware.Register(txcmd.RootCmd.PersistentFlags()) - - // just the etc commands - txcmd.RootCmd.AddCommand( - eyescmd.SetTxCmd, - eyescmd.RemoveTxCmd, - ) - - // Set up the various commands to use - EyesCli.AddCommand( - // we use out own init command to not require address arg - commands.InitCmd, - commands.ResetCmd, - commits.RootCmd, - rpccmd.RootCmd, - query.RootCmd, - txcmd.RootCmd, - commands.VersionCmd, - auto.AutoCompleteCmd, - ) - - cmd := cli.PrepareMainCmd(EyesCli, "EYE", os.ExpandEnv("$HOME/.eyescli")) - cmd.Execute() -} diff --git a/_attic/examples/eyes/parser.go b/_attic/examples/eyes/parser.go deleted file mode 100644 index b8dd908ebe..0000000000 --- a/_attic/examples/eyes/parser.go +++ /dev/null @@ -1,32 +0,0 @@ -package eyes - -import sdk "github.com/cosmos/cosmos-sdk" - -// Parser converts bytes into a tx struct -type Parser struct{} - -var _ sdk.Decorator = Parser{} - -// CheckTx makes sure we are on the proper chain -// - fulfills Decorator interface -func (c Parser) CheckTx(ctx sdk.Context, store sdk.SimpleDB, - txBytes interface{}, next sdk.Checker) (res sdk.CheckResult, err error) { - - tx, err := LoadTx(txBytes.([]byte)) - if err != nil { - return res, err - } - return next.CheckTx(ctx, store, tx) -} - -// DeliverTx makes sure we are on the proper chain -// - fulfills Decorator interface -func (c Parser) DeliverTx(ctx sdk.Context, store sdk.SimpleDB, - txBytes interface{}, next sdk.Deliverer) (res sdk.DeliverResult, err error) { - - tx, err := LoadTx(txBytes.([]byte)) - if err != nil { - return res, err - } - return next.DeliverTx(ctx, store, tx) -} diff --git a/_attic/examples/eyes/tests/cli/eyes.sh b/_attic/examples/eyes/tests/cli/eyes.sh deleted file mode 100755 index bd3b0dc7fa..0000000000 --- a/_attic/examples/eyes/tests/cli/eyes.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -# These global variables are required for common.sh -SERVER_EXE=eyes -CLIENT_EXE=eyescli - -oneTimeSetUp() { - # These are passed in as args - BASE_DIR=$HOME/.test_eyes - CHAIN_ID="eyes-cli-test" - - rm -rf $BASE_DIR 2>/dev/null - mkdir -p $BASE_DIR - - echo "Setting up genesis..." - SERVE_DIR=${BASE_DIR}/server - SERVER_LOG=${BASE_DIR}/${SERVER_EXE}.log - - echo "Starting ${SERVER_EXE} server..." - export EYE_HOME=${SERVE_DIR} - ${SERVER_EXE} init --chain-id=$CHAIN_ID >>$SERVER_LOG - startServer $SERVE_DIR $SERVER_LOG - [ $? = 0 ] || return 1 - - # Set up client - make sure you use the proper prefix if you set - # a custom CLIENT_EXE - export EYE_HOME=${BASE_DIR}/client - - initClient $CHAIN_ID - [ $? = 0 ] || return 1 - - printf "...Testing may begin!\n\n\n" -} - -oneTimeTearDown() { - quickTearDown -} - -test00SetGetRemove() { - KEY="CAFE6000" - VALUE="F00D4200" - - assertFalse "line=${LINENO} data present" "${CLIENT_EXE} query eyes ${KEY}" - - # set data - TXRES=$(${CLIENT_EXE} tx set --key=${KEY} --value=${VALUE}) - txSucceeded $? "$TXRES" "set cafe" - HASH=$(echo $TXRES | jq .hash | tr -d \") - TX_HEIGHT=$(echo $TXRES | jq .height) - - # make sure it is set - DATA=$(${CLIENT_EXE} query eyes ${KEY} --height=$TX_HEIGHT) - assertTrue "line=${LINENO} data not set" $? - assertEquals "line=${LINENO}" "\"${VALUE}\"" $(echo $DATA | jq .data.value) - - # query the tx - TX=$(${CLIENT_EXE} query tx $HASH) - assertTrue "line=${LINENO}, found tx" $? - if [ -n "$DEBUG" ]; then echo $TX; echo; fi - - assertEquals "line=${LINENO}, proper type" "\"eyes/set\"" $(echo $TX | jq .data.type) - assertEquals "line=${LINENO}, proper key" "\"${KEY}\"" $(echo $TX | jq .data.data.key) - assertEquals "line=${LINENO}, proper value" "\"${VALUE}\"" $(echo $TX | jq .data.data.value) -} - - -# Load common then run these tests with shunit2! -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #get this files directory -CLI_DIR=$GOPATH/src/github.com/cosmos/cosmos-sdk/tests/cli - -. $CLI_DIR/common.sh -. $CLI_DIR/shunit2 - diff --git a/_attic/examples/eyes/tx.go b/_attic/examples/eyes/tx.go deleted file mode 100644 index 41db195042..0000000000 --- a/_attic/examples/eyes/tx.go +++ /dev/null @@ -1,33 +0,0 @@ -package eyes - -import ( - wire "github.com/tendermint/go-wire" - - eyesmod "github.com/cosmos/cosmos-sdk/modules/eyes" - "github.com/cosmos/cosmos-sdk/util" -) - -// Tx is what is submitted to the chain. -// This embeds the tx data along with any info we want for -// decorators (just chain for now to demo) -type Tx struct { - Tx eyesmod.EyesTx `json:"tx"` - Chain util.ChainData `json:"chain"` -} - -// GetTx gets the tx info -func (e Tx) GetTx() interface{} { - return e.Tx -} - -// GetChain gets the chain we wish to perform the tx on -// (info for decorators) -func (e Tx) GetChain() util.ChainData { - return e.Chain -} - -// LoadTx parses the input data into our blockchain tx structure -func LoadTx(data []byte) (tx Tx, err error) { - err = wire.ReadBinaryBytes(data, &tx) - return -} diff --git a/_attic/genesis/doc.go b/_attic/genesis/doc.go deleted file mode 100644 index 40636fc078..0000000000 --- a/_attic/genesis/doc.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Package genesis provides some utility functions for parsing -a standard genesis file to initialize your abci application. - -We wish to support using one genesis file to initialize both -tendermint and the application, so this file format is designed -to be embedable in the tendermint genesis.json file. We reuse -the same chain_id field for tendermint, ignore the other fields, -and add a special app_options field that contains information just -for the abci app (and ignored by tendermint). - -The use of this file format for your application is not required by -the sdk and is only used by default in the start command, if you wish -to write your own start command, you can use any other method to -store and parse options for your abci application. The important part is -that the same data is available on every node. - -Example file format: - - { - "chain_id": "foo_bar_chain", - "app_options": { - "accounts": [{ - "address": "C471FB670E44D219EE6DF2FC284BE38793ACBCE1", - "pub_key": { - "type": "ed25519", - "data": "6880DB93598E283A67C4D88FC67A8858AA2DE70F713FE94A5109E29C137100C2" - }, - "coins": [ - { - "denom": "ETH", - "amount": 654321 - } - ] - }], - "plugin_options": [ - "plugin1/key1", "value1", - "profile/set", {"name": "john", age: 37} - ] - } - } - -Note that there are two subfields under app_options. The first one "accounts" -is a special case for the coin module, which is assumed to be used by most -applications. It is simply a list of accounts with an identifier and their -initial balance. The account must be identified by EITHER an address -(20 bytes in hex) or a pubkey (in the go-crypto json format), not both as in -this example. "coins" defines the initial balance of the account. - -Configuration options for every other module should be placed under -"plugin_options" as key value pairs (there must be an even number of items). -The first value must be "/" to define the option to be set. -The second value is parsed as raw json and is the value to pass to the -application. This may be a string, an array, a map or any other valid json -structure that the module can parse. - -Note that we don't use a map for plugin_options, as we will often wish -to have many values for the same key, to run this setup many times, -just as we support setting many accounts. -*/ -package genesis diff --git a/_attic/genesis/parse.go b/_attic/genesis/parse.go deleted file mode 100644 index e447ac0bc4..0000000000 --- a/_attic/genesis/parse.go +++ /dev/null @@ -1,153 +0,0 @@ -package genesis - -import ( - "encoding/json" - "strings" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/pkg/errors" - - cmn "github.com/tendermint/tmlibs/common" -) - -// KeyDelimiter is used to separate module and key in -// the options -const KeyDelimiter = "/" - -// Option just holds module/key/value triples from -// parsing the genesis file -type Option struct { - Module string - Key string - Value string -} - -// InitStater is anything that can handle app options -// from genesis file. Setting the merkle store, config options, -// or anything else -type InitStater interface { - InitState(module, key, value string) error -} - -// Load parses the genesis file and sets the initial -// state based on that -func Load(app InitStater, filePath string) error { - opts, err := GetOptions(filePath) - if err != nil { - return err - } - - // execute all the genesis init options - // abort on any error - for _, opt := range opts { - err = app.InitState(opt.Module, opt.Key, opt.Value) - if err != nil { - return err - } - } - return nil -} - -// GetOptions parses the genesis file in a format -// that can easily be handed into InitStaters -func GetOptions(path string) ([]Option, error) { - genDoc, err := load(path) - if err != nil { - return nil, err - } - - opts := genDoc.AppOptions - cnt := 1 + len(opts.Accounts) + len(opts.pluginOptions) - res := make([]Option, 0, cnt) - res = append(res, Option{sdk.ModuleNameBase, sdk.ChainKey, genDoc.ChainID}) - - // set accounts - for _, acct := range opts.Accounts { - res = append(res, Option{"coin", "account", string(acct)}) - } - - // set plugin options - for _, kv := range opts.pluginOptions { - module, key := splitKey(kv.Key) - res = append(res, Option{module, key, kv.Value}) - } - - return res, nil -} - -type keyValue struct { - Key string `json:"key"` - Value string `json:"value"` -} - -// FullDoc - includes tendermint (in the json, we ignore here) -type FullDoc struct { - ChainID string `json:"chain_id"` - AppOptions *Doc `json:"app_options"` -} - -// Doc - All genesis values -type Doc struct { - Accounts []json.RawMessage `json:"accounts"` - PluginOptions []json.RawMessage `json:"plugin_options"` - - pluginOptions []keyValue // unmarshaled rawmessages -} - -func load(filePath string) (*FullDoc, error) { - bytes, err := cmn.ReadFile(filePath) - if err != nil { - return nil, errors.Wrap(err, "loading genesis file") - } - - // the basecoin genesis go-wire/data :) - genDoc := new(FullDoc) - err = json.Unmarshal(bytes, genDoc) - if err != nil { - return nil, errors.Wrap(err, "unmarshaling genesis file") - } - - if genDoc.AppOptions == nil { - genDoc.AppOptions = new(Doc) - } - - pluginOpts, err := parseList(genDoc.AppOptions.PluginOptions) - if err != nil { - return nil, err - } - genDoc.AppOptions.pluginOptions = pluginOpts - return genDoc, nil -} - -func parseList(kvzIn []json.RawMessage) (kvz []keyValue, err error) { - if len(kvzIn)%2 != 0 { - return nil, errors.New("genesis cannot have an odd number of items. Format = [key1, value1, key2, value2, ...]") - } - - for i := 0; i < len(kvzIn); i += 2 { - kv := keyValue{} - rawK := []byte(kvzIn[i]) - err := json.Unmarshal(rawK, &(kv.Key)) - if err != nil { - return nil, errors.Errorf("Non-string key: %s", string(rawK)) - } - // convert value to string if possible (otherwise raw json) - rawV := kvzIn[i+1] - err = json.Unmarshal(rawV, &(kv.Value)) - if err != nil { - kv.Value = string(rawV) - } - kvz = append(kvz, kv) - } - return kvz, nil -} - -// Splits the string at the first '/'. -// if there are none, assign default module ("base"). -func splitKey(key string) (string, string) { - if strings.Contains(key, KeyDelimiter) { - keyParts := strings.SplitN(key, KeyDelimiter, 2) - return keyParts[0], keyParts[1] - } - return sdk.ModuleNameBase, key -} diff --git a/_attic/genesis/parse_test.go b/_attic/genesis/parse_test.go deleted file mode 100644 index 822e2630ac..0000000000 --- a/_attic/genesis/parse_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package genesis - -import ( - "encoding/json" - "testing" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - cmn "github.com/tendermint/tmlibs/common" -) - -const genesisFilepath = "./testdata/genesis.json" - -func TestParseList(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - bytes, err := cmn.ReadFile(genesisFilepath) - require.Nil(err, "loading genesis file %+v", err) - - // the basecoin genesis go-wire/data :) - genDoc := new(FullDoc) - err = json.Unmarshal(bytes, genDoc) - require.Nil(err, "unmarshaling genesis file %+v", err) - - pluginOpts, err := parseList(genDoc.AppOptions.PluginOptions) - require.Nil(err, "%+v", err) - genDoc.AppOptions.pluginOptions = pluginOpts - - assert.Equal(genDoc.AppOptions.pluginOptions[0].Key, "plugin1/key1") - assert.Equal(genDoc.AppOptions.pluginOptions[1].Key, "plugin1/key2") - assert.Equal(genDoc.AppOptions.pluginOptions[0].Value, "value1") - assert.Equal(genDoc.AppOptions.pluginOptions[1].Value, "value2") -} - -func TestGetOptions(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - opts, err := GetOptions(genesisFilepath) - require.Nil(err, "loading genesis file %+v", err) - - require.Equal(4, len(opts)) - chain := opts[0] - assert.Equal(sdk.ModuleNameBase, chain.Module) - assert.Equal(sdk.ChainKey, chain.Key) - assert.Equal("foo_bar_chain", chain.Value) - - acct := opts[1] - assert.Equal("coin", acct.Module) - assert.Equal("account", acct.Key) - - p1 := opts[2] - assert.Equal("plugin1", p1.Module) - assert.Equal("key1", p1.Key) - assert.Equal("value1", p1.Value) - - p2 := opts[3] - assert.Equal("plugin1", p2.Module) - assert.Equal("key2", p2.Key) - assert.Equal("value2", p2.Value) -} - -func TestSplitKey(t *testing.T) { - assert := assert.New(t) - prefix, suffix := splitKey("foo/bar") - assert.EqualValues("foo", prefix) - assert.EqualValues("bar", suffix) - - prefix, suffix = splitKey("foobar") - assert.EqualValues("base", prefix) - assert.EqualValues("foobar", suffix) - - prefix, suffix = splitKey("some/complex/issue") - assert.EqualValues("some", prefix) - assert.EqualValues("complex/issue", suffix) - -} diff --git a/_attic/genesis/testdata/genesis.json b/_attic/genesis/testdata/genesis.json deleted file mode 100644 index ee8879fd28..0000000000 --- a/_attic/genesis/testdata/genesis.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "chain_id": "foo_bar_chain", - "app_options": { - "accounts": [{ - "pub_key": { - "type": "ed25519", - "data": "6880db93598e283a67c4d88fc67a8858aa2de70f713fe94a5109e29c137100c2" - }, - "coins": [ - { - "denom": "blank", - "amount": 12345 - }, - { - "denom": "ETH", - "amount": 654321 - } - ] - }], - "plugin_options": ["plugin1/key1", "value1", "plugin1/key2", "value2"] - } -} diff --git a/_attic/modules/app/app_test.go b/_attic/modules/app/app_test.go deleted file mode 100644 index 13f21bab89..0000000000 --- a/_attic/modules/app/app_test.go +++ /dev/null @@ -1,292 +0,0 @@ -package app - -// import ( -// "encoding/hex" -// "testing" - -// "github.com/stretchr/testify/assert" -// "github.com/stretchr/testify/require" - -// sdk "github.com/cosmos/cosmos-sdk" -// "github.com/cosmos/cosmos-sdk/modules/auth" -// "github.com/cosmos/cosmos-sdk/modules/base" -// "github.com/cosmos/cosmos-sdk/modules/coin" -// "github.com/cosmos/cosmos-sdk/modules/fee" -// "github.com/cosmos/cosmos-sdk/modules/nonce" -// "github.com/cosmos/cosmos-sdk/stack" -// "github.com/cosmos/cosmos-sdk/state" -// "github.com/cosmos/cosmos-sdk/util" -// abci "github.com/tendermint/abci/types" -// wire "github.com/tendermint/go-wire" -// "github.com/tendermint/tmlibs/log" -// ) - -// // DefaultHandler for the tests (coin, roles, ibc) -// func DefaultHandler(feeDenom string) sdk.Handler { -// // use the default stack -// // r := roles.NewHandler() -// // i := ibc.NewHandler() - -// return sdk.ChainDecorators( -// util.Logger{}, -// util.Recovery{}, -// auth.Signatures{}, -// util.Chain{}, -// // stack.Checkpoint{OnCheck: true}, -// // nonce.ReplayCheck{}, -// ). -// // IBC(ibc.NewMiddleware()). -// // Apps( -// // roles.NewMiddleware(), -// // fee.NewSimpleFeeMiddleware(coin.Coin{feeDenom, 0}, fee.Bank), -// // stack.Checkpoint{OnDeliver: true}, -// // ). -// WithHandler( -// coin.NewHandler(), -// // stack.WrapHandler(r), -// // stack.WrapHandler(i), -// ) -// } - -// //-------------------------------------------------------- -// // test environment is a list of input and output accounts - -// type appTest struct { -// t *testing.T -// chainID string -// app *BaseApp -// acctIn *coin.AccountWithKey -// acctOut *coin.AccountWithKey -// } - -// func newAppTest(t *testing.T) *appTest { -// at := &appTest{ -// t: t, -// chainID: "test_chain_id", -// } -// at.reset() -// return at -// } - -// // baseTx is the -// func (at *appTest) baseTx(coins coin.Coins) sdk.Tx { -// in := []coin.TxInput{{Address: at.acctIn.Actor(), Coins: coins}} -// out := []coin.TxOutput{{Address: at.acctOut.Actor(), Coins: coins}} -// tx := coin.NewSendTx(in, out) -// return tx -// } - -// func (at *appTest) signTx(tx sdk.Tx) sdk.Tx { -// stx := auth.NewMulti(tx) -// auth.Sign(stx, at.acctIn.Key) -// return stx.Wrap() -// } - -// func (at *appTest) getTx(coins coin.Coins, sequence uint32) sdk.Tx { -// tx := at.baseTx(coins) -// tx = nonce.NewTx(sequence, []sdk.Actor{at.acctIn.Actor()}, tx) -// tx = base.NewChainTx(at.chainID, 0, tx) -// return at.signTx(tx) -// } - -// func (at *appTest) feeTx(coins coin.Coins, toll coin.Coin, sequence uint32) sdk.Tx { -// tx := at.baseTx(coins) -// tx = fee.NewFee(tx, toll, at.acctIn.Actor()) -// tx = nonce.NewTx(sequence, []sdk.Actor{at.acctIn.Actor()}, tx) -// tx = base.NewChainTx(at.chainID, 0, tx) -// return at.signTx(tx) -// } - -// // set the account on the app through InitState -// func (at *appTest) initAccount(acct *coin.AccountWithKey) { -// err := at.app.InitState("coin", "account", acct.MakeOption()) -// require.Nil(at.t, err, "%+v", err) -// } - -// // reset the in and out accs to be one account each with 7mycoin -// func (at *appTest) reset() { -// at.acctIn = coin.NewAccountWithKey(coin.Coins{{"mycoin", 7}}) -// at.acctOut = coin.NewAccountWithKey(coin.Coins{{"mycoin", 7}}) - -// // Note: switch logger if you want to get more info -// logger := log.TestingLogger() -// // logger := log.NewTracingLogger(log.NewTMLogger(os.Stdout)) - -// store, err := NewStoreApp("app-test", "", 0, logger) -// require.Nil(at.t, err, "%+v", err) -// at.app = NewBaseApp(store, DefaultHandler("mycoin"), nil) - -// err = at.app.InitState("base", "chain_id", at.chainID) -// require.Nil(at.t, err, "%+v", err) - -// at.initAccount(at.acctIn) -// at.initAccount(at.acctOut) - -// resabci := at.app.Commit() -// require.True(at.t, resabci.IsOK(), resabci) -// } - -// func getBalance(key sdk.Actor, store state.SimpleDB) (coin.Coins, error) { -// cspace := stack.PrefixedStore(coin.NameCoin, store) -// acct, err := coin.GetAccount(cspace, key) -// return acct.Coins, err -// } - -// func getAddr(addr []byte, state state.SimpleDB) (coin.Coins, error) { -// actor := auth.SigPerm(addr) -// return getBalance(actor, state) -// } - -// // returns the final balance and expected balance for input and output accounts -// func (at *appTest) exec(t *testing.T, tx sdk.Tx, checkTx bool) (res abci.Result, diffIn, diffOut coin.Coins) { -// require := require.New(t) - -// initBalIn, err := getBalance(at.acctIn.Actor(), at.app.Append()) -// require.Nil(err, "%+v", err) -// initBalOut, err := getBalance(at.acctOut.Actor(), at.app.Append()) -// require.Nil(err, "%+v", err) - -// txBytes := wire.BinaryBytes(tx) -// if checkTx { -// res = at.app.CheckTx(txBytes) -// } else { -// res = at.app.DeliverTx(txBytes) -// } - -// endBalIn, err := getBalance(at.acctIn.Actor(), at.app.Append()) -// require.Nil(err, "%+v", err) -// endBalOut, err := getBalance(at.acctOut.Actor(), at.app.Append()) -// require.Nil(err, "%+v", err) -// return res, endBalIn.Minus(initBalIn), endBalOut.Minus(initBalOut) -// } - -// //-------------------------------------------------------- - -// func TestInitState(t *testing.T) { -// assert := assert.New(t) -// require := require.New(t) - -// logger := log.TestingLogger() -// store, err := NewStoreApp("app-test", "", 0, logger) -// require.Nil(err, "%+v", err) -// app := NewBaseApp(store, DefaultHandler("atom"), nil) - -// //testing ChainID -// chainID := "testChain" -// err = app.InitState("base", "chain_id", chainID) -// require.Nil(err, "%+v", err) -// assert.EqualValues(app.GetChainID(), chainID) - -// // make a nice account... -// bal := coin.Coins{{"atom", 77}, {"eth", 12}} -// acct := coin.NewAccountWithKey(bal) -// err = app.InitState("coin", "account", acct.MakeOption()) -// require.Nil(err, "%+v", err) - -// // make sure it is set correctly, with some balance -// coins, err := getBalance(acct.Actor(), app.Append()) -// require.Nil(err) -// assert.Equal(bal, coins) - -// // let's parse an account with badly sorted coins... -// unsortAddr, err := hex.DecodeString("C471FB670E44D219EE6DF2FC284BE38793ACBCE1") -// require.Nil(err) -// unsortCoins := coin.Coins{{"BTC", 789}, {"eth", 123}} -// unsortAcc := `{ -// "pub_key": { -// "type": "ed25519", -// "data": "AD084F0572C116D618B36F2EB08240D1BAB4B51716CCE0E7734B89C8936DCE9A" -// }, -// "coins": [ -// { -// "denom": "eth", -// "amount": 123 -// }, -// { -// "denom": "BTC", -// "amount": 789 -// } -// ] -// }` -// err = app.InitState("coin", "account", unsortAcc) -// require.Nil(err, "%+v", err) - -// coins, err = getAddr(unsortAddr, app.Append()) -// require.Nil(err) -// assert.True(coins.IsValid()) -// assert.Equal(unsortCoins, coins) - -// err = app.InitState("base", "dslfkgjdas", "") -// require.Error(err) - -// err = app.InitState("", "dslfkgjdas", "") -// require.Error(err) - -// err = app.InitState("dslfkgjdas", "szfdjzs", "") -// require.Error(err) -// } - -// // Test CheckTx and DeliverTx with insufficient and sufficient balance -// func TestTx(t *testing.T) { -// assert := assert.New(t) -// at := newAppTest(t) - -// //Bad Balance -// at.acctIn.Coins = coin.Coins{{"mycoin", 2}} -// at.initAccount(at.acctIn) -// at.app.Commit() - -// res, _, _ := at.exec(t, at.getTx(coin.Coins{{"mycoin", 5}}, 1), true) -// assert.True(res.IsErr(), "ExecTx/Bad CheckTx: Expected error return from ExecTx, returned: %v", res) -// res, diffIn, diffOut := at.exec(t, at.getTx(coin.Coins{{"mycoin", 5}}, 1), false) -// assert.True(res.IsErr(), "ExecTx/Bad DeliverTx: Expected error return from ExecTx, returned: %v", res) -// assert.True(diffIn.IsZero()) -// assert.True(diffOut.IsZero()) - -// //Regular CheckTx -// at.reset() -// res, _, _ = at.exec(t, at.getTx(coin.Coins{{"mycoin", 5}}, 1), true) -// assert.True(res.IsOK(), "ExecTx/Good CheckTx: Expected OK return from ExecTx, Error: %v", res) - -// //Regular DeliverTx -// at.reset() -// amt := coin.Coins{{"mycoin", 3}} -// res, diffIn, diffOut = at.exec(t, at.getTx(amt, 1), false) -// assert.True(res.IsOK(), "ExecTx/Good DeliverTx: Expected OK return from ExecTx, Error: %v", res) -// assert.Equal(amt.Negative(), diffIn) -// assert.Equal(amt, diffOut) - -// //DeliverTx with fee.... 4 get to recipient, 1 extra taxed -// at.reset() -// amt = coin.Coins{{"mycoin", 4}} -// toll := coin.Coin{"mycoin", 1} -// res, diffIn, diffOut = at.exec(t, at.feeTx(amt, toll, 1), false) -// assert.True(res.IsOK(), "ExecTx/Good DeliverTx: Expected OK return from ExecTx, Error: %v", res) -// payment := amt.Plus(coin.Coins{toll}).Negative() -// assert.Equal(payment, diffIn) -// assert.Equal(amt, diffOut) - -// } - -// func TestQuery(t *testing.T) { -// assert := assert.New(t) -// at := newAppTest(t) - -// res, _, _ := at.exec(t, at.getTx(coin.Coins{{"mycoin", 5}}, 1), false) -// assert.True(res.IsOK(), "Commit, DeliverTx: Expected OK return from DeliverTx, Error: %v", res) - -// resQueryPreCommit := at.app.Query(abci.RequestQuery{ -// Path: "/account", -// Data: at.acctIn.Address(), -// }) - -// res = at.app.Commit() -// assert.True(res.IsOK(), res) - -// key := stack.PrefixedKey(coin.NameCoin, at.acctIn.Address()) -// resQueryPostCommit := at.app.Query(abci.RequestQuery{ -// Path: "/key", -// Data: key, -// }) -// assert.NotEqual(resQueryPreCommit, resQueryPostCommit, "Query should change before/after commit") -// } diff --git a/_attic/modules/app/genesis_test.go b/_attic/modules/app/genesis_test.go deleted file mode 100644 index a519bc9982..0000000000 --- a/_attic/modules/app/genesis_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package app - -import ( - "encoding/hex" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/tendermint/tmlibs/log" - - "github.com/cosmos/cosmos-sdk/genesis" - "github.com/cosmos/cosmos-sdk/modules/coin" -) - -const genesisFilepath = "./testdata/genesis.json" -const genesisAcctFilepath = "./testdata/genesis2.json" - -// 2b is just like 2, but add carl who has inconsistent -// pubkey and address -const genesisBadAcctFilepath = "./testdata/genesis2b.json" - -func TestLoadGenesisDoNotFailIfAppOptionsAreMissing(t *testing.T) { - logger := log.TestingLogger() - store, err := MockStoreApp("genesis", logger) - require.Nil(t, err, "%+v", err) - app := NewBaseApp(store, DefaultHandler("mycoin"), nil) - - err = genesis.Load(app, "./testdata/genesis3.json") - require.Nil(t, err, "%+v", err) -} - -func TestLoadGenesisFailsWithUnknownOptions(t *testing.T) { - require := require.New(t) - - logger := log.TestingLogger() - store, err := MockStoreApp("genesis", logger) - require.Nil(err, "%+v", err) - - app := NewBaseApp(store, DefaultHandler("mycoin"), nil) - err = genesis.Load(app, genesisFilepath) - require.NotNil(err, "%+v", err) -} - -// Fix for issue #89, change the parse format for accounts in genesis.json -func TestLoadGenesisAccountAddress(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - logger := log.TestingLogger() - store, err := MockStoreApp("genesis", logger) - require.Nil(err, "%+v", err) - app := NewBaseApp(store, DefaultHandler("mycoin"), nil) - - err = genesis.Load(app, genesisAcctFilepath) - require.Nil(err, "%+v", err) - - // check the chain id - assert.Equal("addr_accounts_chain", app.GetChainID()) - - // make sure the accounts were set properly - cases := []struct { - addr string - exists bool - hasPubkey bool - coins coin.Coins - }{ - // this comes from a public key, should be stored proper (alice) - {"62035D628DE7543332544AA60D90D3693B6AD51B", true, true, coin.Coins{{"one", 111}}}, - // this comes from an address, should be stored proper (bob) - {"C471FB670E44D219EE6DF2FC284BE38793ACBCE1", true, false, coin.Coins{{"two", 222}}}, - // this comes from a secp256k1 public key, should be stored proper (sam) - {"979F080B1DD046C452C2A8A250D18646C6B669D4", true, true, coin.Coins{{"four", 444}}}, - } - - for i, tc := range cases { - addr, err := hex.DecodeString(tc.addr) - require.Nil(err, tc.addr) - coins, err := getAddr(addr, app.Append()) - require.Nil(err, "%+v", err) - if !tc.exists { - assert.True(coins.IsZero(), "%d", i) - } else if assert.False(coins.IsZero(), "%d", i) { - // it should and does exist... - assert.True(coins.IsValid()) - assert.Equal(tc.coins, coins) - } - } -} - -// When you define an account in genesis with address -// and pubkey that don't match -func TestLoadGenesisAccountInconsistentAddress(t *testing.T) { - require := require.New(t) - - logger := log.TestingLogger() - store, err := MockStoreApp("genesis", logger) - require.Nil(err, "%+v", err) - app := NewBaseApp(store, DefaultHandler("mycoin"), nil) - err = genesis.Load(app, genesisBadAcctFilepath) - require.NotNil(err) -} diff --git a/_attic/modules/bonus/doc.go b/_attic/modules/bonus/doc.go deleted file mode 100644 index 2cb05260dc..0000000000 --- a/_attic/modules/bonus/doc.go +++ /dev/null @@ -1,6 +0,0 @@ -/** -Package bonus is a temporary home for various functionalities -that were removed for complexity, but may be added back in -later. -**/ -package bonus diff --git a/_attic/modules/bonus/helpers.go b/_attic/modules/bonus/helpers.go deleted file mode 100644 index fdd3825f77..0000000000 --- a/_attic/modules/bonus/helpers.go +++ /dev/null @@ -1,118 +0,0 @@ -package bonus - -import ( - abci "github.com/tendermint/abci/types" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -//nolint -const ( - NameVal = "val" - NamePrice = "price" - - TypeValChange = NameVal + "/change" - ByteValChange = 0xfe - - TypePriceShow = NamePrice + "/show" - BytePriceShow = 0xfd -) - -func init() { - sdk.TxMapper. - RegisterImplementation(ValChangeTx{}, TypeValChange, ByteValChange). - RegisterImplementation(PriceShowTx{}, TypePriceShow, BytePriceShow) -} - -//-------------------------------- -// Setup tx and handler for validation test cases - -type ValSetHandler struct { - sdk.NopCheck - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = ValSetHandler{} - -func (ValSetHandler) Name() string { - return NameVal -} - -func (ValSetHandler) DeliverTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx) (res sdk.DeliverResult, err error) { - change, ok := tx.Unwrap().(ValChangeTx) - if !ok { - return res, errors.ErrUnknownTxType(tx) - } - res.Diff = change.Diff - return -} - -type ValChangeTx struct { - Diff []*abci.Validator -} - -func (v ValChangeTx) Wrap() sdk.Tx { - return sdk.Tx{v} -} - -func (v ValChangeTx) ValidateBasic() error { return nil } - -//-------------------------------- -// Setup tx and handler for testing checktx fees/gas - -// PriceData is the data we ping back -var PriceData = []byte{0xCA, 0xFE} - -// PriceHandler returns checktx results based on the input -type PriceHandler struct { - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = PriceHandler{} - -func (PriceHandler) Name() string { - return NamePrice -} - -func (PriceHandler) CheckTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx) (res sdk.CheckResult, err error) { - price, ok := tx.Unwrap().(PriceShowTx) - if !ok { - return res, errors.ErrUnknownTxType(tx) - } - res.GasAllocated = price.GasAllocated - res.GasPayment = price.GasPayment - res.Data = PriceData - return -} - -func (PriceHandler) DeliverTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx) (res sdk.DeliverResult, err error) { - _, ok := tx.Unwrap().(PriceShowTx) - if !ok { - return res, errors.ErrUnknownTxType(tx) - } - res.Data = PriceData - return -} - -// PriceShowTx lets us bounce back a given fee/gas on CheckTx -type PriceShowTx struct { - GasAllocated uint64 - GasPayment uint64 -} - -func NewPriceShowTx(gasAllocated, gasPayment uint64) sdk.Tx { - return PriceShowTx{GasAllocated: gasAllocated, GasPayment: gasPayment}.Wrap() -} - -func (p PriceShowTx) Wrap() sdk.Tx { - return sdk.Tx{p} -} - -func (v PriceShowTx) ValidateBasic() error { return nil } diff --git a/_attic/modules/bonus/multiplexer.go b/_attic/modules/bonus/multiplexer.go deleted file mode 100644 index 8f82abd1c7..0000000000 --- a/_attic/modules/bonus/multiplexer.go +++ /dev/null @@ -1,116 +0,0 @@ -package bonus - -import ( - "strings" - - abci "github.com/tendermint/abci/types" - wire "github.com/tendermint/go-wire" - "github.com/tendermint/go-wire/data" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -//nolint -const ( - NameMultiplexer = "mplx" -) - -// Multiplexer grabs a MultiTx and sends them sequentially down the line -type Multiplexer struct { - stack.PassInitState - stack.PassInitValidate -} - -// Name of the module - fulfills Middleware interface -func (Multiplexer) Name() string { - return NameMultiplexer -} - -var _ stack.Middleware = Multiplexer{} - -// CheckTx splits the input tx and checks them all - fulfills Middlware interface -func (Multiplexer) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - if mtx, ok := tx.Unwrap().(MultiTx); ok { - return runAllChecks(ctx, store, mtx.Txs, next) - } - return next.CheckTx(ctx, store, tx) -} - -// DeliverTx splits the input tx and checks them all - fulfills Middlware interface -func (Multiplexer) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - if mtx, ok := tx.Unwrap().(MultiTx); ok { - return runAllDelivers(ctx, store, mtx.Txs, next) - } - return next.DeliverTx(ctx, store, tx) -} - -func runAllChecks(ctx sdk.Context, store state.SimpleDB, txs []sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - // store all results, unless anything errors - rs := make([]sdk.CheckResult, len(txs)) - for i, stx := range txs { - rs[i], err = next.CheckTx(ctx, store, stx) - if err != nil { - return - } - } - // now combine the results into one... - return combineChecks(rs), nil -} - -func runAllDelivers(ctx sdk.Context, store state.SimpleDB, txs []sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - // store all results, unless anything errors - rs := make([]sdk.DeliverResult, len(txs)) - for i, stx := range txs { - rs[i], err = next.DeliverTx(ctx, store, stx) - if err != nil { - return - } - } - // now combine the results into one... - return combineDelivers(rs), nil -} - -// combines all data bytes as a go-wire array. -// joins all log messages with \n -func combineChecks(all []sdk.CheckResult) sdk.CheckResult { - datas := make([]data.Bytes, len(all)) - logs := make([]string, len(all)) - var allocated, payments uint64 - for i, r := range all { - datas[i] = r.Data - logs[i] = r.Log - allocated += r.GasAllocated - payments += r.GasPayment - } - return sdk.CheckResult{ - Data: wire.BinaryBytes(datas), - Log: strings.Join(logs, "\n"), - GasAllocated: allocated, - GasPayment: payments, - } -} - -// combines all data bytes as a go-wire array. -// joins all log messages with \n -func combineDelivers(all []sdk.DeliverResult) sdk.DeliverResult { - datas := make([]data.Bytes, len(all)) - logs := make([]string, len(all)) - var used uint64 - var diffs []*abci.Validator - for i, r := range all { - datas[i] = r.Data - logs[i] = r.Log - used += r.GasUsed - if len(r.Diff) > 0 { - diffs = append(diffs, r.Diff...) - } - } - return sdk.DeliverResult{ - Data: wire.BinaryBytes(datas), - Log: strings.Join(logs, "\n"), - GasUsed: used, - Diff: diffs, - } -} diff --git a/_attic/modules/bonus/multiplexer_test.go b/_attic/modules/bonus/multiplexer_test.go deleted file mode 100644 index bf448a492b..0000000000 --- a/_attic/modules/bonus/multiplexer_test.go +++ /dev/null @@ -1,87 +0,0 @@ -package bonus - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" - "github.com/stretchr/testify/assert" - wire "github.com/tendermint/go-wire" - "github.com/tendermint/go-wire/data" - "github.com/tendermint/tmlibs/log" -) - -func TestMultiplexer(t *testing.T) { - assert := assert.New(t) - msg := "diddly" - chainID := "multi-verse" - height := uint64(100) - - // Generic args here... - store := state.NewMemKVStore() - ctx := stack.NewContext(chainID, height, log.NewNopLogger()) - - // Build the stack - app := stack. - New(Multiplexer{}). - Dispatch( - stack.WrapHandler(stack.OKHandler{Log: msg}), - stack.WrapHandler(PriceHandler{}), - ) - - raw := stack.NewRawTx([]byte{1, 2, 3, 4}) - fail := stack.NewFailTx() - price1 := NewPriceShowTx(123, 456) - price2 := NewPriceShowTx(1000, 2000) - price3 := NewPriceShowTx(11, 0) - - join := func(data ...[]byte) []byte { - return wire.BinaryBytes(data) - } - - cases := [...]struct { - tx sdk.Tx - valid bool - gasAllocated uint64 - gasPayment uint64 - log string - data data.Bytes - }{ - // test the components without multiplexer (no effect) - 0: {raw, true, 0, 0, msg, nil}, - 1: {price1, true, 123, 456, "", PriceData}, - 2: {fail, false, 0, 0, "", nil}, - // test multiplexer on error - 3: {NewMultiTx(raw, fail, price1), false, 0, 0, "", nil}, - // test combining info on multiplexer - 4: {NewMultiTx(price1, raw), true, 123, 456, "\n" + msg, join(PriceData, nil)}, - // add lots of prices - 5: {NewMultiTx(price1, price2, price3), true, 1134, 2456, "\n\n", join(PriceData, PriceData, PriceData)}, - // combine multiple logs - 6: {NewMultiTx(raw, price3, raw), true, 11, 0, msg + "\n\n" + msg, join(nil, PriceData, nil)}, - } - - for i, tc := range cases { - cres, err := app.CheckTx(ctx, store, tc.tx) - if tc.valid { - assert.Nil(err, "%d: %+v", i, err) - assert.Equal(tc.log, cres.Log, "%d", i) - assert.Equal(tc.data, cres.Data, "%d", i) - assert.Equal(tc.gasAllocated, cres.GasAllocated, "%d", i) - assert.Equal(tc.gasPayment, cres.GasPayment, "%d", i) - } else { - assert.NotNil(err, "%d", i) - } - - // make sure deliver returns error, not a panic crash - dres, err := app.DeliverTx(ctx, store, tc.tx) - if tc.valid { - assert.Nil(err, "%d: %+v", i, err) - assert.Equal(tc.log, dres.Log, "%d", i) - assert.Equal(tc.data, dres.Data, "%d", i) - } else { - assert.NotNil(err, "%d", i) - } - } -} diff --git a/_attic/modules/docs/Makefile b/_attic/modules/docs/Makefile deleted file mode 100644 index f4bccf3bd3..0000000000 --- a/_attic/modules/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = python -msphinx -SPHINXPROJ = Cosmos-SDK -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/_attic/modules/docs/architecture/API.md b/_attic/modules/docs/architecture/API.md deleted file mode 100644 index de4abd0614..0000000000 --- a/_attic/modules/docs/architecture/API.md +++ /dev/null @@ -1,249 +0,0 @@ -# API - -In order to allow for quick client development, with the security -of the light-client and ease of use the cli (embedding go-wire and -go-crypto), we will provide a REST API, which can run on localhost -as part of `basecli`, securely managing your keys, signing transactions, -and validating queries. It will be exposed for a locally deployed -application to make use of (eg. electron app, web server...) - -By default we will serve on `http://localhost:2024`. CORS will be disabled by default. Potentially we can add a flag to enable it for one domain. - -## MVP - -The MVP will allow us to move around money. This involves the -following functions: - -## Construct an unsigned transaction - -`POST /build/send` - -Input: -``` -{ - "to": {"app": "role", "addr": "62616E6B32" }, - "from": {"app": "sigs", "addr": "BDADF167E6CF2CDF2D621E590FF1FED2787A40E0" }, - "amount": { "denom": "mycoin", "amount": 900000 }, - "sequence": 1, - "multi": true, -} -``` - -Output (a json encoding of basecoin.Tx): - -`basecli tx send --to=role:62616E6B32 --from=sigs:91C959ADE03D8973E8F2FBA9FD2EED327DCE2B0A --amount=900000mycoin --sequence=1 --multi --prepare=- --no-sign` - - -``` -{ - "type": "sigs/multi", - "data": { - "tx": { - "type": "chain/tx", - "data": { - "chain_id": "lakeshore", - "expires_at": 0, - "tx": { - "type": "nonce", - "data": { - "sequence": 1, - "signers": [ - { - "chain": "", - "app": "sigs", - "addr": "91C959ADE03D8973E8F2FBA9FD2EED327DCE2B0A" - } - ], - "tx": { - "type": "coin/send", - "data": { - "inputs": [ - { - "address": { - "chain": "", - "app": "role", - "addr": "62616E6B32" - }, - "coins": [ - { - "denom": "mycoin", - "amount": 900000 - } - ] - } - ], - "outputs": [ - { - "address": { - "chain": "", - "app": "sigs", - "addr": "BDADF167E6CF2CDF2D621E590FF1FED2787A40E0" - }, - "coins": [ - { - "denom": "mycoin", - "amount": 900000 - } - ] - } - ] - } - } - } - } - } - }, - "signatures": null - } -} -``` - -## Sign a Tx - -Once you construct a proper json-encoded `basecoin.Tx`, you can sign it once, or (if you constructed it with `multi=true`), multiple times. - - -`POST /sign` - -Input: - -``` -{ - "name": "matt", - "password": "1234567890", - "tx": { - "type": "sigs/multi", - "data": { - "tx": // see output of /build/send, - "signatures": nil, - } - } -} -``` - -Output: - -`basecli tx send --to=role:62616E6B32 --from=sigs:91C959ADE03D8973E8F2FBA9FD2EED327DCE2B0A --amount=900000mycoin --sequence=1 --multi --no-sign --prepare=unsigned.json` - -`echo 1234567890 | basecli tx --in=unsigned.json --prepare=- --name=matt` - -``` -{ - "type": "sigs/multi", - "data": { - "tx": // see output of /build/send, - "signatures": [ - { - "Sig": { - "type": "ed25519", - "data": "436188FAC4668DDF6729022454AFBA5DA0B44E516C4EC7013C6B00BD877F255CDE0355F3FBFE9CCF88C9F519C192D498BF087AFE0D531351813432A100857803" - }, - "Pubkey": { - "type": "ed25519", - "data": "B01508EB073C0823E2CE6ABF4538BA02EAEC39B02113290BBFCEC7E1B07F575A" - } - } - ] - } -} -``` - -## Send Tx to the Blockchain - -This will encode the transaction as binary and post it to the tendermint node, waiting until it is committed to the blockchain. -(TODO: make this async? return when recevied, notify when committed?) - -`POST /tx` - -Input: - -Signed tx as json, directly copy output of `/sign` - -Output: - - -`echo 1234567890 | basecli tx send --to=role:62616E6B32 --from=sigs:91C959ADE03D8973E8F2FBA9FD2EED327DCE2B0A --amount=900000mycoin --sequence=1 --multi --name=matt --prepare=signed.json` - -`basecli tx --in=signed.json --no-sign` - -``` -{ - "check_tx": { - "code": 0, - "data": "", - "log": "" - }, - "deliver_tx": { - "code": 0, - "data": "", - "log": "" - }, - "hash": "4D0EB7853E71AB6E3021990CF733F70F4CC2E001", - "height": 1494 -} -``` - -## Query account balance - -`GET /query/account/sigs:BDADF167E6CF2CDF2D621E590FF1FED2787A40E0` - -``` -{ - "height": 1170, - "data": { - "coins": [ - { - "denom": "mycoin", - "amount": 12345 - } - ] - } -} -``` - -## Other stuff for MVP - -You must run `basecli init` int he cli to set things up. - -When you run `basecli serve`, it will start the local rest api server, with the above endpoints. - -Also, support keys endpoints from go-crypto as they currently are and mount them under `/keys`. - -## Future Stuff - -proxy mounted as well under `/tendermint` - -`/tendermint/status` -`/tendermint/block` - -info about self... - -`/` - -``` -{ - "app": "basecli", - "version": "0.7.1", // of client, server???? - "modules": { - "chain": "0.1.0", - "fees": "0.2.1", - "coin": "0.3.2", - "stake": "0.1.2" - }, - "nodes": [ - "localhost:46657", - "mercury.interchain.io:443" - ] -} -``` - -`/commits` - -``` -{ - "last_height": 4555, - "update_problems": "too much change" -} -``` - -info on last commit diff --git a/_attic/modules/docs/basecoin-basics.rst b/_attic/modules/docs/basecoin-basics.rst deleted file mode 100644 index 099b4c4ec1..0000000000 --- a/_attic/modules/docs/basecoin-basics.rst +++ /dev/null @@ -1,388 +0,0 @@ -.. raw:: html - - - -Basecoin Basics -=============== - -Here we explain how to get started with a basic Basecoin blockchain, how -to send transactions between accounts using the ``basecoin`` tool, and -what is happening under the hood. - -Install -------- - -With go, it's one command: - -.. code:: shelldown[0] - -:: - - go get -u github.com/tendermint/basecoin/cmd/... - -If you have trouble, see the `installation guide <./install.html>`__. - -Note the above command installs two binaries: ``basecoin`` and -``basecli``. The former is the running node. The latter is a -command-line light-client. This tutorial assumes you have a 'fresh' -working environment. See how to clean up below. - -Generate some keys -~~~~~~~~~~~~~~~~~~ - -Let's generate two keys, one to receive an initial allocation of coins, -and one to send some coins to later: - -.. code:: shelldown[1] - -:: - - basecli keys new cool - basecli keys new friend - -You'll need to enter passwords. You can view your key names and -addresses with ``basecli keys list``, or see a particular key's address -with ``basecli keys get ``. - -Initialize Basecoin -------------------- - -To initialize a new Basecoin blockchain, run: - -.. code:: shelldown[2] - -:: - - basecoin init
- -If you prefer not to copy-paste, you can provide the address -programatically: - -.. code:: shelldown[3] - -:: - - basecoin init $(basecli keys get cool | awk '{print $2}') - -This will create the necessary files for a Basecoin blockchain with one -validator and one account (corresponding to your key) in -``~/.basecoin``. For more options on setup, see the `guide to using the -Basecoin tool `__. - -If you like, you can manually add some more accounts to the blockchain -by generating keys and editing the ``~/.basecoin/genesis.json``. - -Start Basecoin -~~~~~~~~~~~~~~ - -Now we can start Basecoin: - -.. code:: shelldown[4] - -:: - - basecoin start - -You should see blocks start streaming in! - -Initialize Light-Client ------------------------ - -Now that Basecoin is running we can initialize ``basecli``, the -light-client utility. Basecli is used for sending transactions and -querying the state. Leave Basecoin running and open a new terminal -window. Here run: - -.. code:: shelldown[5] - -:: - - basecli init --node=tcp://localhost:46657 --genesis=$HOME/.basecoin/genesis.json - -If you provide the genesis file to basecli, it can calculate the proper -chainID and validator hash. Basecli needs to get this information from -some trusted source, so all queries done with ``basecli`` can be -cryptographically proven to be correct according to a known validator -set. - -Note: that ``--genesis`` only works if there have been no validator set -changes since genesis. If there are validator set changes, you need to -find the current set through some other method. - -Send transactions -~~~~~~~~~~~~~~~~~ - -Now we are ready to send some transactions. First Let's check the -balance of the two accounts we setup earlier: - -.. code:: shelldown[6] - -:: - - ME=$(basecli keys get cool | awk '{print $2}') - YOU=$(basecli keys get friend | awk '{print $2}') - basecli query account $ME - basecli query account $YOU - -The first account is flush with cash, while the second account doesn't -exist. Let's send funds from the first account to the second: - -.. code:: shelldown[7] - -:: - - basecli tx send --name=cool --amount=1000mycoin --to=$YOU --sequence=1 - -Now if we check the second account, it should have ``1000`` 'mycoin' -coins! - -.. code:: shelldown[8] - -:: - - basecli query account $YOU - -We can send some of these coins back like so: - -.. code:: shelldown[9] - -:: - - basecli tx send --name=friend --amount=500mycoin --to=$ME --sequence=1 - -Note how we use the ``--name`` flag to select a different account to -send from. - -If we try to send too much, we'll get an error: - -.. code:: shelldown[10] - -:: - - basecli tx send --name=friend --amount=500000mycoin --to=$ME --sequence=2 - -Let's send another transaction: - -.. code:: shelldown[11] - -:: - - basecli tx send --name=cool --amount=2345mycoin --to=$YOU --sequence=2 - -Note the ``hash`` value in the response - this is the hash of the -transaction. We can query for the transaction by this hash: - -.. code:: shelldown[12] - -:: - - basecli query tx - -See ``basecli tx send --help`` for additional details. - -Proof ------ - -Even if you don't see it in the UI, the result of every query comes with -a proof. This is a Merkle proof that the result of the query is actually -contained in the state. And the state's Merkle root is contained in a -recent block header. Behind the scenes, ``countercli`` will not only -verify that this state matches the header, but also that the header is -properly signed by the known validator set. It will even update the -validator set as needed, so long as there have not been major changes -and it is secure to do so. So, if you wonder why the query may take a -second... there is a lot of work going on in the background to make sure -even a lying full node can't trick your client. - -Accounts and Transactions -------------------------- - -For a better understanding of how to further use the tools, it helps to -understand the underlying data structures. - -Accounts -~~~~~~~~ - -The Basecoin state consists entirely of a set of accounts. Each account -contains a public key, a balance in many different coin denominations, -and a strictly increasing sequence number for replay protection. This -type of account was directly inspired by accounts in Ethereum, and is -unlike Bitcoin's use of Unspent Transaction Outputs (UTXOs). Note -Basecoin is a multi-asset cryptocurrency, so each account can have many -different kinds of tokens. - -.. code:: golang - -:: - - type Account struct { - PubKey crypto.PubKey `json:"pub_key"` // May be nil, if not known. - Sequence int `json:"sequence"` - Balance Coins `json:"coins"` - } - - type Coins []Coin - - type Coin struct { - Denom string `json:"denom"` - Amount int64 `json:"amount"` - } - -If you want to add more coins to a blockchain, you can do so manually in -the ``~/.basecoin/genesis.json`` before you start the blockchain for the -first time. - -Accounts are serialized and stored in a Merkle tree under the key -``base/a/
``, where ``
`` is the address of the account. -Typically, the address of the account is the 20-byte ``RIPEMD160`` hash -of the public key, but other formats are acceptable as well, as defined -in the `Tendermint crypto -library `__. The Merkle tree -used in Basecoin is a balanced, binary search tree, which we call an -`IAVL tree `__. - -Transactions -~~~~~~~~~~~~ - -Basecoin defines a transaction type, the ``SendTx``, which allows tokens -to be sent to other accounts. The ``SendTx`` takes a list of inputs and -a list of outputs, and transfers all the tokens listed in the inputs -from their corresponding accounts to the accounts listed in the output. -The ``SendTx`` is structured as follows: - -.. code:: golang - -:: - - type SendTx struct { - Gas int64 `json:"gas"` - Fee Coin `json:"fee"` - Inputs []TxInput `json:"inputs"` - Outputs []TxOutput `json:"outputs"` - } - - type TxInput struct { - Address []byte `json:"address"` // Hash of the PubKey - Coins Coins `json:"coins"` // - Sequence int `json:"sequence"` // Must be 1 greater than the last committed TxInput - Signature crypto.Signature `json:"signature"` // Depends on the PubKey type and the whole Tx - PubKey crypto.PubKey `json:"pub_key"` // Is present iff Sequence == 0 - } - - type TxOutput struct { - Address []byte `json:"address"` // Hash of the PubKey - Coins Coins `json:"coins"` // - } - -Note the ``SendTx`` includes a field for ``Gas`` and ``Fee``. The -``Gas`` limits the total amount of computation that can be done by the -transaction, while the ``Fee`` refers to the total amount paid in fees. -This is slightly different from Ethereum's concept of ``Gas`` and -``GasPrice``, where ``Fee = Gas x GasPrice``. In Basecoin, the ``Gas`` -and ``Fee`` are independent, and the ``GasPrice`` is implicit. - -In Basecoin, the ``Fee`` is meant to be used by the validators to inform -the ordering of transactions, like in Bitcoin. And the ``Gas`` is meant -to be used by the application plugin to control its execution. There is -currently no means to pass ``Fee`` information to the Tendermint -validators, but it will come soon... - -Note also that the ``PubKey`` only needs to be sent for -``Sequence == 0``. After that, it is stored under the account in the -Merkle tree and subsequent transactions can exclude it, using only the -``Address`` to refer to the sender. Ethereum does not require public -keys to be sent in transactions as it uses a different elliptic curve -scheme which enables the public key to be derived from the signature -itself. - -Finally, note that the use of multiple inputs and multiple outputs -allows us to send many different types of tokens between many different -accounts at once in an atomic transaction. Thus, the ``SendTx`` can -serve as a basic unit of decentralized exchange. When using multiple -inputs and outputs, you must make sure that the sum of coins of the -inputs equals the sum of coins of the outputs (no creating money), and -that all accounts that provide inputs have signed the transaction. - -Clean Up --------- - -**WARNING:** Running these commands will wipe out any existing -information in both the ``~/.basecli`` and ``~/.basecoin`` directories, -including private keys. - -To remove all the files created and refresh your environment (e.g., if -starting this tutorial again or trying something new), the following -commands are run: - -.. code:: shelldown[end-of-tutorials] - -:: - - basecli reset_all - rm -rf ~/.basecoin - -In this guide, we introduced the ``basecoin`` and ``basecli`` tools, -demonstrated how to start a new basecoin blockchain and how to send -tokens between accounts, and discussed the underlying data types for -accounts and transactions, specifically the ``Account`` and the -``SendTx``. diff --git a/_attic/modules/docs/basecoin-kubernetes.rst b/_attic/modules/docs/basecoin-kubernetes.rst deleted file mode 100644 index e89cd5b94c..0000000000 --- a/_attic/modules/docs/basecoin-kubernetes.rst +++ /dev/null @@ -1,228 +0,0 @@ -Basecoin Kubernetes -=================== - -*Note:* This guide is based from - and has been updated - the `origin Medium article `__. - -So, your Tendermint application is finally ready and you want to -distribute it and run it on several machines, or just run it locally by -creating a dozen Docker containers. We have created -`mintnet-kubernetes `__ -to help you achieve this goal as fast as possible. Note that it should -be primarily used for testing purposes or for tightly-defined chains -operated by a single stakeholder (see `the security -precautions `__). -If you want to launch an application with many stakeholders, consider -using `our set of -Ansible `__ -scripts to deploy Tendermint. - -``mintnet-kubernetes`` is a configuration file for -`Kubernetes `__. - -*Kubernetes is an open-source system for automating deployment, scaling, -and management of containerized applications.* - -If you had never heard of it, it won’t hurt to read `What is -Kubernetes? `__ -and go through their `interactive -lessons `__. It -won't take long, I promise. - -There are several ways to install a Kubernetes cluster: - -- a local Docker-based solution using - `Minikube `__ -- hosted solutions using a Web UI or CLI (e.g. GCE) -- turn-key cloud solutions (e.g. AWS using `Kubernetes - Operations `__; - AWS, Azure, GCE or bare metal using - `Kargo `__) -- custom solutions (e.g. Linux machines using - `kubeadm `__) - -If you just want to play with your application, choose a local -installation with Minikube. If you want to run it in the cloud or on -bare metal, refer to `Picking the Right -Solution `__, taking -into account the cost, safety, reliability, and configuration options of -those solutions. - -Further, we will assume that you have a standard 64-bit Linux desktop -with `VirtualBox `__ or -`KVM `__ installed. - -Install kubectl ---------------- - -:: - - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x ./kubectl && sudo mv ./kubectl /usr/local/bin/kubectl - -For Windows or OS X, please check out `Installing and Setting Up -kubectl `__ guide. - -Install Minikube ----------------- - -:: - - curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.19.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ - -For Windows or OS X, please check out -`Releases `__ page. - -Start Minikube --------------- - -:: - - minikube start - -Configure your app ------------------- - -Get the config file: - -:: - - curl -Lo app.yaml https://raw.githubusercontent.com/tendermint/tools/master/mintnet-kubernetes/examples/basecoin/app.yaml - -Open it in the editor of your choice: - -:: - -$EDITOR app.yaml - -and configure the parameters required for your application. - -The Cosmos SDK will help us create our own -currency, extensible with plugins. Writing plugins is out of scope of -this article, but you can read about it -`here `__. - -Kubernetes DSL (Domain Specific Language) can be difficult for the -beginner to grasp. Fortunately, we will need to change only a small -piece of code. - -The most important thing is the application’s ``genesis.json`` file. It -defines the initial distribution of assets. We have 4 nodes by default -(``replicas: 4``\ in StatefulSet). Generally, it is a good idea to split -assets evenly between them and have some large number for everyone. - -Let’s change denom to “MyAwesomeCoin”. You are welcome to pick any other -name you like. - -:: - - --- - apiVersion: v1 - kind: ConfigMap - metadata: - name: app-config - data: - genesis.json: |- - { - "chain_id": "chain-tTH4mi", - "app_options": { - "accounts": [ - { - "pub_key": "tm-0", - "coins": [ - { - "denom": "MyAwesomeCoin", - "amount": 1000000000 - } - ] - }, - { - "pub_key": "tm-1", - "coins": [ - { - "denom": "MyAwesomeCoin", - "amount": 1000000000 - } - ] - }, - { - "pub_key": "tm-2", - "coins": [ - { - "denom": "MyAwesomeCoin", - "amount": 1000000000 - } - ] - }, - { - "pub_key": "tm-3", - "coins": [ - { - "denom": "MyAwesomeCoin", - "amount": 1000000000 - } - ] - } - ] - } - } - -Launch your app ---------------- - -:: - - kubectl create -f ./app.yaml - -Wait until all of the nodes are running: - -:: - - kubectl get pods -w -o wide -L tm - NAME READY STATUS RESTARTS AGE IP NODE TM - tm-0 3/3 Running 0 3m 172.17.0.2 minikube - tm-1 3/3 Running 0 3m 172.17.0.3 minikube - tm-2 3/3 Running 1 3m 172.17.0.4 minikube - tm-3 3/3 Running 0 3m 172.17.0.7 minikube - -Let’s check the first account: - -:: - - ADDR=$(kubectl exec -c app tm-0 -- cat /app/key.json | jq ".address" | tr -d "\"") - - kubectl exec -c app tm-0 -- basecoin account $ADDR - {"pub_key":{"type":"ed25519","data":"793B7E33EF94132E16534CC9BA59F74944065FA917A98DB68ABA806D219A4529"},"sequence":1,"coins":[{"denom":"MyAwesomeCoin","amount":999999995}]} - -Great! Let’s try to send a transaction from the first to the second -account: - -:: - - RECIPIENT=$(kubectl exec -c app tm-1 -- cat /app/key.json | jq ".address" | tr -d "\"") - - kubectl exec -c app tm-0 -- basecoin tx send --to 0x$RECIPIENT --amount 5MyAwesomeCoin --from /app/key.json --chain_id chain-tTH4mi - Signed SendTx: - 0100000000000000000104636F696E000000000000000001010114A677E98456071E3240EF0A2E0B80FFE7D36515BF010101066D79636F696E0000000000000005010201E6A038849655CD3C94D06BAC1CA74443D312855A9BC3575311842DF74AF7DB772673DF60F3AE08CC5260AE93DCE4DB588EF24D08768D0DE2752F001DDC1DEE0F0001010114E2AFEA4A193E85A2DBB8668D4EA0DC0B1A6AD63A010101066D79636F696E0000000000000005 - Response: 3D54EECAAE072477E6119C6DF1762168F276F0C1 ; - -Checking the first account’s balance we should see 5 coins making their -way into the second account: - -:: - - kubectl exec -c app tm-0 -- basecoin account $ADDR - {"pub_key":{"type":"ed25519","data":"793B7E33EF94132E16534CC9BA59F74944065FA917A98DB68ABA806D219A4529"},"sequence":2,"coins":[{"denom":"MyAwesomeCoin","amount":999999990}]} - -As you can see, it was fairly simple to launch a new cryptocurrency in a -Kubernetes cluster. Moreover, with Kubernetes you can add new nodes -(pods) with a single command. And using -`federation `__, -you can be sure that your currency will stay alive even after loss of -the entire cluster! - -Clean up --------- - -:: - - kubectl delete -f ./app.yaml - kubectl delete pvc -l app=tm diff --git a/_attic/modules/docs/basecoin-plugins.rst b/_attic/modules/docs/basecoin-plugins.rst deleted file mode 100644 index 9f225ea396..0000000000 --- a/_attic/modules/docs/basecoin-plugins.rst +++ /dev/null @@ -1,276 +0,0 @@ -.. raw:: html - - - -Basecoin Plugins -================ - -In the `previous guide `__, we saw how to use the -``basecoin`` tool to start a blockchain and the ``basecli`` tools to -send transactions. We also learned about ``Account`` and ``SendTx``, the -basic data types giving us a multi-asset cryptocurrency. Here, we will -demonstrate how to extend the tools to use another transaction type, the -``AppTx``, so we can send data to a custom plugin. In this example we -explore a simple plugin named ``counter``. - -Example Plugin --------------- - -The design of the ``basecoin`` tool makes it easy to extend for custom -functionality. The Counter plugin is bundled with basecoin, so if you -have already `installed basecoin `__ and run -``make install`` then you should be able to run a full node with -``counter`` and the a light-client ``countercli`` from terminal. The -Counter plugin is just like the ``basecoin`` tool. They both use the -same library of commands, including one for signing and broadcasting -``SendTx``. - -Counter transactions take two custom inputs, a boolean argument named -``valid``, and a coin amount named ``countfee``. The transaction is only -accepted if both ``valid`` is set to true and the transaction input -coins is greater than ``countfee`` that the user provides. - -A new blockchain can be initialized and started just like in the -`previous guide `__: - -.. code:: shelldown[0] - - # WARNING: this wipes out data - but counter is only for demos... - rm -rf ~/.counter - countercli reset_all - - countercli keys new cool - countercli keys new friend - - counter init $(countercli keys get cool | awk '{print $2}') - - counter start - -The default files are stored in ``~/.counter``. In another window we can -initialize the light-client and send a transaction: - -.. code:: shelldown[1] - - countercli init --node=tcp://localhost:46657 --genesis=$HOME/.counter/genesis.json - - YOU=$(countercli keys get friend | awk '{print $2}') - countercli tx send --name=cool --amount=1000mycoin --to=$YOU --sequence=1 - -But the Counter has an additional command, ``countercli tx counter``, -which crafts an ``AppTx`` specifically for this plugin: - -.. code:: shelldown[2] - - countercli tx counter --name cool - countercli tx counter --name cool --valid - -The first transaction is rejected by the plugin because it was not -marked as valid, while the second transaction passes. We can build -plugins that take many arguments of different types, and easily extend -the tool to accomodate them. Of course, we can also expose queries on -our plugin: - -.. code:: shelldown[3] - - countercli query counter - -Tada! We can now see that our custom counter plugin transactions went -through. You should see a Counter value of 1 representing the number of -valid transactions. If we send another transaction, and then query -again, we will see the value increment. Note that we need the sequence -number here to send the coins (it didn't increment when we just pinged -the counter) - -.. code:: shelldown[4] - - countercli tx counter --name cool --countfee=2mycoin --sequence=2 --valid - countercli query counter - -The Counter value should be 2, because we sent a second valid -transaction. And this time, since we sent a countfee (which must be less -than or equal to the total amount sent with the tx), it stores the -``TotalFees`` on the counter as well. - -Keep it mind that, just like with ``basecli``, the ``countercli`` -verifies a proof that the query response is correct and up-to-date. - -Now, before we implement our own plugin and tooling, it helps to -understand the ``AppTx`` and the design of the plugin system. - -AppTx ------ - -The ``AppTx`` is similar to the ``SendTx``, but instead of sending coins -from inputs to outputs, it sends coins from one input to a plugin, and -can also send some data. - -.. code:: golang - - type AppTx struct { - Gas int64 `json:"gas"` - Fee Coin `json:"fee"` - Input TxInput `json:"input"` - Name string `json:"type"` // Name of the plugin - Data []byte `json:"data"` // Data for the plugin to process - } - -The ``AppTx`` enables Basecoin to be extended with arbitrary additional -functionality through the use of plugins. The ``Name`` field in the -``AppTx`` refers to the particular plugin which should process the -transaction, and the ``Data`` field of the ``AppTx`` is the data to be -forwarded to the plugin for processing. - -Note the ``AppTx`` also has a ``Gas`` and ``Fee``, with the same meaning -as for the ``SendTx``. It also includes a single ``TxInput``, which -specifies the sender of the transaction, and some coins that can be -forwarded to the plugin as well. - -Plugins -------- - -A plugin is simply a Go package that implements the ``Plugin`` -interface: - -.. code:: golang - - type Plugin interface { - - // Name of this plugin, should be short. - Name() string - - // Run a transaction from ABCI DeliverTx - RunTx(store KVStore, ctx CallContext, txBytes []byte) (res abci.Result) - - // Other ABCI message handlers - SetOption(store KVStore, key string, value string) (log string) - InitChain(store KVStore, vals []*abci.Validator) - BeginBlock(store KVStore, hash []byte, header *abci.Header) - EndBlock(store KVStore, height uint64) (res abci.ResponseEndBlock) - } - - type CallContext struct { - CallerAddress []byte // Caller's Address (hash of PubKey) - CallerAccount *Account // Caller's Account, w/ fee & TxInputs deducted - Coins Coins // The coins that the caller wishes to spend, excluding fees - } - -The workhorse of the plugin is ``RunTx``, which is called when an -``AppTx`` is processed. The ``Data`` from the ``AppTx`` is passed in as -the ``txBytes``, while the ``Input`` from the ``AppTx`` is used to -populate the ``CallContext``. - -Note that ``RunTx`` also takes a ``KVStore`` - this is an abstraction -for the underlying Merkle tree which stores the account data. By passing -this to the plugin, we enable plugins to update accounts in the Basecoin -state directly, and also to store arbitrary other information in the -state. In this way, the functionality and state of a Basecoin-derived -cryptocurrency can be greatly extended. One could imagine going so far -as to implement the Ethereum Virtual Machine as a plugin! - -For details on how to initialize the state using ``SetOption``, see the -`guide to using the basecoin tool `__. - -Implement your own ------------------- - -To implement your own plugin and tooling, make a copy of -``docs/guide/counter``, and modify the code accordingly. Here, we will -briefly describe the design and the changes to be made, but see the code -for more details. - -First is the ``cmd/counter/main.go``, which drives the program. It can -be left alone, but you should change any occurrences of ``counter`` to -whatever your plugin tool is going to be called. You must also register -your plugin(s) with the basecoin app with ``RegisterStartPlugin``. - -The light-client is located in ``cmd/countercli/main.go`` and allows for -transaction and query commands. This file can also be left mostly alone -besides replacing the application name and adding references to new -plugin commands. - -Next is the custom commands in ``cmd/countercli/commands/``. These files -are where we extend the tool with any new commands and flags we need to -send transactions or queries to our plugin. You define custom ``tx`` and -``query`` subcommands, which are registered in ``main.go`` (avoiding -``init()`` auto-registration, for less magic and more control in the -main executable). - -Finally is ``plugins/counter/counter.go``, where we provide an -implementation of the ``Plugin`` interface. The most important part of -the implementation is the ``RunTx`` method, which determines the meaning -of the data sent along in the ``AppTx``. In our example, we define a new -transaction type, the ``CounterTx``, which we expect to be encoded in -the ``AppTx.Data``, and thus to be decoded in the ``RunTx`` method, and -used to update the plugin state. - -For more examples and inspiration, see our `repository of example -plugins `__. - -Conclusion ----------- - -In this guide, we demonstrated how to create a new plugin and how to -extend the ``basecoin`` tool to start a blockchain with the plugin -enabled and send transactions to it. In the next guide, we introduce a -`plugin for Inter Blockchain Communication `__, which allows us -to publish proofs of the state of one blockchain to another, and thus to -transfer tokens and data between them. diff --git a/_attic/modules/docs/basecoin-tool.rst b/_attic/modules/docs/basecoin-tool.rst deleted file mode 100644 index 020c8bb4b8..0000000000 --- a/_attic/modules/docs/basecoin-tool.rst +++ /dev/null @@ -1,282 +0,0 @@ -.. raw:: html - - - -Basecoin The Tool -================= - -We previously learned about basecoin basics. In this tutorial, we -provide more details on using the Basecoin tool. - -Generate a Key --------------- - -Generate a key using the ``basecli`` tool: - -.. comment code:: shelldown[0] - -:: - - basecli keys new mykey - ME=$(basecli keys get mykey | awk '{print $2}') - -Data Directory --------------- - -By default, ``basecoin`` works out of ``~/.basecoin``. To change this, -set the ``BCHOME`` environment variable: - -.. comment code:: shelldown[1] - -:: - - export BCHOME=~/.my_basecoin_data - basecoin init $ME - basecoin start - -or - -.. comment code:: shelldown[2] - -:: - - BCHOME=~/.my_basecoin_data basecoin init $ME - BCHOME=~/.my_basecoin_data basecoin start - -ABCI Server ------------ - -So far we have run Basecoin and Tendermint in a single process. However, -since we use ABCI, we can actually run them in different processes. -First, initialize them: - -.. comment code:: shelldown[3] - -:: - - basecoin init $ME - -This will create a single ``genesis.json`` file in ``~/.basecoin`` with -the information for both Basecoin and Tendermint. - -Now, In one window, run - -.. comment code:: shelldown[4] - -:: - - basecoin start --without-tendermint - -and in another, - -.. comment code:: shelldown[5] - -:: - - TMROOT=~/.basecoin tendermint node - -You should see Tendermint start making blocks! - -Alternatively, you could ignore the Tendermint details in -``~/.basecoin/genesis.json`` and use a separate directory by running: - -.. comment code:: shelldown[6] - -:: - - tendermint init - tendermint node - -See the `tendermint documentation `__ for more information. - -Keys and Genesis ----------------- - -In previous tutorials we used ``basecoin init`` to initialize -``~/.basecoin`` with the default configuration. This command creates -files both for Tendermint and for Basecoin, and a single -``genesis.json`` file for both of them. You can read more about these -files in the Tendermint documentation. - -Now let's make our own custom Basecoin data. - -First, create a new directory: - -.. comment code:: shelldown[7] - -:: - - mkdir example-data - -We can tell ``basecoin`` to use this directory by exporting the -``BCHOME`` environment variable: - -.. comment code:: shelldown[8] - -:: - - export BCHOME=$(pwd)/example-data - -If you're going to be using multiple terminal windows, make sure to add -this variable to your shell startup scripts (eg. ``~/.bashrc``). - -Now, let's create a new key: - -.. comment code:: shelldown[9] - -:: - - basecli keys new foobar - -The key's info can be retrieved with - -.. comment code:: shelldown[10] - -:: - - basecli keys get foobar -o=json - -You should get output which looks similar to the following: - -.. code:: json - - { - "name": "foobar", - "address": "404C5003A703C7DA888C96A2E901FCE65A6869D9", - "pubkey": { - "type": "ed25519", - "data": "8786B7812AB3B27892D8E14505EEFDBB609699E936F6A4871B1983F210736EEA" - } - } - -Yours will look different - each key is randomly derived. Now we can -make a ``genesis.json`` file and add an account with our public key: - -.. code:: json - - { - "app_hash": "", - "chain_id": "example-chain", - "genesis_time": "0001-01-01T00:00:00.000Z", - "validators": [ - { - "amount": 10, - "name": "", - "pub_key": { - "type": "ed25519", - "data": "7B90EA87E7DC0C7145C8C48C08992BE271C7234134343E8A8E8008E617DE7B30" - } - } - ], - "app_options": { - "accounts": [ - { - "pub_key": { - "type": "ed25519", - "data": "8786B7812AB3B27892D8E14505EEFDBB609699E936F6A4871B1983F210736EEA" - }, - "coins": [ - { - "denom": "gold", - "amount": 1000000000 - } - ] - } - ] - } - } - -Here we've granted ourselves ``1000000000`` units of the ``gold`` token. -Note that we've also set the ``chain-id`` to be ``example-chain``. All -transactions must therefore include the ``--chain-id example-chain`` in -order to make sure they are valid for this chain. Previously, we didn't -need this flag because we were using the default chain ID -("test\_chain\_id"). Now that we're using a custom chain, we need to -specify the chain explicitly on the command line. - -Note we have also left out the details of the Tendermint genesis. See the -`Tendermint documentation `__ for more -information. - -Reset ------ - -You can reset all blockchain data by running: - -.. (comment) code:: shelldown[11] - -:: - - basecoin unsafe_reset_all - -Similarly, you can reset client data by running: - -.. (comment) code:: shelldown[12] - -:: - - basecli reset_all - -Genesis -------- - -Any required plugin initialization should be constructed using -``SetOption`` on genesis. When starting a new chain for the first time, -``SetOption`` will be called for each item the genesis file. Within -genesis.json file entries are made in the format: -``"/", ""``, where ```` is the plugin name, -and ```` and ```` are the strings passed into the plugin -SetOption function. This function is intended to be used to set plugin -specific information such as the plugin state. diff --git a/_attic/modules/docs/conf.py b/_attic/modules/docs/conf.py deleted file mode 100644 index ff69cce334..0000000000 --- a/_attic/modules/docs/conf.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Cosmos-SDK documentation build configuration file, created by -# sphinx-quickstart on Fri Sep 1 21:37:02 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - -import sphinx_rtd_theme - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Cosmos-SDK' -copyright = u'2017, The Authors' -author = u'The Authors' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'' -# The full version, including alpha/beta/rc tags. -release = u'' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'sphinx_rtd_theme' -# html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# This is required for the alabaster theme -# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars -html_sidebars = { - '**': [ - 'about.html', - 'navigation.html', - 'relations.html', # needs 'show_related': True theme option to display - 'searchbox.html', - 'donate.html', - ] -} - - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Cosmos-SDKdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'Cosmos-SDK.tex', u'Cosmos-SDK Documentation', - u'The Authors', 'manual'), -] - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'cosmos-sdk', u'Cosmos-SDK Documentation', - [author], 1) -] - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'Cosmos-SDK', u'Cosmos-SDK Documentation', - author, 'Cosmos-SDK', 'One line description of project.', - 'Miscellaneous'), -] - - - diff --git a/_attic/modules/docs/glossary.rst b/_attic/modules/docs/glossary.rst deleted file mode 100644 index 6c99a6a821..0000000000 --- a/_attic/modules/docs/glossary.rst +++ /dev/null @@ -1,334 +0,0 @@ -Glossary -======== - -This glossary defines many terms used throughout documentation of Quark. -If there is every a concept that seems unclear, check here. This is -mainly to provide a background and general understanding of the -different words and concepts that are used. Other documents will explain -in more detail how to combine these concepts to build a particular -application. - -Transaction ------------ - -A transaction is a packet of binary data that contains all information -to validate and perform an action on the blockchain. The only other data -that it interacts with is the current state of the chain (key-value -store), and it must have a deterministic action. The transaction is the -main piece of one request. - -We currently make heavy use of -`go-wire `__ and -`data `__ to -provide binary and json encodings and decodings for ``struct`` or -interface\ ``objects. Here, encoding and decoding operations are designed to operate with interfaces nested any amount times (like an onion!). There is one public``\ TxMapper\` -in the basecoin root package, and all modules can register their own -transaction types there. This allows us to deserialize the entire -transaction in one location (even with types defined in other repos), to -easily embed an arbitrary transaction inside another without specifying -the type, and provide an automatic json representation allowing for -users (or apps) to inspect the chain. - -Note how we can wrap any other transaction, add a fee level, and not -worry about the encoding in our module any more? - -.. code:: golang - - type Fee struct { - Fee coin.Coin `json:"fee"` - Payer basecoin.Actor `json:"payer"` // the address who pays the fee - Tx basecoin.Tx `json:"tx"` - } - -Context (ctx) -------------- - -As a request passes through the system, it may pick up information such -as the authorization it has received from another middleware, or the -block height the request runs at. In order to carry this information -between modules it is saved to the context. Further, all information -must be deterministic from the context in which the request runs (based -on the transaction and the block it was included in) and can be used to -validate the transaction. - -Data Store ----------- - -In order to provide proofs to Tendermint, we keep all data in one -key-value (kv) store which is indexed with a merkle tree. This allows -for the easy generation of a root hash and proofs for queries without -requiring complex logic inside each module. Standardization of this -process also allows powerful light-client tooling as any store data may -be verified on the fly. - -The largest limitation of the current implemenation of the kv-store is -that interface that the application must use can only ``Get`` and -``Set`` single data points. That said, there are some data structures -like queues and range queries that are available in ``state`` package. -These provide higher-level functionality in a standard format, but have -not yet been integrated into the kv-store interface. - -Isolation ---------- - -One of the main arguments for blockchain is security. So while we -encourage the use of third-party modules, all developers must be -vigilant against security holes. If you use the -`stack `__ -package, it will provide two different types of compartmentalization -security. - -The first is to limit the working kv-store space of each module. When -``DeliverTx`` is called for a module, it is never given the entire data -store, but rather only its own prefixed subset of the store. This is -achieved by prefixing all keys transparently with -`` + 0x0``, using the null byte as a separator. Since the -module name must be a string, no malicious naming scheme can ever lead -to a collision. Inside a module, we can write using any key value we -desire without the possibility that we have modified data belonging to -separate module. - -The second is to add permissions to the transaction context. The -transaction context can specify that the tx has been signed by one or -multiple specific -`actors `__. -A transactions will only be executed if the permission requirements have -been fulfilled. For example the sender of funds must have signed, or 2 -out of 3 multi-signature actors must have signed a joint account. To -prevent the forgery of account signatures from unintended modules each -permission is associated with the module that granted it (in this case -`auth `__), -and if a module tries to add a permission for another module, it will -panic. There is also protection if a module creates a brand new fake -context to trick the downstream modules. Each context enforces the rules -on how to make child contexts, and the stack middleware builder enforces -that the context passed from one level to the next is a valid child of -the original one. - -These security measures ensure that modules can confidently write to -their local section of the database and trust the permissions associated -with the context, without concern of interference from other modules. -(Okay, if you see a bunch of C-code in the module traversing through all -the memory space of the application, then get worried....) - -Handler -------- - -The ABCI interface is handled by ``app``, which translates these data -structures into an internal format that is more convenient, but unable -to travel over the wire. The basic interface for any code that modifies -state is the ``Handler`` interface, which provides four methods: - -.. code:: golang - - Name() string - CheckTx(ctx Context, store state.KVStore, tx Tx) (Result, error) - DeliverTx(ctx Context, store state.KVStore, tx Tx) (Result, error) - SetOption(l log.Logger, store state.KVStore, module, key, value string) (string, error) - -Note the ``Context``, ``KVStore``, and ``Tx`` as principal carriers of -information. And that Result is always success, and we have a second -error return for errors (which is much more standard golang that -``res.IsErr()``) - -The ``Handler`` interface is designed to be the basis for all modules -that execute transactions, and this can provide a large degree of code -interoperability, much like ``http.Handler`` does in golang web -development. - -Middleware ----------- - -Middleware is a series of processing steps that any request must travel -through before (and after) executing the registered ``Handler``. Some -examples are a logger (that records the time before executing the -transaction, then outputs info - including duration - after the -execution), of a signature checker (which unwraps the transaction by one -layer, verifies signatures, and adds the permissions to the Context -before passing the request along). - -In keeping with the standardization of ``http.Handler`` and inspired by -the super minimal -`negroni `__ -package, we just provide one more ``Middleware`` interface, which has an -extra ``next`` parameter, and a ``Stack`` that can wire all the levels -together (which also gives us a place to perform isolation of each -step). - -.. code:: golang - - Name() string - CheckTx(ctx Context, store state.KVStore, tx Tx, next Checker) (Result, error) - DeliverTx(ctx Context, store state.KVStore, tx Tx, next Deliver) (Result, error) - SetOption(l log.Logger, store state.KVStore, module, key, value string, next Optioner) (string, error) - -Modules -------- - -A module is a set of functionality which should be typically designed as -self-sufficient. Common elements of a module are: - -- transaction types (either end transactions, or transaction wrappers) -- custom error codes -- data models (to persist in the kv-store) -- handler (to handle any end transactions) -- middleware (to handler any wrapper transactions) - -To enable a module, you must add the appropriate middleware (if any) to -the stack in ``main.go`` for the client application (default: -``basecli/main.go``), as well as adding the handler (if any) to the -dispatcher (default: ``app/app.go``). Once the stack is compiled into a -``Handler``, then each transaction is handled by the appropriate module. - -Dispatcher ----------- - -We usually will want to have multiple modules working together, and need -to make sure the correct transactions get to the correct module. So we -have ``coin`` sending money, ``roles`` to create multi-sig accounts, and -``ibc`` for following other chains all working together without -interference. - -After the chain of middleware, we can register a ``Dispatcher``, which -also implements the ``Handler`` interface. We then register a list of -modules with the dispatcher. Every module has a unique ``Name()``, which -is used for isolating its state space. We use this same name for routing -transactions. Each transaction implementation must be registed with -go-wire via ``TxMapper``, so we just look at the registered name of this -transaction, which should be of the form ``/xxx``. The -dispatcher grabs the appropriate module name from the tx name and routes -it if the module is present. - -This all seems like a bit of magic, but really we're just making use of -go-wire magic that we are already using, rather than add another layer. -For all the transactions to be properly routed, the only thing you need -to remember is to use the following pattern: - -.. code:: golang - - const ( - NameCoin = "coin" - TypeSend = NameCoin + "/send" - ) - -Inter-Plugin Communication (IPC) --------------------------------- - -But wait, there's more... since we have isolated all the modules from -each other, we need to allow some way for them to interact in a -controlled fashion. One example is the ``fee`` middleware, which wants -to deduct coins from the calling account and can be accomplished most -easily with the ``coin`` module. - -To make a call from the middleware, we the ``next`` Handler, which will -execute the rest of the stack. It can create a new SendTx and pass it -down the stack. If it returns success, do the rest of the processing -(and send the original transaction down the stack), otherwise abort. - -However, if one ``Handler`` inside the ``Dispatcher`` wants to do this, -it becomes more complex. The solution is that the ``Dispatcher`` accepts -not a ``Handler``, but a ``Dispatchable``, which looks like a -middleware, except that the ``next`` argument is a callback to the -dispatcher to execute a sub-transaction. If a module doesn't want to use -this functionality, it can just implement ``Handler`` and call -``stack.WrapHandler(h)`` to convert it to a ``Dispatchable`` that never -uses the callback. - -One example of this is the counter app, which can optionally accept a -payment. If the transaction contains a payment, it must create a SendTx -and pass this to the dispatcher to deduct the amount from the proper -account. Take a look at `counter -plugin `__\ for -a better idea. - -Permissions ------------ - -IPC requires a more complex permissioning system to allow the modules to -have limited access to each other and also to allow more types of -permissions than simple public key signatures. Rather than just use an -address to identify who is performing an action, we can use a more -complex structure: - -.. code:: golang - - type Actor struct { - ChainID string `json:"chain"` // this is empty unless it comes from a different chain - App string `json:"app"` // the app that the actor belongs to - Address data.Bytes `json:"addr"` // arbitrary app-specific unique id - } - -Here, the ``Actor`` abstracts any address that can authorize actions, -hold funds, or initiate any sort of transaction. It doesn't just have to -be a pubkey on this chain, it could stem from another app (such as -multi-sig account), or even another chain (via IBC) - -``ChainID`` is for IBC, discussed below. Let's focus on ``App`` and -``Address``. For a signature, the App is ``auth``, and any modules can -check to see if a specific public key address signed like this -``ctx.HasPermission(auth.SigPerm(addr))``. However, we can also -authorize a tx with ``roles``, which handles multi-sig accounts, it -checks if there were enough signatures by checking as above, then it can -add the role permission like -``ctx= ctx.WithPermissions(NewPerm(assume.Role))`` - -In addition to the permissions schema, the Actors are addresses just -like public key addresses. So one can create a mulit-sig role, then send -coin there, which can only be moved upon meeting the authorization -requirements from that module. ``coin`` doesn't even know the existence -of ``roles`` and one could build any other sort of module to provide -permissions (like bind the outcome of an election to move coins or to -modify the accounts on a role). - -One idea - not yet implemented - is to provide scopes on the -permissions. Currently, if I sign a transaction to one module, it can -pass it on to any other module over IPC with the same permissions. It -could move coins, vote in an election, or anything else. Ideally, when -signing, one could also specify the scope(s) that this signature -authorizes. The `oauth -protocol `__ also has to deal -with a similar problem, and maybe could provide some inspiration. - -Replay Protection ------------------ - -In order to prevent `replay -attacks `__ a multi account -nonce system has been constructed as a module, which can be found in -``modules/nonce``. By adding the nonce module to the stack, each -transaction is verified for authenticity against replay attacks. This is -achieved by requiring that a new signed copy of the sequence number -which must be exactly 1 greater than the sequence number of the previous -transaction. A distinct sequence number is assigned per chain-id, -application, and group of signers. Each sequence number is tracked as a -nonce-store entry where the key is the marshaled list of actors after -having been sorted by chain, app, and address. - -.. code:: golang - - // Tx - Nonce transaction structure, contains list of signers and current sequence number - type Tx struct { - Sequence uint32 `json:"sequence"` - Signers []basecoin.Actor `json:"signers"` - Tx basecoin.Tx `json:"tx"` - } - -By distinguishing sequence numbers across groups of Signers, -multi-signature Actors need not lock up use of their Address while -waiting for all the members of a multi-sig transaction to occur. Instead -only the multi-sig account will be locked, while other accounts -belonging to that signer can be used and signed with other sequence -numbers. - -By abstracting out the nonce module in the stack, entire series of -transactions can occur without needing to verify the nonce for each -member of the series. An common example is a stack which will send coins -and charge a fee. Within the SDK this can be achieved using separate -modules in a stack, one to send the coins and the other to charge the -fee, however both modules do not need to check the nonce. This can occur -as a separate module earlier in the stack. - -IBC (Inter-Blockchain Communication) ------------------------------------- - -Stay tuned! diff --git a/_attic/modules/docs/graphics/README.md b/_attic/modules/docs/graphics/README.md deleted file mode 100644 index aefc54550e..0000000000 --- a/_attic/modules/docs/graphics/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Usage - -Graphics can be imported and edited with the draw.io tool: -https://www.draw.io/?mode=github - -Images can be exported from the draw.io directly to this github repo. -All diagrams are saved to the single .xml file. To export each infographic -select the relevant elements and then export to .png using the following settings: - -- Selection Only -- Crop -- Zoom: 200% -- Borderwidth: 20 diff --git a/_attic/modules/docs/graphics/cosmos-sdk-image.png b/_attic/modules/docs/graphics/cosmos-sdk-image.png deleted file mode 100644 index 666dff22cdef39d4eb24829b9f085d5e9fbae118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249169 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�%o75`U7MgQV1vLA0`%f7 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

ZGt0+528*UcP)1I9>Myr8mU$#c09Hx# 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 MS)nYe&A*NR6F>$l-v9sr diff --git a/_attic/modules/docs/graphics/dispatcher.png b/_attic/modules/docs/graphics/dispatcher.png deleted file mode 100644 index 424a87b94a8f672585cf49a3bfacd9be95851e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109009 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

B`J--0M5l|7KS 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 diff --git a/_attic/modules/docs/graphics/infographic.xml b/_attic/modules/docs/graphics/infographic.xml deleted file mode 100644 index a2165cd16e..0000000000 --- a/_attic/modules/docs/graphics/infographic.xml +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/_attic/modules/docs/graphics/middleware.png b/_attic/modules/docs/graphics/middleware.png deleted file mode 100644 index eea0692f018f214f19d5e05538f3a08f08a22ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143181 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

UGd)?dQ3gB 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 _BMX806%jYx#UOPkaDgk=qbvbg5#wXfSpF_E3 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

M(iq3b#T%;Kaf0%D$U=m7m|@FnibZz^i2vtD za$8Te$uEw|8KZ*l>gczxNJFnu<$Gi8jUVj~dp|#L=lVD+}^xb}; zq2_tnEIk<`iI0lU2XKCJY+k&J*k63kUr9yUf78OAcJN zJEHCkQml0ZLNh-#6vI9POcn8RWOl?wO7_oO&V%Wr_dNEJuy|WULIL?_KDPAS4|1a{+Kgpy zHJsC#z5H8!Y=4V>NvkCJdn?}4$Ub}{<=mXoBcn6izIK9ia6n~P$n}gb-*qo~!>9oV z!XaI_I`hw*E!&x4hr>M-(;U`^HX1)^O^RC?mo4_ZSr;SOeW#}?MWAJns>~MR$@b6b zA!P;c{2}t6Bn9bxb({t^0UpQ!^48vRayZ##0s@QMAexpEl${hu3Y32C`(Vt>V)R%j z_HDKV#5T+^VLo)cqY74L=V)h}>eUWCT_fFjm6j@kW+f}~97L7@EE%wGuM9JV-#(|I zz)yIFF3Jm$fl$VlB(4r3IK5?}rCz*}Y*{&LaYp{!&%~I#BVfsXVGlN=G%{RS0~x%_ zq9+LW)Xs|FZG7(Ra;6loc&gA^uPqNJGOBhqX|E6CJkR|Qg7Tx#O54;;?r|bxQQvgI z6(}fR`t_;M4zWbNtNF#qbPTQ%B{+z*-HCh{Qd<{G4_F{(xCFQrFbAEQT(dVxAXAtI z%o^^M5-QG~go0)wK@dPNmEt zTAou47*Q@U)?SnKG`AD$kv3erEj5g$?X!h=k%Kw#GH6F_aO+u(_P(v5zsI!$<3_`w z5ToC34m}8?Jn`{+t7%5 zxu(T_t1{;Zd+XIecZ@C*u;f@kwo0gjyxecQxa50imi0SSCJqTYQPBvYbm~Tke48a7 z-+g(>-iM_9$&L+X*v`WIu5c3Nb@6`{NeAj8-u-IXJroXoE9s}9_$Y`L`i zXX1GcQFj0Aqv2jx1{f^NtR<_-;a9p0O%b#}e$lqi9#ja8V;|rdVS(V?0)fxAUlOFfa{PJ zb`==0YIO4>VnE;a^>@2tu~o>pD`Ss>LEzP;j|x~Y!`B~b6G}0?;xu$ABHw-j38y@a z$p1Mdqo?q~JO(qquI^b+xBH+2b(@11;ut5btY=7=GM|52D)mhKgRn&@U|;?l(TrPU z905wKPN327{5(?V6Bxt)LMiHgND9%ooKe<}T*T11r$vkB}W|BZ?gnWy)0IXFIDSzK_39)Iy}g?A8@ zrkh0anUTL{;@f+jBi?vQ`DwKG$l(iH-2PdE|Gddja?9_f&0}6y2ho-{s&-?u{Q}FmFT`&IDhc4kjmy3py#O zGaVn4qH#fR5WExkfVg$yvT+DDFkVs)(B zD~^RAE^0wP>Nhd3ivc^Fjp^8Jyxy#PMGG#roP5aVI>C>uSdHu%MKTz_56vCT+oD)$ z_$(D7wKtZ}IDl!3is)^y()x@T{SNo&j}Dre1gL&F=GB5W|A4&x&EmBR$5X1#PU4C} zXQjjnLpC5cj48;b}S;`B)&$* zhFEm$mdB)l#hc?I}!g4UJwmCEO$jZWx=cAdVeV zYddl50CkA+-&H_GN)0F8%4mp&m63W;1j(Y0JZ6hZo5+ms_Qfy;OzT$WI2BykqNMy| zm3qe%P7I=r8NB(OVox?ugX)dvGm%In$_?8~cb(7gj`zBgozhx_`+DK-x z^`~^kzo(0pYwsha1-1d#+vOUP3z~s;z66VX+aQ;vZu1S<{ZVJl0e@!ZJKESI5wma^ zU-i4^&BJ(zQ%I)~{k#snoWY_drfTyQHQz$i6d9;gO+2EEMc?d>oGg=SR>CGywiY%3I*x4Y+Bc6%lee^ed~6WlZ;2^~c`ZyuC(jh|Ajl)gRP{Kjqy z%%GT?!A^oJ^2RJY>~8@?JZhtq~i>i^`rDG zoyHoMTMq=EqXwYWU{39~s8}~|W)ec_zNNq~xCjZ&^NKb`nxAj0eWnfNXS|F!=DQit z+U0L56+ZBGC~^4kh!KGC9c=QR*@B*y+;HDdPEa;lY?Gcgh|H8ddJ*FRM?_jLg%$G` z9%-8s$teq?V-ziQd<4&-!2mg@h2Wem&sl}h6ErdyDZ%a*O94hiJd??am8`HNBz2-|R^^k;m=zIi{>*h5J! zZ{PJc4T$+fp!U(6IJeA7%_4RQ*s%+p7Y*a|gS?~mw%VXA(~rv^8!h}E{}m|P>}jp{ zJZnoxq$eJ;5r8ZEAe!~JM{U6520Tj?Y5sKaZ8R(|c=ZMGxf(}7sW_ERUT2ywZxVL7 zkU^^Ver#(Us`lEJ=FzVAr~!xC+H;ZGqv^}>8deEN?KA8>otFsO7tdj!zBPPN*s1t+ z<*s%^fv|;+eh$mtR2w~386jTqYybO>e`V1%%xxPmT7WW*Fh((IHxUKM8`+6zl&|U; zn1V0rSnV1n)Y&pd=td89|(;$w?nb;1m5(EKuPf6xe*ozq;aD~m)Dd_3?H(p2ar z2Za)zX|@m^{Yeoc-$Ar#yFnR(S>;fPs@adA5a?L6%bDG|Fz}N7G_f2a`m4?^_CY>% zh+|U~Co-YA3+L`*6>n-Ok^b+jpis=a(DLg_&(!UNiw4gWp)6A5SYO&zWTQd>)3+0< zXpQuWUyr^n*NSbQeN^K*ih|IvMz=JmFMK7&0W%POq|`6fDY&qGn@zIFAiSeHjv^fB z2-FchU&N>&N{*qq_P28t((x%uedr5l&rQ5lKL@q@IC`sB42;SNJ#TqV? zy7EyQJ%#HJV}T6Kuxpe}9L1w!Ma{E9f%(zE82Pb*4;{x(GoklZNY!po5CMYZQACJ$ zmgj8kXREuAe!8j-)uj|8aUJ>*oBu*Xh^r9D)m^uv!pLni$1etBE$lRHZZ%t;e>|`F zGP$Kuu44Cvd!(kO(@;EiBxNhbk3%FTc>UF{;*-5=SuB%cySU_B;K-~{#?V~3nK}DD zYOaXXM=c0JnEnvdvhA?lIFRT~pmKa;AisUc zF`t}Mqvj9)Kkc5anSDWA63fz4g%0KU@1;n1r?)+g!kK7IkCQqgga9{r)VglhbiM?J zpK7RAvma5Ry0=M+g36JwI+LJeRLG2nsVrJ-&L>ZhWXO!3?00Eki~qzR4M4*iVouV>>1-wxH5v|zWc9pGKB&~KxJIS@=ziQ z3)eUUDdzea0p9wGy%F-@&fs@2B)Ly|49=V5YQ6-tF+A+v;+8+~wEx12LB23! z%-=s@pKzf#2G^Q=K>VSn-{wD&Ounq=(cnnj7c|6mJR!Uupcswg=4Wv;%WhyZ6LMoW z;aPF3?;@JTF=m;#KNbTLt39eUwCkG`}bcM{Hx-YNhW?yj%@V?lE)+P3eylY^8LG~3jL4L7m_KP;lrZ@xWcbUqZ z?tIRPRDP_FPq6Uge*J038h69 zqsye|Lvj@u0!x^(-V2S)uSEZzqtkoo-tGUw+I;qo3MO15eToViL=9zKZll9bsZw2^ z&pb@&79ksUD>Pgrgo+z-{9Iy~!^8KKXkF*9P9xA+dL2h-w(QpQ#c@W{WQMtS*JDHR zj%zn{PDq{*jG-A|B;uWdbZnfLADh*f-}T{ppoV{uX?*Eh)}wj z+1awnGw?&Rb^>Q9u?4z(enq@@P!!RFG>E6ddsMvR~ZeL=4_Ci$W{d?XI^A;+TcsL~{RYph4z8hfH# z6o8~sc?+-Y>&H%zZ>}%jNzmsA`jy78ota7e<8G5d<8Z$(u9bE#ausNc^e>VKgXP+p zvaF7!0?{$Rv8(Y(6f9-bc|fYlb)eD_*Jv!5i00^WrWPq$9Nus@BIU0w0@Ji5iw>*5rAijvdU*B&jcOr5_m?yESK-t7K=)udahq@vu&)C3=?yC|vqi5R7S+@GzdhICcy-q=@~j4I{`OF0Ku5oK}If0{Ia z$ogN8si)ibZNo??46QqDXetu>qNX%MLQodIqCQOp``b<#M~D~5gtd?6*2Fi)5of-_ zl7n&wB=SIC39TgJ`BZE9Nw!g_{jPqEX8|FUe!*eZA?>E!ZQr8eT9wlziglaJQJA_-G@^bG8Adx&q))smEP+({y z+)?IFpnX>5Uvv*lM)NhcH#MEEJ&A7mI@FGs$K9vPu=O*cK<3O{f%u=u3c)xj{7Jwk zP+2ACjjs9eVmFq^nmbV)WV#wnT%|^#o6n%D8FpJ^>X*_N)Uwe~Hm>5W+Xxc)0imYP zLradZduCQa3z&HT_cb%1+;soC5(FLi)3DddXKI74w&%Ug9Ev8F&m#41+SK6$vPtYZ zuv29pk+gi)c{xs1HP<--tU)PQWz|){IAm`u{C6PrU+%0oKAwr5R=C=jiUtWrz$4G# zpjys&YIJsZXqjFPL zWP$h*%F-=G8&6hBUY+B`tcyy|FVu#iaeT`t*rKwJYP++4Wc&f_ZKj zoJLDr5vY7tBMcWvJ9V^gH!=TwJh%ZUj~$XZ1EVZW>`&PDVzm-eRHWcZa@2Bg{`P|! zaK=Pmkiwr2;^?8ap%Y96igBtbg`X`l@uAA<=_>2_6NEr^*At_IxK*h~%R;Lv7wt#3 zvYKSGoY_xxtCJo}rHlgwcRt0Rmn7K&ZUGo#oVOd*#7Kk`QJkPf8vKS&A?QD-K$rTH{PvNwE7tXfKp}L z|91AtHaSAZ=8~3STq4KcUwSfF_UboJkWP%;H9+H(uW7q60{Hg;17BQZab5b7-19X) zjr+#_;JIeq#N0<5+H27JP>t2y~MZM1dVS@Jvhu97FS2!>eso0Fs$An*0!oX`USWn;pe z-6LMuU+&aN4E{<&gBf*%O`Fkz6%of#I{Of`oi0uE$;sZl@lIyJTCI(f`Lq*J#siAH z9{_EVVvz@Nho6JYb*2l`4zw%r4xDoG3F2KSzMR4CSmE8N+{r`rL<)rSs9u z6VZY3>tdwI+&z2TJ)BdjS4Q#Pry8+4U@^R>F6RCb6;eXdDqrrzNk|GLi+!J-3G**` z4=~GRy>)S-*vDFIIwVc#j1}Md=2T=zj`5>Yz*N;0=iEbuQB`V;b6AU^F zU+&uX!r%zGcmtI}ZvDtPW)b&+jfBP)SOg2Gm{#7vDB(fhZ5(q;}FG-*9noi4_uCYPFswH8Xf}Ltj5)K?86Z^hQDVMU4^%uBK%!D%e7>h zV8-yOIHJc^#r3J>RNZ;V%-Iss7IAH;=|1s&y8 zvajuSs`YJaYHmuI0Upsv@5L92N_vhW)IvGeU+P4b(du-(weiAO45mD+*_*C9)NTvD z;YQ~%rO`2VxH{XZNdn2gpfIz27i#w@hmoe~=@Pi3EAxZ#5bmm4-q#0}iiPZnq$W?i z2aephx-gXDJ`h%))O4IchZ4)W0zOgc{KaYusi#}1O_o{x#0Y*iPbz9Gv>I#cx6g=V z_xpvpE|s150^3AwwjS(9$^gnS*!@qdY%gtvGeXVw!8<%GY|y1k2Z1L&lVKI1JIJaJ zG-cOy(*I;XP0Xz#06o-Ev#U64(UOw_*<)nj!;PTZ6BRzkOMVb9lS9$ePlBnTPu-ys zAVZ{g`u$t&S;M@SILNKyzfmcKdT zO+@0hE=am#H1Z}Jl7=C-r4d25Hej~vLGf}suq%je1<sHM__ z4&2k5@+v<4{!v)2jonTSuvc(h>7=G998bwtP?z}8m^EYG-yz`GVEVq^&Q_v#-k^!` z<*ITrN=w4%a$W?O=9f0X{+(R6J)hWqkBKy3+eZwWW+-8?aMtNEPk#Wyql94PS)BIH zK?5nnxW}@$*S+fHC`nkJM{MyqQ!(ds!5MB54ZCLE-)an~$L4;(X|?|pKJVHFPG1^1 z%s7@V?(WAsSvl`E6|Lqx8vN8Ym34ZYXU)PzLk$bBN|JWev;K*+0yAy20$^ddfD$(!jVK$J6Z;~&zA_s( zIWJr-5tC}d-ygww`dtvm)bWlVE1c{zDF#AQ1m`{oE7EY;K=8|pFUS~8Vu+MJbX?cR zKRw;U13QG?eI=HV_>RVdjTa=|^1z|zkJ%Vio@_o@}>v%vcR@&E} z&$WXYhEV{X!~@F(DWjZ!p(U(nJvN2LGOtg*T)26h*ws-+|elPq|-~|)fcfBMU37(wBGL{rH4@f0F%{E ziB{s)_$fAn#6Y*27y?6@Q@we>97r7TMhSOaltwf0(SVu)U0`W%_0t8aE=-pnu2G3V zKfHQ0{5)+&>u}!7q$WndRED6lkGps6kTRwu+$~#rJBCwyK78GR8=4Ibgodo&R_4g> zsQK~%=e&)2D_WgKf&2>#itw!B2)4 z&MLPz0g`aFOZtQX!}zrq#~uko$&l5NjV~W@r(}32^lV=`+L$L4VKwNX$ZO3y=l@N!|NYe#dIqZl;hA#PAUv{yCnXJN^hj-Y+}`LL6m237 zjT}72)5;TlEAEt0vt$1iAVksK*U^v_2h3_k*KmJmX%pHqp?_|uL z(hmzqPfyyM+Cp*DiYgSj+%kCYIf>xDJI}g3&stTx`dwnUW37L6qu+6?uWB0vq|?Ts zm*5pZ#{ZP;`@4iaU`=+b%W?srP+sl0w!7SEU^wlJDoHvo)g|0$a{qhtEtS>2Z~pJi zFVoyNu_?`xU(UN}-$7G>>f2<>jBD{l_Tsay%pDK<9`MayOg6xxQVwi6p+A2Uxmu~z z(s`_Zy8rfP;B|99Te8GsC)yfKA2n~6e?_d~D7>zMChvi@WPK3&W=~q#cw7EQNW)Wc z03g>wZBD}V`UZ7-vs72%z0*tzxtMR7?+Pf(IkvkjJ8eI0qhPq4?jgsedq1+I>foV{ z>d^u|ZPlKo?}=r&rR?R5YF@yw@6F+|eX+JCVZ=yh`q_!%%%MHc(w9jcS*7=H+RSOj z(UrUzou2H!K!yLFGXCSMs+e;a`-`GJ%cA7BM{2jV}SA5U+1`&Fx^<=2U|g2*YfKCtT1png9RA{TNgB>@fO@Y=YQ``c-{Pq};ExOx%hTBnEb@zsrUv@jGw2!WR?A!j_`fSj_=WuB}>*i<)EzL)JZWuW&H~`-(y5q>}9#Wiuu)vUN z*>$dH0eOgdUd%1roGb;2w!RuS^0o2Iy1W5?eRbzi5bt&QLD6d<2pkT*-=ou&lVgwM zykoeF(eCYvc`$-KMwKrw;8Mb`g{mnZM7IjeXn?e*w?Z!V(&C8n^tb zqdPc3>YIOdA$)UR&iJ%>%5J|Vhw*c51H>ag&RhVDI(wbboA z>Uw^C`Dst9PzWw(>TcbXQFu<2MDgggX#0Mo;)9D#Y(6)+@ddkgU$7~-pGj=wzV@P7 z+dZE!zMgn}L&t9Y|x|+dar_CE9W&&GGjok=P=ldl)cr;mQ0XV-sAo z0zQ{nY9-65Mx=;d+ABhz$(qcGX`N;l!}$(JX4&OHvS&K2TZSk-uipg5R>d;<(X`Un zy-G6G8<#o`mq$rtkY}>jN63Q8Noul5@n*@Zy>AUxuEyP%N|LP?6BYJX*}gYxzV=?! zJ1srZyH##u@tL(ha=Z`1a48Jmk1kD{McZwci`W!oxL8jjWG`}Lt&ujIt9Nd@B`Tud zRn;RKSLG`on@v`?JHmP%?EfT{wX*uDKUYd+nc=J@)U#pNvQuw!ar@U~1ah+oq0Zt- z1fJstaR4E(@CI`JA@yw-;q`Bb@AP_x-6!q#SDbnEF6)x@-3x$XR)2fqLiN8_F#q{g zW)W!T%_6RBBUl=Q? z!;#b}1_b4lby?b`J_n>DPac`mreTqeEsBfLA)w^nRzXqAONjy2Ipo7Y9{31vYxe|N z&&e1lqL~{C`WqI?Nc6Lh+!E-a9S4P8^tXJjKsX}0 zYb#nW|M2;`%d7AQtz(TuWs_tl*I%vzCRWa6MTUz^bW(uPi9;vnGTEzOO59Z>r8{8l zGLFa&w0Ceyo8v|}hJfH=hjBdoQSz$;Bn!_hkf&=iMg-ox9aLNvH1zb$4n{Qq64J9nE>FPN;9OUWCz6GaI5fs+MQpZs{*H zSE+7WJTnMAf!0-R$Wd-=l5JJnY|K;lR+t26{su>RLQGCE8O}PXXNtEx{oURIx2uLx zf=RZL>f-RPi<17rh1Pg0R5-7Bi;2F`0WBv&mK}#l3;NWGUSN>i-M6O#@cuJ$Tn4YV zX2vrHxzAQ8OjY>{#*d2w-S}VgY+aVW%<2+)a-H3Nq7xnSyYx749`ItCvP8x^Q_h4C z-gyOyu<)V7AoI-ah;+UolTFcanwdyA)3&xr7BGU%2?5NWnqwV1hySc~{_E?`IAM@5 zRyDyD0WdqH-BU9EQG~H~T;bc+r0S~y2!#Z zq(s4w6Ls5deATTtDGk@3q}pRdYy$pVd42g5F_JR_z2I){61Nxx{nSV@42!EX>%w`b9}jVDh# zz<5}_7Pgq&UKDcgKnMLvlk}&3y%2oH57%~i6GD_T$QB3b*F%r_ws!Q-BJe8R0 zlQLF&BESb!XnGHad4K1QR3U#ae+q|wMwx2|&tHjF8ef975sVMDI}Rl~#%nRBbJV~N zW-QosAiOsW&9`Xfjl51%pQ`=Xk)y`@y|jJX2xdm9Re|U?AslAr>lvfkNGgno_B(M= zGGp2ocbk+%{D^fsj!e>vzsAOygJyf#5u(c&l+;u`h9(9__xXt&_d7d*8Zr_|@8RhvS!petZaPS3qTv0PgJMaJvKN@#EDqIq#j{l8hF5vNLnF z7i0^HkH~yJRGCW!1~RPQ&OG&KnEWt5qZWAIJ7cTu$K((lSK9s!z+{YQ)0#8*H=2${ z)c@O6iAC5undnS(g&no3yNH0xxqx!FUHtTB+!6ZOQJXj%2x8Tj2l`E(ARY7M3!V_% z8=6AsoKPYt;!3r?bzsT>E5O33!D6PT4oUmeFBFxLS-6ntedwaV0@_nQ5!qV69M z`_e+EZKvTKB6mel?+pzx5mSC3RcVlKH>^B^fiJ!!2FXX<4J2PK=ZBySC^X$xLZtE7fvvEmBh!}Y_SPQGh zH1z)JBVLT#NPpjY%u+XgkfgiX4>!R91_j@Yu5xxI>qD4^ci)tQMn1q>QqZ`aMP{%8OF-(Ry@!P(ejwCbVH zp%f-7!CDjf7pD% z;zihnF|6`^LG3!T5+5*Ip`MKz9L-M#`j1Fe{CAnBwImRK_P&Kh*IN7ob&Vsr)zJRu zdESW_i$G63lo*v5W?6ifMALh~&MDni6`&4gDd?}A$>lXW8=qm~<=DPcE_Myfxf0`@ z%9|3?;x2xXI6Eu8P^F6krZ|JMPEV{{ZA~hFh<9j~m-@XGYl(O>F||4Z7h^JdR-UxC4HsbWMbs{`ssmEbT z(|Ju-=@X$aB8e@3c=^&q^Q2brkY%#>Dg@Ced;DN*?0R2vQLNJ;*Z;_Nx0VnAUMxIl zf|D&pykQ-U1t-wqdd+>CU3+xCUyq9Ru7<;w9;SiJ!8N@^Akj`&^FYi?2+(*+onXUJj*h4ro~1#B2OfH zwTHv99o~c0+rYgfXP!`C9$$ab5AQe{dqM$HrD~A}NZE@a!Rz0TQtiC&Phc8YLXxy8 zLM}DGJ%6KMK`a0f#Nwrv?5{}<8+eU^8}Uac2tLRx8V~~$jXNp#(KoSd1 zq~1E1j{%RYEsKWc)$OdSzARyv5Rj-Q#Y-l7 zF^0T_;0xL7e??{{UE&?UEVS~&vd6<|wwcu~-yTO^L+^Jt=WBck#ix>_IS!h2z590! zojllwO5%dUi0ziv!=SwRE;&5Astc=_lK1Yb99ZgEdSjjg-R0Qyj(D8^oZ*Vlgv@77 z2!@`9|McIa*JmJW72$L4e(_Brl-qxAWB|81DlhE{@X62wUJ2Bd{q*}oy#{-Boeymo z09#D`4Zx=pztguw1LoJf7ScU|UNP$A0v+@d8}%|x|BQZ`sGl=YRhr#y-(3~JXeHi8 zeP5wikABy^k=k3Oh%t^`>GasUq4woNgJe=_WbK3q$2#aO&hwJpMT0eB-Ak2s-=zj? z9++iuOD>52uw#(!DJak$ zz_%i=b4RBVfsBlYv;$Z)E+r^=re~}H#=0jk$F7KXD;uMtCG~YqA-LNVEngK$dbB}> zPE_(z>na#F%=D%G_Q2?SfjRU$)zK`Kzi^O_%lfBadq>(A3p$kOVy@BkLxz?(oF;(f z4?BZQr}VC4vHg&z+ez&f8FM&ClHnCQ3b=j;asxb5P~%Zh$k zg?r*s*_D1#{<20!3OCh=W-XecZm0$iD}M_0e9K_}JH@V`4+Po(kX~VQ^JTEO8C$IweonA{*XE29T1< z^+}I=ewwc$5y>u1b(~=9e@|+$KkM%qf(wgt0_`2^B?FlJ)=W>D9BQj5`p6Jq%<)P} zDNX4=!7cGX)dOmj%`MH1vVW&KlWP%Tuq!m;FuVuPL>=~C&q%xjg$p31dPwQTrA|zU zEiaWGbMRGY`O{i~oo5xlPw(hpe(=+aohVcBJIwT(V*I^~3D;D%il-e={0QHKc9QFs z+8qGiz9r%TAEDSG^0A*94QWz#*74!@0q=lZs)Q02`d;Bg$IV8V9*(qy}i1fp2%me$U#v-hU2Xz=6{z=M-lTQ|HjKM;X*$XKCMa z9fJR2{sIjSm{zo%So=_;g99HL(phbd9VHa!ETt_)28Men_nCdM=?Y{|roUVfKIHMW z1W~+bmt{3--LZ4f7t?Q31^odzp+=%?j4x*gEr42i?LO|89Ik+u`9<6>s#TW0027gw zeBTRG74!^N-P=^RD*!!+7^K=!Nh;BqVtw&P-bL2`>~EZqDrv;Ugi2|xBEk((peu0# z{i01VUX~86$6I1s&EanR7Ex|KT{dG+uddoS9y3cvnU}UB4H|$b;oR2p(nh>`VVAe# zxm<{Sa`Tmd&z4uWt_+|q!uK$qO8RElC2fBiXp1{5;!bm`dThjh4Etfz>!6_5VZncG=>1~$9R5{JGJBF6{`48Hexm9y8-}& z+gJA|;BM`Zxz@3>(Kn(udHRc01~|G3OQZn=t{|-#l3Q{Sc>YakhnfDp=E%mFXHl79 z^nUH={0m?lSEiKolb&0EK#rBZmJ2py2Z$S8u3N8n92{UsAbuQ7iNp^MGuy9PL?!k+ z+0Kxn?T&}P(Nmb43bpidVDOq!UUS@TRx|Va_=g()e)cetw&CsP(;#@_@%Gx7Yhr0r z9;*1?>;qeA!d|?1Di;7Xa@t2*;)MrIyY@YOAV{bA;Vv6&D{ZqaCm1DFyWgdy$6o2p;#z=@9Lze zowv)67fK>n*iK~dhC8|<`|vbviw2ClTj2{5n~yp;Eh3;;#x&ExGT8q+o&S-(2 zgxI=q0{_^t!c0#JA_qq{^>YEYU#7*c_bo6?ad;&9bi7jXkS4`n zsEc+R$vZt9l63e|9;bnB>ZFn5ik?cqkyT5t`_i-WN22z3R%t%2bkiZ8N%03!err~O zdv{YFwGECQ8Cag{o&j#`r=ofFc)_}QQxh4G_x@#C*9@qv+mxFI>-5Q3GK!z}nkuTP=dMVOuc^IJ({tf-V6IPzlz#jKgmgv&|E6e1 zrJIH=FXbryBu?CW;SzylIS+fVDGVylhHtNiy8--qN-TA#_A4U#U4WxEcY9Un1d1|y zmUZvdU5F-N+2WP?TP#$}x2nRyHc-r)vH^omC;mcRD0|4o;=F<_&<;E^qKAV_ z`Q|CuBW@!-FMpJaPMEyNc( zp(NGWt6e{M^@DdP;DZ5`yLV`4c%m(R)crr-(uLLrp15F#r!s$^AsYy@B^+Kh>67VW z9jc;vryQxe%$2(`9e6}vzm{SarQ2&X>T(TrTG1W$n4CQiaMv#w=+<24_kLYOCyJW@ z2pH3+@`k6qmSgGe>TemUB$#s5{DLvqksk7IyBU~Wzo3sdUrN}AyRV^E1Rl(%FI+=>BSE!c?fCu^n0`^c}~ZUKa(uey~MsZEn2_e z_RfX3WlYO{s7)RDn^y8?9>gw1@Wi~a(r(n=<+EzU1DiPK=Oglc%Q0i(El=m9&4bt0 zJ+{*uT=bUt=gRQCxNVBI>Ew>Yn8hbh&lTZ%82rCddV~`8YHsj{ww`#Pt?)mR*3O!i zT6ZkUDI++q^2yYss?LLb=`Dn?hp>KJ328<^d>Tt}XHsU(=NI;)Tx|u}GE`?>w!=^N z49}i=xydoxP+adlKpQ>R<=;JaHei<@J}h0%v^1jpcJzf|G+!hCY+U{LWd&N}{jc*5 z&O#UB8e+VXIyHIs&p{c_RV>=K=AJ7+}Q=?svJdBfQo;A5HAiL6G?k z!gr0y=$q`SYbX~n7RZsn^P(5@6t%2B=P=ih$C_tmsF|N0bugW9Fb#3PHce5o^(+76LG};bxfSpQF6Gp!Y+I&>`zKV$$+8}WJwMH zU#quC3QUu?2|tfL{b_j{So>-rK`Ruf!BfUp0UHsW76p}M9=M#RIqUI^lkV+_G2?eO zbY)&Qs9WWD{b>x(urAd38N*TR)!60gbdbyvn8xaE(KC~uDFu_lRZU`?g%xVkuU8~x z0zGG=A}i^uLa*+a9RpTVt5D!{vBwh2nv1M&Z18rb&FLZsgcO@vE#132bvsULDnL2a zWA*LeOaK`q(&=&EZf(4B92d~rWAs6jJB_ZSBOUIRS$HpKG!G5#2Q<%;X%1{)^2P&} ze`*(5-Uyzs_@IbU$@JyM<)}G-FA&qE8U*F{+V0{S|;6T*VMr*e& z-5*@|sslO)Tl!~%eA2kn3VT_|72d=2ILUozo_=x4doPB?R(<)@oB$JKen)>wk-7hY z0QD@BmHUiEvPc?isNN+Vpz&x+oJNqC+_g2ZgJB_J34eZv;+9;Q97IUuPr#IYD2UZsNQpZWRv8%IC8wkuV#4c9aCAX$>PMPO z$HlrpHJmw1PgDdIKM0bk!w)}9GN=*e-7Y>;a#{O(_t{fgBSIUMA?h$2uz( zg>j(J`So>w9m(Pp&UJG2F}OE`7Gnn~@Ky+GAI@+>0wK1E@ZOQb2oV^WdVmyFdTRVG zFoMphQ>;3MrhpvAa)*HCF`c^;E(x;DpP*Od1!;duUVN=oqBxry<5pKI=x$?Fjw^aX zd6;;pD!SnfXazvHexz7#`8>!DnS;Sq?qI+>pc6SdeL#EoY(%b8ZiIDJMUQjHb;b&- z(u{kIfX?x1GTzOE7u4#bVQd){G&4lRs0}x@QK9sC*DZzhc;{ zMn;H!5dS(LLLMN^O}{rwi?>r1SbeNg$YBU~rNlwL9onoK7p>QBc&%FyX!oiur=9F4zte(ccqIELwgWMYlVq)HfY&`_LvC zDxap%r@0mA-d(_$=j1X|@7YTPfJiCg4jC)s_y&7@rG8f+GsT!lDAw7o2JnB8A`tIP zshzy@k(q=Elc{%);mq&+yc=8$HQ#?cs18$yu`FouNA5lP>Pl_qdPeBQEkSG`tR@xj zkk0}o!6R)P#C|~}AQ!547&f@5?nYi!-cQee6Lc|q47-{%_Mtn#{nePPUlnB|2{N zWHRLA5t+xnw-?QptS;+5Ts8!?7Z5>$e}|-@asgLsreQBUpBPfBFAL?lq)%-qnht*Q zQGkBuf%?|~(nC}7VhPpA@5gO5wG~}rgSelidjNI7>=|)dyg8$Le@kRuh|nOI;<7ZT zE%-)I?W|m`vWhR3_;vft+1%QVQ^%odm_De$8wOZj&b_K2_ciEJuY};~<4c#2aWFBcd&7_<+>0_Hh#!EFlw% z)h6*)RQiH8W*LVnyx;msjlP@K6eV%K3cKI-E%;>0)d74OF+=1cpjV)}axG@90 z2eL9SN(05udU~LCV66!hg;w+S;T-_dUq4-Pdz*$#0@vVI;sd(@3c7F*->`Ks_ytTD zeQKI8L;AmdI|{>QW6Q$JvrG#Mk0G@ANY}mY^xDq_qodkb{%a_S*aTab zAO9XL`A+zURCxt&Ub%-dtxHs(jHYZgcv!RSv&OSl{wZx$cgM@^c#hy=ExFDm2VPEeBZSAwwyf`IOD zk?zQ0KtBRI_VcyBz~yd>1Lj#ufO-gS>@Utm6QK;PFn+C=Sdb9nF%k4}#?V#a2SDgp zne5NDt!YkY#q}_5k*G&|RaFe;v}(FA%{}_6h_1k4QKVpEdfYOW&QxmCbBK14Q>6+3 zFcjcpSCyHCg(ObU&gro_vjHy#PgRb6lVWKr{bbV|Q<-X#HzIU?Vq1hKHG^T1W0blT zr_eO~+Ukv~2s~P=98h5-%puVOYNrVez@&`O70Lkj7kGf}52dFIVUGtkLU*%#$<5RR)G`WJdJI z3g3O{RS9FNbp{rtFPJvzRnZ_&?l30I@K94L0FF^jl*P6EY3saq=oia|?(EIN$F5)s zua)4vSW_N~!n$?>CW0SI_`llQCm~0h?&Y|-3fOEuyp=str$jQZVpM@qMHanT$)?CZ zbeiuIpq8QA%8nXQijle#z2$8SmtW3PY&tZH?G4N~`$FAO+rFhjwylPEp$&BShVDw1|!1s~(VEhH|PNt;keiqR3hnA1G)BH8u$MLZ-pcbFI&O=Uf-zkk8Vw zGaU15K4cd^vI0?LGHP8p2RYC&hi!~fgy=52aM zz5uSl_T@8~+7yQ0-@*o&f@mJVjTh+=-+cyCNTZ13&Mx)43_v1*q{WmAiZ!2v~wf@?Z%mQL0Vv{QK z2g|Y*=43MqczPjv@HK$y?uFvqo+L)>woMXyN}Y_f%J(y^W=_MkMS91zWZ3f5p*39hf;@0CX?duOgUlMoz!v(+`dCG;iVvR*SYm47+<_8Jw6x*9ugrt=aVnx*iQko$X ze?QY)}$p{JQeT4B&z?wJt%lO0GdHK`mAC7!BBW1Gn1bpK*OB3 zAYLF1_<4M>mvbOU-wqslM};j`FntnRJKGq4u-(>G zMivwSSw1stI^j~kzdhXb-BV(bgMn$_CRg72|M+C+ep2uk9w`W}NZQX%jZ_6`wC-jm2aQo5vBM=A(HG>z^$Zmxsf*+S}$u%2;} zoYda6`|E&?L0w7Y^slO^1OQQ=4tPJPvJ)*r-k8k5OlsGF|3Uy)Tn$uIa^!JQW(U9I zoM*POv1@o;dwz#RLpeHhY$(oA$2z#>$VlR()a;7W=czTrnDdWTx!EUAz9kLKXwK|b z0d=356g;F{JS%f~O6%bdZ$UF!HS=-y=Tt9Mr0{OTWrIO+m(Ep04Q0L?r@3<1R`H8+ zv~N~D$0EMVTw<;yi$M8DwZdR3Do6o^eQue`fEEXs>{@Ooe zR`cD*Tc#0*!z^4cCacjuYSDEa$N#3>|FMR%F%Xk9QCkhVl0-b>u4k~tl>Ujy{Vw`= zKnCw^wrO6c199(o5^uQMV(O%2A79AUtZmzp8d#t$%ONcshAG+&>!LXu=*8*euEJiK zo?bw<{Z_(!RyreChJ6x?yA!^IH(tL?CLLh>bB4&5 zb7R2hQ95p;V#C!lDD&r_w)@q>43I*z-72!b8OZAgyYz4tZgaJqY0%ZP8}s(8UlHik zGcn}=4oY2!H3-h-vCkRah7d=qS9h#MveGBi1I+>=ver`G<6$jH!(g|A>FCnVYL$39 zAQ(O6okNd;P^6F(p1AT-4m>5>&kl7rVad^~MZ@UagJ~B@=`&phEzk3wn0Qb{{uOiD z$C0E8(*EIE@?D~|t;dz>)M-e7u6hn>ymzTH-JU%Ibq{qlO;Z_4(p2XwomZ$YbVFr8 zVv;B{kU#Xwons&V(86e^!e&=5>-SwRJRiL3^s@|ijw)4K-EK!GiDJIIVL?lchm}!> zfSn#B=MM3bV(AlirrnW?nTh$PErU>oAC{+QWM1K&L`U&DL2i#VUTN;{;%m7~3>C%|0I&=RH4*;3L~ zb^_wcIlu@u9dLj5PoD8coPAQOl~sn4z#EzxHj=tCll{Y-WW9dMmz#rBiXa%Z0QYpPnno_B?@KqKg;XF zy#8dYAxzr(z5B{_p2@ecWC`5K8g=h6YO1H&Jw)VNicU~q=GdlCCe0Q${BbrL#R7Ek zOOVq2+V=L<2Fzzzu(N49rq0m9zO|4;gdv4oIIph@ z?tQ!!5ADSpCi>^|W8!133Y+zx(=>gR5U&g$zbx^&)!aFsus59W@H+F1rSC>{ zBVw_OZ4C$kciYJ7Q`gzvUhGKIl-1STb~}` zGEB93PiiS?rdcPjces}1vzC4W0O_?n#d^7xBFNWYmAO5?}b0=&Pu{2xBH- zvv0WiZc(cvL_jobtZZVB{c_XWC@!9e^5bF7?nuLL*cn8HWyTkd)3y~32`a<#_~gMO zKNUUt=J40mhHWD(l~_aWg@oOmV#J7c1RQgcVM@Y&98vax15OqOb;sIo@UxlPNlAbFkgvGyDVJ8!`94ha3iDspL zI^hfq#88B@%DXK){O%X}-Va`46r z4*5g!b242&RjoI{JkN<@dQ;>u5kN?r!cuY#is=C@kZIJlBQn$U16f#**0MK*2k6Jb7 z0TK#yOH#UlmwHZ7N;#m(Ojaekh9CwY>=jC#q=J0?R0P*bo5TT+rWPqXS45{7;I+b~ za&Y=f{UXC@7MO>IM9STPD<(DEm7yvILHtm?lhLFPkBH2fiYXNS+||7_q(WWLjufRk zq-!T&Jbt5PR@`G%5T}|6$!?%}IqTa`La-r}sF=WUhNgz?408qm+knEa;*&b5)tgHr z-Lh?gk#PIKGeSIKUTKs)Fb?jG8{pE(^#~;$1QO7$_6Gb73v2zun3sr0ATLdtmox0Z zIA%{8X`=_UV+OR<57gg_^+a)@tjhna<(||zPyr9w*y9U;ZPgR=tl-KBxO=P2bK>5{ zY0`V1G>n}KGa^ozk%Wt*3!0a)`?mJ0J*G$A3m$EN-fZ;tPcEdfdgc7C;C2(rjho$m-kF4TFJZE0K{wL z6La;zAZ$bLHmF}YnG~Y2ztqBYJ^g@VAB3+k0gg-3ps#i|^d^Kq4-GidEEVhsSV0)v z3oL}vzds+B2fY3MS5Q^jfTJQeacsY)=$R!Jx|sraR75+PgWf`7g`?QE4HKvUtTy-_=z^#9Wj4BlLBGom05oBh3F_sKl+ad<9iCq>(yAkIVWsKhQ zI}w1tv^9CyaP-NG;jL2Y6>P-8)_2s;R)vL*Di}7@6*Rk$V8muNJA)&P)OE(AgKZjq zhVZtZE#Vkw?1rPedxIiCJ7=R$n-N>jQGEq?h)BtY`pjhFF}}xDCIpxFrbOJqqxs;5 z@cKLpPwUb(8ml)-4Q6^MKHfWmy*X}--=~1l&8n@8Ip$I?Hu(SX_11Asw{7D;C5#X@8mVm{ zAuZCQ#t14%Ta)o1bX-pXtlKK}F**aREq(kJ!7y)E%&CC~@?4Bt#^xmp8$deq4g_3Q>oGysKc z_FYPfp^K(RPKbv!UByH-@cXWqcAN3Q*nZ5u-#_`von9v%Ka@WQm>`96$%EnhhPBrf zzV6#Z1G3Vk7j9RJ(o6yeuR_G}Xz<2G_eV&-c z)Cm{jp9FYnkJN9U0tm})G}QtFH1P$5Y1|Jtm}>l|W6N=!FFWUOB~tds4I;7) zs@M3X{w{dH$kt~GI#(T?Z*Qe)Z%o!#U`ggx85y`!U+8QI-xED8*!A41&~=#x*jd+9 zP1}4qq+jRWGZ%#2s|*!OFEFG6lA#0Fgv^T8@!*dILHt;L03|J3+A6~KQ8Xf^u;Csl z+st>@$Q+JoFzh#dd#Q`iZNTFg^!YnS&G8g4In!#h#T65o>w}+64n77$dwolMsZZxe zIc(Yo^$b6GAJlgbDy*>p^To#}MZiDOJ?UCoBfne?()GlOA-GxNjc?@t&?ikHopTT6 z7}^)$#bq&7g5KN8FuQ8F84f7up|?F z@2(ojA5FP10L|Sq3qW~t<)+fH8$f5)b9CV_y_seK%eD>r! z{m=~-rwg?Duv#PJYb!zt4)lnC@X!FF!@j9UJd}E@8_L$UmktaZ^52u3$8d?>j}CZ7 zyU<(@OjIpz@yF30Kuo5#Wc2z-Mc-FZ40#Fa2~uTvo%a~1a2E^fF&UjJl>l7(>Rn# zJN>DfAjqrzzRB)8E0*|)`C(lkG1ATGxmhM>9!LdLQ;8Lbdv0VEIp4eSCr#*S2jB=n zndLetx#tUd+`gJo9#xamKS%OAcy9~Uj~=&1q1!l;&=O%$MTs9GRwZn@MDh_((7o-Mvp*LSq80uHFS@)Puu{| z#dvsWR)=sx>K?z%rytKonSLb(cYT-K)2lXY66C$|WBLF@LQC(1c(LEU~|0cni{u#5=>);O=v=izv)_ z|%P} z34vvQeWdhD;CUk-jCSl1>A02jZPKC9+hqnFR}$&)K?w>1MkR2djg&6lCh^7EyJOeH zxvwO}y?B(Finj)IL)KOp-uL4?FR){YD{fh2Q^=$EB`GR%ErUYbllabEzSf?kFk{QI z2Y?|m5*N3K+0D)*5WYpXGGu7y_h>mZ%U!T;r$wyzv@HF66DZ5l`I*F>r2(E}*-MJv zBi=@byFi4rof#%*3zCk>NUdb${p$5FG$(56&CIvT3xQKv5SQOwOJ%N?_wtdz#NUf)Bk^8nU!!H29Xo<#|7YgppmArQF1*uE4d7F zpNZ_ZD}>6g(~pB`3`bOpO}+Nm;LwkFe%dFEcJFZ&Fs|(6aH=%JJL? zKaiYIGDam9UvQ+G-)mAu-1=HG(s=AcHAv|ko1{TX*BWl;!mId7cxxHt{fOwQcs6_A zO{%B~s-B^v;l-MbLOxfdl|xyt_;rhDaQVn|)oiR>EKgIj_TOh7SIww-i2T4l6O8<0VlRKRC{B|;E&z1GDI!drb%`)5%XejO( zC!*bfTETB54v(B9R5YCkQ73z=VVUYI0ktW_8(J5*1K_PC((Iyc&%$Dt^Ul2C(I8HO zPz88#4ZQe9L5z1_-lK|_rK(ZqIeXl*`cHwM{QC{KFXs@oc}3s+M_>7Zlo_1krRG%6 zusU61VfG&wG2)bKI}Z5OMBCaC7(jRCH`;`pgGb#AxA=Ql#?U?_VKOv|Q>o zo+%OQHf6&uHtr~4Y!p9{OhB8WtANG)S9+2IW2uBFfVYNhyGb&;g#~HPLT9qJWOcEQ zZ0;w-4$^I&Thn79Q;gh*0o`q2Pj4?IN--{yd9yvJVOzm?a#xs3FZvfAepI5W0$3ka zxGJ~AavdT3B*OAMZH^%HUD3L#qv|baeq8c()1nXQbeu#%T8MY zClu6%>E)G-Ss1mGR5|tEIxDOaNASj^>bBopulD%UW+uRjGl!@&6tb`MWtDED_D|^` zjdY*Mh9|s1BwY^q8-^5>L%B9Izgw6T^W>8oPxVGmK7+Sm!f~a3`gYiZ9y_d#%WFBv zVDvs@kzdE@&Lov}Qi$pnN$^j@b#W-0s2h{U@>PrCtKwtt%94VA*3(=3WRsxk4{%Kv z(G0Ko{>bo+oWraNt(oR0&BO$~gt?IkYk8G?5<9!Z3jRae5hm{*#7JZxHJqlulHu1q zJMeB?eUylb!e>SZRrDE=S)0ruEYq!dUc>Z6hnJ=#^59mcLud<;t{r`usqi5vc8bB% zenXH$@RlIQ`PZt-m-Qg6%!Dz9@r{=DvaRV}`H|;v>`S6@K)k(|Kh|+U)QG74QBa5; zD@5t__ zb+KxgVr8@in`bP=T617OqoNh|V&04uf5XfhV2UJaxXzxOvbPqOPsG4JtFx4PnLzq#~fdHUW3uJxC3dw#X*Q5pGr#we!N5V&329nNL6~ zx#{ng*O5dqmiIU>c038L{_slZJ(>ce?}W|s?^RXnU!(BuW|Z*3s+2SIAAmzq=e=8* z^EMpz!P!bLpBnDfRG?-DxpVH5ZYUvZUUp8*H+)w_zhj#SWGFuf<{>R1vz+;YBCU&@ zM0o@3_ zV(E}id15FV!U}i}%5QBoLw4Ni>qF1qiafdc?1OmX1NPGaHBq>MPBtXDoT}ugxNj^3 zTZzht6JXqjuUXxDz-8HeVdO#V@-k8SccX0dd1^&iVzWeGoSrLDv6J0%1XbbTt2A!u z5ZTb@|48#HvdQG@wc(f2`fmmdBJHvrBqAy1$H3@AsSgHk zigibVsM*3>93QrFcc=VIyZ_PQO`L#`3zKI2t@Qt)+Bv}Bk}yYlCrtpR`1kK<1mdYu z$Dn~<^ZiZ3`|5YwSDqk}R!7#5`C{&6<9`|lepB2H@|xt*_{XpR`wbdcKQ+XVxfg(< z5|}x~4Q}f4M8q*8_;POi@yLLI|Hq^nDMk1GbywAhMxGJD;g)1n%SG(ipWLO7$*6)Y zr72tIHG5@faJTtCmpToUy<_HHsS$tUKQI0JCu&6TjQCH(vKLMOc+7nu9t5y?E_vzM zgRgzmyTT2p*B@Q~9{ND>FZ0&)@s*#e=CxbAb=aRc-e_E0z>pba?smvnC0}7xrqpI} zYw}*dd}H?S*w+r{2cr(zbzT6-M_UJ0ao0e4Z7*BIV>isyXsGmd$@QSuZt9qt3!F@=%wdCPnt;Nv~-@STmA+x4XB&X;KK)csX?qCd zU0$<2_;~&IC4eDv4PD&h%X=0h;#kyD2YHFV174ys{a%CeH00JPn&4${tXiKP0FRkd# zKVJRUkv}BFC%EGh@tQqIS?Ac}=|1A;Z=4FP`u?Eze$ncfHouf^q$ zp9*b#j=N38C29sE0H&r~O*Y3z`xN`ir*Z&`ivIPOf5Y+FrEDG$lG}i6%06z2cRLK5kAJ6wkxWzCzMmUd7gUlaCAL@OaVEkwu zYb6InP$>r^h7Lbd%Rp4%4NZ@sShD97F<#$NX39bQsJqm+*Y2mEJb+EKBGC%ilFN%z z30+ff*Rr+uDe=Faa_ALRj2QGvt-SrlyUuup9(n2%k$8|7*N*L z;JI)$^HF0r`v!pa6Mr=G^W|s0A99`tpG=K^Qq4CLvhDc6jlfO;xfZQgC7uCbN%lCm zk`DQc-JG-vW0zjBrIm?E6Lrtr+Fw-(%@+eoRL1iS1)pbX%46Jofj9HpceIl#t&>0x zlpUaPRR94)XFa37aW}#t?npi5Ab_Fn-P900+nveTQ!}+^ie?$6r8w+Xj_IrSSHgh5 z5|wj)-~>-9|NEi?*I9;u7oqo4AZ|(He~86(PeR4-gfQn$Oj}_RDj}wT-8>3#`64bPE;_dxpKj zs6Bf>?N=P~L2bt#WXpRKAROtz9BXw1aLgMaZMx^cCe;MD(X`F=+!+)I&H^iMeF9;_ zzVqv3fXw4A{#!<5YT9v+HT|w%++ENzwjA6Nh=YACd7#kfxmIn~P$euXJ8<0+MLEIn zRr80RLSrlIPhq!Dl{6v&RsLG2>Q)pV6ptyvwmD5Lg>U0<(!un(a$?wx9UwEEb9MiExbAyiazCn`4`xooppJ^q9sxFaIR_!VEk8Nj5_3cD!ZqPS$dW4`2OTuUO- zfSd!jD*1i%LFczh5S6<|9aLQlvmCWR;(q5vQ&xlb_7?_I1j7})YL-mQ?eFZ@5n7La z$p2!@tH(`M?B@bp#6oufj;6cL)1?$WrW8ctSOfgmjMg<#{$@qJ+x3LwzFoW@;^K(- zF(ktDp-q=|lWw!#R@$Y2afgu=|<^>lpv|2;vSkOQR zNC4&J$APH5b3*Wxf^q)JAQA8gwdh?rjh?3LGY>K1rsjlVc=WI=D1GSf)lwnvHH}_e z9R2GPZV=A}BAL031u2#bM;QAYF9kJO>v&;n2E;Q77YIl0RS2&cXW>MXTUPX>P>mHO z_m_>w=>UGWKYqR;Pj|w9EW=--_fL7`2NQryP(}NSAuP_F4;&Q7$n~R);*m|4LF3k) z&&?NnP)zM&J;fus{IZBW5v0Lrrbn>U7 zh8p)RJJU&)7Xyk*r5P=Oy7lW1uXF>+oI10~Q6w5FK%}TPiPDUI;(t44ko)SFa{vYS z`lb@IO_(5!tl|U-*AL&itf-wiLAPp+=7R2vWrvIR+4{NPOrd8vCCK5{y6)jE01Rey z{N{n~M7;9s?os2#M&n^ng^?Q$U8?E5e!shsR10)>;ypW!MzP?0bM(cGDtZUNRTd22 z=cIrzp{&h@EWHlP(giZpHwtT?e>_?K@?X#73Qh%+4ezD?^VR?H_?m7i;5qelp952d zcBG55quFK(PdL;&#(CzO|M2^PGLF&O$T2+|SaK(yePy=@3~L$#>|ZjD9~ftsyEBJF z2SOeq*0rN-`v4W*5Z#w!5Y47&6E~}JxRO#K=LQ*Q2?&vd^eura@|VZg#oBJsYx7KTda!9S{raHljHmB{&qIacySj^Co_HfFDLa+T=~}x`}cS8 zV1H-;4xuQ9yYxk`-}+u0_hzx5uOjEv2NnF9V$X5eQX>QZ#bk+~6*XTYu)swaDMPb@rC7_j~-4#ey+wU>>?lQPM z<-_V?^?+dDp~Tm)e>@vf+_Rw$NdMb`|KFbtwLfm`J;+MAs{tUYZ9I$vD3lF<&=FM( zB|bPxZqDhCoXa&$-9Ba25Ki&)c`|u#tR^@tpm@99*G7AyaFaS8yx_}fAk_gNCBhZpXxfI z-}}hW{^3PE@QAPh&`d)AFSo?QcIJM>YNpXVI9u0kOb*-8YP{?=y>PxA)oeT8%zy4p z8$4vH7TCO=OX=!9b2@V*J|Pf9@@@Zho%r9uM?5vo%w0b@{^_oy@UslSV%8$Iap>7H zz^m(@EIUQ4;&^^js^bTvrnC8FebU~~4WsQA0-uBlRNCN*;aA){oIO|h+0(iU1iLtB z7u{Dm1b>GdaJt6~YO%J1To;OxJ4xX6B4HEtGoH9p^~P7HvnjNV#A-tBXnA88Yj zpJiO$qxKgk076=wZLyPbojww8tuDI>5K3=pSEa>lrI)w~fL* zmSp~%nVu~XT%ZX@{96Xf2L^ePfLL5kzXja(rIje}O-l_Pk68q8`y^D~TZ26=aiq>_ z>%98{ps$y>N&9LbWSBVnmC*R?IdCtF9;mWi;+&;d++M8qO+YMCr#%LK1ZFz};AlpQ zXlP4-8hPKxx;-4GRDJsl@WKW`6^(#1+XopShas>JXhzP+1*_hb)#7FpdSlb}v)?p) zVgS^oLGz$0`}7oG)SedB{p!lAx#VAwKNxRjX#D*p7@B22sC!mN&(;G1K+ZkT5B zQmaenDg8+rE!&+CM>49J2X#&(oF#)VWH|wOf3FG!gupW1Ex!gAi+;DS<#+$%_v{5V zJ^he6g4lYh$)`<@BQMiwE81J9xj%8*sRCfP!(O;pSo4wTO`5-C zgjqOnea(A;*&C6g&fBv)xUf!)n^F=$jWW-#o+dsZV=zI_tHXT=4si2pSMh@e4zRx~ zL-&gT0^}`;+VS3N^M?+A*?FTuDZTnmrvnhR#%e&>>Au>8N+YvB4hQrHM*BTNNgiMgI;_umu={3S7!UhYZy@%=NWNL zF$CxjmDVc~SP6XiDP168XrgtZ8!nG7KCH;W$`#XYZ-%Lw{Ba_hK8E92-0yUoS@|>K z06fsvrDs7n-=r6ZSXc&Po9BCR9}qc;7GwF%2NFuU?8b6bI~+DmkTj2aC%chzfS%-ByJgBY*h^8}Nx=4F<40*c-3_ zqNz~5a{XyG9oe0I)$+!J0tb5lH~e}3r%Y^nhDXEY`L>WfSG{7nfOZ$)2i^Bkz18v` zy?JQn^xO@{=EaR$8SN@JW10c=^;>11!uux<kXWL8cxCO*2QLl96k#Qlv#YTQ@%gqtMpUzLA=-T^4C zW$w7(xhrHqb(w|`o4A9kLuFIr7})CW!yRHk@P9NRaI)k#e@)7$|HQ^L(^hI#LU@45{6&)vHX0gC%+O)+qA z=*n_NL;H${p?dfXYpit|wRSGSXkUOKT!-x7zTplqiy!#3Z_LQi!hY6dv=H{|L;@IJ zr=|1oIc51FwhLkJU>?O+;l;PTt%q_e5=L|n?B1t;V({9B#L&a95t_FJvY*W*odQm@ za!s_ee{&L8$(NJB18{gvCQ$NXT-YdOg`L!YrU^rvoRtAR*j@3s)Cjn!1I+&V@(9mH zn;1c(KFlawQTV$Z;5E=0x$oYK6?ptAXer?J_#7=#CrXR1wTmy0Y05l;6O`n;= zAtC5+DD}j$^Z_QUlQ{F)3;<-o(aJ_?%@v19AeSF?>urN3a}2--evQz zWk{ayebtT)YR+j4^Rc`Siits5*pX6e=4!1T7)}}l}_GLMKMlT2Zac8wE z<<>TvFqx7))HPG?c6i1`%Cpkjq1op7!VoI#U<7vzAByJoKQkg`)i^7*G;woJs}P6P zSz7E+ZN?!~G8^P}ng}%tD{;nqNofVwt-1GJqCPJ-zjkvWOh_<0Bnp+XYdEz)-)sES zIpGPAK@*r?$qlfJO^HCJ5hPm}NQ$J`9eEHxE}X56T%QWTXu0AbEu>8E^SkPROjJT| z<&KLS@$i?uGm}-sL2mcvqSIEzsGu_BV;_l8B2`-}m3&=pHgBT$7>Jjf)VZOq_)-GzJq;&iO199Im@kR52sYB=6>&=E=wGvo{Oz6 zK#oj+jramY*BR!gJUv|0?KSmPig(I_XTx21=M`9|IJFdc`lUn2wSka{g!1C5=Mm=E zab(n6t^3Uy6m>~610FH1zG2tWO;W!L<JhviMsFe~k%q z?~5GJA$5E+hA#njvVOZ96)6e65W1QC+IfXNl8)^D>I^Oo9n<=H1%wECKKybk@RP?B znHWf7p5;LM=y)f%sG29Ao-I+d$E}WFcpC_I+;@}x%BtJW#0rum!cEUxe}5-#iN2<~ zlP`df0{|eWv{YAI5}X#b!j3S3lGXPkz7^KUs0}c<*E6QHCs+5ez-T{6m8Et)&S*a? zm;7>|v<^PH7kI#bbVr7JV{e4>i9jq>y*;IH#1)t1YJoeAqLDa0z4PjtqlWJZ;6EF* zW8|7Qy1f|ACo+Dxr0u=!<8ss+Gw}>5|6a~`M|3-auRr?2+()bun0(K053){@8l5t` zTf!#w_7fGC^*9L-y|r(N4Uf-cY}e5-CNW32n>bRI)VE%1Chxvzf;lG6ZU`CE!<EL zK5bq_y)k6V$GD_+>Jnqkhijt=A&1>h+h2?IuxT*PZF{ZAxUl6QwoQJwFvOpu6A4!n zQ*eCv0&rnfVaN*@q>J%(c2RZzIj)0m++pO&+obeOp!~@EtXOf}de8YqqwBcGlg4kA zPmgq+F8Q}vMxQ91^hFZNMQnXcFAeb2>no%9iN=cZs z;NILD{>?xnqtrZ^ztE*y?PEEMb zwjIB!)y~$0WDc_41Cxl73(3IBZ7ci$a|@HCr9s4BQ8+5BGj;NleCt$jC#fgTD0&X^ zTEd=CRa?K^!5hTzqgtfjxs83|PcVL|FD2~8_!E!S{2?;|*&23p3c$URAHP~vF0~=- zcPR>-OHO1|mL~eCruCyi&ObV8zym}RtOd2nz4|qE+32!sSa+CXg!FZ#@cc&<%<9i&p7D7uM_|6$&8}!bCm@nHlT1 z(6V9E>0xExfRYA<0i^qkAa|+C*lmkwoHyx0^3!pE_>M3AwE=vO=_LyMw$5UF z=rIgJkZdaFrL?0u>!+V~q8(Xxv4}T!QXwgJ1r?8&xFHv%&j~Y0Ms^GxsET=#V4 zo>D|_1hzN)YJHSGa0&L>q1+SX)Z*DCeK@7c`0nE89{*xvA7ssEjH9_nduKF$B9#Zj z*dfW~82UD@Vn@L2@O+D*<|{;Y$qj+*^e!}W#GzanVZ#x%goA{)i7 zU#6}FAp5_O^qQK(h{GMfw(KP*kT%B+diCvFFO~MM*?sFP($<`L8P3=;5wH`S`?LC-e_TP%DZ7g_eaVA5;|q?FDr zH!q(BI!@|8x_)i&uksTfK0#q@8t3&7O^jOtGfqG0&qx*4hsVIYKREdIZTzpctBh9j3g-hh_;2UWQ1L94_|Ps;#?KI|9n$Y1U1{v%_aMF zD7`;Nmtx|nyRl4N(bq%RQ8+c5BuMqOB*jYT*KRs-il3Bqx$#~QHoaU?~_ zU;LKJoDw}VH65h_KL(W*L+ijBYR(J9TkR|tG}1OM?o93qa4)c~u;Qj$klPCf%!-PU z&8W0(Q?9rY&+6y)Nax`}DGbvvce$)Nnb3sr`L(ZCWX47T?w}FEDn=P4*lwEW@vL(E ziLx2KMB1!~JZ@nPuQvs0)DFXKpawx`kJ9pg5sHXD$$JSmP^jF&Zdn$8mk&4XU)*Kt zM@_wYsQ}`5VmTJ#xio+17eloRc1 zz9+kUY9_j#oZ-qCa1iYo-1ikI#ARxN3li->BrO{H>B8HqhJy(~eH7$3!OdT@yyTwo z5YMn~4CT5z=o|+hM(HK=hPG$zs^00yzZAYznTQoS6nYl#J#ecf5VjXz-OASa)?Ubh zRro{Mn5dq^R!aUuh*RsfWsh5q0izf@3PssM?5)K!FT6m%N822Bz&6ji@w}&~^NIJ^ znQeV|#n44Za=u*FNLrzfh}9Xjc-u8pwv8rprjT9o0sd0~l%veqChj81$(EZQGHGBU zMv#kd-X*BzM5<&of;06;H$R}}@=k+YIZMd-Cn=@Wo3N|ZKz9uk^fGOfh;qwupK{$@QkvzZ z&E}3IKjqi?p0YZwS!0?Qe6Yw4SqchC%_`|vpiJo>)M_7WMWv05eqy{eZ_pAA6+R)O ziv9%RS-{h#X^GzHq(j4Q4nv$Ucx2?7ve~ja3Ciiew#Ab+tRXih8r@0Zj~JUH!0iZyYL+Q(jUV56!#QEv`3XA#>OtHp`+=*PBLV&*(=N>dV+ zw|KGVP7at{m3**Jkn#^=PGbMN%({zdYJ}r$_ouwH`(?6D%(Ab+=%FX8mWZ&Nuh4)Y zk_i=%0$6L2b@59@8&8{Z1^KLusf+fc+h8fKxPPG6y`=^MCEOoVxpiFPE(PpA}|H{^fo?J1>7RzV9} z&A=BPQ0?U(m)3KI-FbXo+!%U`Y)eEwV#g01;pRE1B$vjU8D0U25$KA#C7qvUYS*kA z(Rh%|GjNSCOitYDY{D)nHi9mo@-Xd&j@{S_Hb6T}Ecj<$`}fB-jhmwJsG&jPb(>io za_g)+nd?CMiCquoj6ZlK%VhkoUVzP6tnlWFU72d>`(`!ikLc$KJMZp&#XH3oLi)=j zppF9xlYd!;f+uS--X|_5vHwR6Xonk@fVg&qIccir%dY=8I*J%FyBm`;vu1d15ZYp1Fu2nL!hCOyVPaWfxS7Y|+U*H(^HF!d@8-+E@5a z4V6kYZeo|woh5!PAEq#~&)u0K71%16< zWs_1)p!h2d=(4&x4^mnHC+u|Y_f@(}6y1#>0>l`617u4SavG3N>F+1^C2O+Qoi*f{8-+lB|77y8?i?gOv9&07^jQGp zUpVmFN#HeqUCKN-?OYMPyUB^Sesk^Wa1NJ8xNZyzt^N55BlbB)Vu9JGy^WJx`!=g_ zrgxP1utRy??lt?HYvXEe7R)oT6Wsjmv$+kJRfV)QQ51<d~h(M@brfqsh*buE( zn}bG_elkgO_lN8#m>#gWcus;GvBmi`BVo9V2*nqLBn#tfV%t~OXbxnvPE_yiP@8-~ zf7*_)>&a^8Vy>Zb-u|P3AF=0W767|Bp8}&xg#}md+E8|6Zwcq1Qiwq&k`?g50SHB2hZhEvs|Uxnw*#b@H~3 zUsE zgFsRsb*v6Jzmp9~&2>UDsB9P~Hf!ml!^(Z`Ga*gU?9nM(*7FrmjS6INk`HS%djg2W zD}+mFx3=%DGyBNfUpi{$UtL6Lp`;G!?p$h(WSm0#6aVN$viy8y2!WHT6MEHR11~ii?0+NNMA>lRi0@D7)bO)Q0~5+bh1g&}=(RvQFss<4yFA zz014a*idDg>15D0q1Iim5t8AGqlf2jp`lB`bQSOHoyO#Ed^orTBpP47+s3P;T9AuGIon{! z{XMfyOGV^C^@vy(25mi50`AEjm9!(L`T>@3TV>BQ-Y@Z((O$tm*PfLT5D6Y23+Oen zZCJI0A;2RnF=LOjFeHeX2-l3#j`8xAz^CoX>C%z4Pt;h0&18S1=`a5{1~k&YMI}&f zZzlUfG}{;bB%fhxnE&9^!h1(FQ#}S9{4;Rfy^4N1f?A3)>2saZI%C^S?Gee8hiHW+ zMs4qG^y`oByDg0KNH>;lHBuL-X!7+$@Ul^YKB4jNJmzKx5b#HGS^$fXj z$;$Yq|6hjC7i0w>^s6L>Nq!O$8^aoFDFy6`6xo(xcUB1>rW3Azp$AqZE!nIuwe7lZNNP}}Q!U9?LjJYE4brPjO^hy2#4Dxicqr}{+2P| zu>A^hNst7-xSk}oyobbmK=+Ak(y&&fiew3D|lFh^i*jdw*@wsWW96b|31bg8Y40hj^=1X4MA6R>sTSwS#`#fOR;2%>X?@gg5(asCCEl@ z^g^nJk!AQ71gaQ@R5k>v!&i~`7721A)-y?u&{{Oy%OSWvH}6+E7zViV9gUkDY)k0T z=f7O|ifnGSw9oFpmk`+I`tf@OSdf>;!NwoIV`lT$see~S3zHLjkK{N7TG?Fg^gz+< z`|n7^;Q24~6R-}ea-Dl0LUGO#^|FaAfhWZ7!@<357MCZeWVjE!H0dE4yjS1>MA9fm zAKn5aUd7vGUAs%5xNnT1*`cQEG~kntP*ZcgG`Rx==I5pTdao*VfwKSf=d%9EtPr#x zo*6LzmRQ?&qPTB+P8WfNoT*RFOOK9@Tu1nA18t~U7&ky{eYR_Wl3VwM?Wzp7zyQvx z@9&%ay9oMU(;k0p(-}Li))wKZ1vV5oPjgy$mcZFi zawpmlo;W%mq!b_r3O>+>^PF%JSisaEZjJm`hMsIAM}@*vux8BXs?>H%><-=tWmn8D z@(PFbhmzY{G$vb!F?YRtmWpW7KzC ztO)&uFBz8@zgqMHB0ur|yytqi*h2HbU)I4JL!y(C*ogJQcD4i`k{GRM2xwpa%g_xXMLD!|zD9x-9S~*pR}^ZP|>d8cO|zsB{`z4A2Es zm5{5F9AL0H@VQLWmK_<4Yt2O$sS<@W^i#HMWKenAxXcGJyqsw#jOpM$TKLSS7=JmVJBDF-GrM zH5t{DyjF02$du@ddxb%iS?$^=8~whPz#x-^_TH;y`%z%F#BW$`c+j2m1^^@e0Yn@9 z>A&36eEF=QF0c>vMTve8iR-JYr*tmX3AzCNq~0l#FrEQakAi^(9k_mtG9_^*@M*eEfe!He(2W5H`SGb^NRV_nK#tZ zhbvSgokxIH&O@A6I(&BDca&mHCiW0P?DwbPhLVT)%4rhn3Pc^^tAL)kVQCb%P zS3GZ9AIPAmXtxATznm-pTDNBItC^8BZry}xFX_;;Rc$p(tZ8|aU`Sfd$h2!OPBtW3 zQdCjFt9)&s`KxjTJ9r{db8{J*EP*=;f@obvFP7KrK(l<1<22BG(bZ@Nv?QYcwB32_ zG++PH>ejHA`paz+)4S5#pQTCUUwnIuV@Lr_tMUQieCzm5#x(n9vupR<420(u!%c}K zsD*XdQ2HFDsI4t&prkyM&`>S~469y?xrvtle3us7ChqwwHhl`L5Cjp2s5~qALf?z) zc0Jn5ShQFzmDIo)p>A2FWh?I#Zif`2;DidLs&nY+GT%aTEBnO`T(0yHv+15Wd9`2! z-z@(*2ZkgqDx5B|-u~n=C&6T5So_J7agw_n2*#TZyQs$XkDt^H-V~PKM5W`Jh4Q$H zegP?D%fhY_!OtCa$jxDyE*kwkdmVT=H zDj{mdpQOCOiu6b?UYf^_Y-<18iQVtHy_9!KYrbQ=?J@f1mBsdBD)AevI{UDV*RqkT zR}Qa*uz9Si_pej4c>$#=I}lV~w@Wz2EI;bvIXPAE&!Q*pE4h`)727=>bt(P-OD5{y zWfil#ihm?kW0d4)-78ij4*OQYs=0vIpIKst4m(%;Bg-u)d8vRF8L6SGOlx>=6U2rF zU`37kIG=`^4f+^TNy*~Qft!JKS$gp3KtT&?&EdNh?TN69+rbm3JdG);TW38ab`R~D z2JEl~kN0t?`-*+tZoA8t=)Z)va~9VH8Vx~StgFJ_%{fI8Eh&a50G&iLzOB}nZ~@r=ht!L8UUPZb%n1heXF zx$pX87}Uu7ApwR&7-7^KX(M3h=8KFZ;vn>T^lncT#{`IGyhV1I?Wqa~R8F`{!=V!W zUNH`vD}zkH^|ItN0xK8a;AU@9rkLad?+^%!jbgKnKTw-j!2e zWr4~Gg(dkeGO-y>hyB%h2L(16*a^*L2O5f?YBZ1A&;xF#WBj-T>i{mns)*W{BoYQm z9I^weyMsWwY((>3Du^+lO@QnIFvw&sa3 z@dXuL*&g;0y9I6UyUd>pG|*=3mi10Wjq<<@NqnbF_?SBT>i~bVasdQmO=I#>>f&;` z{>i_gnFW64zL!T{^ngeLNna8ytSn4fj~iUvV>u&h zEu$hl+ zmh4S~f%!YU+Wsg!<*7CnMP2XBH0+j(Bk!sPi;K3E%?tvrgS^Y2o3i2YITz?kM+ z-`Ffz-2?Z{(wg^lPB&WB2#7X;!Iv_m6)`86082W1*DE6xvWz$iQjW4AOZ(u1g%b;D z)1vNcy>y9p27gQ}14EZTgG2X|+=9WDT^5n|87v?D2+pmQireLR*bi+2ygzI#I1j~q zLZIokt+d{htVUSPsC^4%JGgxi1LT}AZXT?aK01v_Ih0DpY##jsQb}V?hyp5jqh)V# zd}7DptnVdqrt(_|#TL!_5w1xHo1R!XzzrTiz8^KIBYK81@V4h6_Fk^new>)&i`i+K zs`|>6atlRqD2QTH(_ReT0(ONdLuti!M^t`mtyNYb4D^dM;vF z(Jn|_rDn1*NtbD8vgQuU!Lmf7`wy?Vi9`}h!BL0a$MBj&%Pq*k-bAgBRBsXF`t9R4 zyFN#?ro8h0?EG6{(VG|=N7zDOx|o&DY$_1L*f&17xV_{Q(NK?@=B>w+IBWx3%dJqn zW%0I0g1|aoU~ZvwwEPjXjJ=cf)aZ4@j*Nw(x8`N>=pMx>m7P>c_;JLJ`mq=Du=opK zv2GdFUU?wUXxOv;SHIldU>B#6YxF)Yq0x95`(vPBxJ0uP;W1p4it2d&F&rY@&B zwFL4IZU%i^x)O{6vA7GogtWv`<}lnx``O3<_KbW!h)6XYJ`K7OT?&_2<=z7CcoXYk z3||W12MeE8C_f;QS1Mm^v`{0Z2DUi{OaZPX6zG7Z7~ zOCbeLw&#%KM!|OhKr~ah`_9Jid8#EEC{qB$ECA2t5C3}rrUjY3lHiGn z7s^IiX|QQ{u8ybT^E;LuB1aW!2YmNnUqL;or3yDnQ)o3b<`Jr?t#;_D*AtaeHdf65 zO2)IIH=;7UEfYNiOCJ6sOk?yAK@U3Qp(N9#9OE9f`rE!>EQLXLkO(y<6SSWv!%XbJ zMwA~C(x4MOzck%TD$WUyzmA2Q)5PB`@0w`2SVa(c4eRX+!P0ECm5uRCt$;ewJXXn3 zICoR68^bHQA*wG8j@Pi|&ldf(7CHYpISf`z%YA>D8zj%eEbct-l5nI8(VeMc#BOWw zT_8wK+j6q8kFC6x;zW|72vB&6VPDyOW$2;#>rREf8-hC-OxZ8UZ&@k2Dn6U8C zb1grY>o~KxY*D@~{Ov9mGA>@N zs;1uk=ffXnyCl1gQR5R9_blXl%r$W&8dtG(U_{v)K*|}pbFn8oyKZoN|LT*x&K;7B zCUvpZY{KQ{prS}N7Q&OCQ9eU@fOY)L%t+fsl=2Cx7T!{~oI0uJJ|El%p7zxOXxmbc zjv9R6uxJa}epk^MIv_0NXrqeTx-E}CGX>$)Pb$K9pq=0z#kDPe_rHy$4a?sg%cLa9 zlolGLAMnL{p1{xw)0%TBfPl-&=NwHZEDSn{ClU!ym3j|L-;MpC*F#AZ89E&ft_^{(rw0L-_r#-)teooNBJ`?2Y`>um9%} z$1F`C?S4bjb^5<0wEp20@Y4g`BxOsF?tfPy|MMUFAEzj##x#We?)+C!lI^Kiy=8CLgNAWh=$7co`&a)6;>#$Of`b=Q|PU!GcE;Fb5U3cqkq zzaD&;gn_n2|I7s@X*Hh?7rYcCE1Yt8GnkZkaWq*nZW7L!2m*_H>kR)|D~ab=dtx}( z*Sv8+kSF4hNI3qSmF^=bX*ylAsF`-P!Q71a$ZEiaZ3%ON6^POvvH?B4t{P5&B7f3r zMV{`Z>y%TcqPJUhaOU;-g=yJiGi4w-8c)ss&+|bo3Vbp-owik9nSe&e#~GwKyr{Si zTX(-OOSpH*)Bf@TD3pW!tJoxgV<0F_!U(DQc01{sZ6PW*NIuyOay)4L^v0I^!QK74 zVJ$MaKH%ZPm=r(~=8f5cCTY3?$KYb0h+)J2@)kQ`9+PVUEh6)+R5LpvOMW=SY|k!w z0IFpH00TR&`i*iBPy8KSTvi=)qW)=yYFA)%5Q)Px?8C02P!j65fcl-~G6&l4zC^0& z6{P~R0&0+?=>tGgLrCcS?B(Vx*9#h;kEUG%LsPxGJaD-&kcc6-UR1hJ{j4te!B;2r%Q}1vzCkBI<cr9f~9NUBb72TtLIvm?cBjC(>}UN7kLE;h<-|AJYK4PXj^o5eS%vIdl?J zp*vQ$=KTPhApJs!G3;M&?sC!a^0UVhe_BFYV5)cVfO!WVt~iPJ`&3Wz|7ZbLes9M_SanlSHmE|V71?^)l{w^_9F)nqI9@`lh74x z25I9YOc%65%YypFI~8AR97nkSDFl*HVRjdxg`N#>5Gk5hQQ^*>U0mHAeQqht)G>@hKz`l&6@ zqvQ2Z)^F!1r{*CzNyxj;i%&xpt;)+v{)GDe30)E_@pxDPt_mL-RbDXufcR@`sf#Xt z;5#nf`ef6)Hq)ll{Eu_f7NcqyLvpvC0rN_AK?t3f<32!a%G`OoPwD|7Erijt?gP#H z7tsYIQzEO>Zdf0sWpbJ3Dh5uI%hm__`n!6K60L4^J^G1Yr>XV;J{UizPDg4CR%uf; zL+O0n_d!R>!XO&}2l-AGf|zwzYlA;^H{vgAh&JN4)hiyyQ2u=YifGzfrkeeu^j#9; z%+QR1D5lS+XD{^cbzab0n+SNxBIkkE(^r?S$Zq`u&xN|rUMzt{+fiu#0I)-=_~o1( z`3Hb%635OiyK2T8Ro}RMPkI8Cc8mVs6Bp~nw=O`ge&&DJSq52nEmeZC1?UC2LlB4Ud{zP4k zCHtJN_F-hlOPF`~fXV>?IDHr}_M_&*yfcjJ#2$xB?NXvm_x^<^=w-@okg%Kv+Kd5H zkMeBhAEW127?X|t&)nYm2f8j8iec6k#P3DX8E-(?d=T0@0|2B?AE+BmgMcH%4qUZp z{|xvXRp3pka@A#H!mp;B=6g`S4vcNL!iZ|`aN{3dx{x` zcS;EpF?sU{mX%(-o(fDuESukUXrx`cZ2;_ibm zb+63q^g57NPSOQ5(`VnF0WLfxahg63ZtQYwGr;3vyg}xY5u_TNV zon6ufSUIt6QVaFPpMcTTT06${a4kF=*{#+gs2MW}M~PVy{hDQs{H#H7T+}`Q7-2q= zaq&Em)1H+2(@Mg%p5gsXz=BhLkI6cw>WBnE=lxn|c1X3uA7cj+aiR@bUnUu+ibztA zAUX@tCEjx)uVM36flV6e7wx(c^R->ZwB+N&rqnNjD5fa7d9aA>YU z>9Y5E4vtlN)<_LhM}62@1_+VS{>Kup&%9~uaV~95I!O~xLdUmJmm}xKC03l(19w++ zF$5g-f@Ri79K)IYws71e={S`)#v{mkKz!qFq2-}Zy3MRzl)b}i3<&M(*`NhyBEVigds-MhfPMN5>^*Yt9o7b$*9j=ZXff2$R?8h{aKcY;>7Gin;_CuMO-OgibTO z06ub#R^I2kopH-dZ+^2K+5Qg2c^*Vl-o+qjBHW8r5U7DWuvNcpKx{lbEL*rIuAta2 zLS2H-hl~3QuF(slTw8UV^87gK4AX#`gc$h+2D%*OAtb-RN{O8Ut(t%nNB2B8@AY3l z_$9PxZ93jB-w$m+26U5KaH@ZhtSz5*dn;C>{0=6D1g9&AVald#Oc&IDNOS0AgaOhi z*ObS)L9uWR%P=W$6;sU)eu}@)D_egy6w1&MZC)jseF@A33~}i(Q9)JOtOF0)p~~G@ z345ISSsx#26qLMU%lt{o1sDsFmto1N`8t+vA5Zje!zW}7-dwW1y19D-&I-q$387C! zeWpt!4@@rt$K>ed=G}$9IA*jtBvKMsm{AEKoYybxN8OzS_(FJ#V%Hw*fC2$9tooj92@ zcHyOqZ;p2D_40!j*jc4f@ELk?FQn~!llVf^tBQIj>Yx6=cf_Y_sTxmZefe|)>~Uv| zr}T+VbaL9h3dE#Z36qs!mw4<-M&`B=q(B8ya!8%+OFw>q^E>5Df@S7Zw|Ucs4b-{~ zz8_!JE@5A2W25xp7*nvsGf6D%I>)ixp77f5>)Ae}K|iOHU8+%8VpvZTolFeSi`cUw zaemtCFOP~4Z4nV>832XY+o+7gv1D~Gqlcyahm@*WJljtoHlcO!tr6ynuJdd=d~b>v zzs4tq73zFf?!_Kc?n8##06G3B__HYtUzgj<+fM%YI(mr|Tf(MhSNS}zxh@s{dDX_Y zi(-{Ocby;OO+-LEa?9?4nx#FV$)rT*;FQnLL~~*W<#3Nj9+FulMC0{`AlJopOrR{qpJ^Ch95CKcQ|~ zUlA%*@cUTxsImT;y}4kC6*-U~XG--R=&rA@ft=@w9ra}$YO3s@%z7kV>O%B?xS#xw zOPGQYFXr5BlHQ=OE%TDzf<|gD=l4fCNG9={w1aHckAbcoy5b910m-8Yfga3S51SZ- z;WWftG%Vs{N?W|CV_mi#%r}WoXhWW&!T=P4mpV4A|2#=Pl3)ES8 zy)=%&5=s6NZ5M(J4Sh2V1i70u_TtgA!1m%T;x&bX>t;vvOv8E`67Rf!{upCvkskz^ z=TxDWy@nmQ(Ai+k1qc;fw1Wne%qZ%Sn>#-Qg(8|^ z1T9Yw-bx8^4Yx^O3`&3GjXF4J0!*iebCd!L{1$y&Ws=Yh^)7b{1xjApNK z)%)mdr`z7$UV$sZ{aMm?W=n-<;Cv|O_*sU-c?<+!Y($18&(9u+cOH@#fDde&{v5F@ zF*#1OsjRr%PGIa)ND8&Q0{&M+3q=ohf_~>qUiJ|%V9PDxVf`MLKkJA-xuerN8As7` zZkwFMO0hRU{khpnSA>)}c(rqc(R9Xpt*4iK$vK`X6nO}<@AzYfm~{jcNo(Q7Gs+0= zp!!R=cY9(eEEua-(Q3tX>G1`T)S9&y>V=x#wOFJrsk6i{iZGh^#8}2t{01a z{fH_N+m%zT*qF_y1Qihp^h+^4M+6#f>$NA>>cY$lnAjqzRM9+iT97tjTwYuJ%;+SS z4`kl&OCcJnBBYspDt6T9uBoiXO6$UhOFa7o{xnQq!t*3ArC&Szu#^HePR1j=eD;r` z%EzC?vn!M%Z_yrQFesN>=w5B`%6CyR-X9y|Pb4@S`_VXAYl(Obxe#31s+~zykR0mM zqt0v;`x@J1KBKw3GI^RR+F|g`05wKL^>th5`Jv5%!P#}std>cGw#(G?z&V8>PN7FT z;`fK!@;pO&9ng*gf)=NOIRg~mZT>m$qs@W2OlT`}w|Xu-o@HPxlcC;F(ug+ff{l>T z(o0ZlGn&Ki+My%g3MjRSa}d3nn(f*vF5OFQ)qO`!wKp+;P>b_Jq(SL@D7l3`F+)sn zz9kSSb$7KF(%gK`jD09~i~dI&wSl+{+4MYcv0Hv{NbE4}dMDTk_uihiXf$mmA-%-J zQVMYdTrcPr!+V(x_zrawFm##D7bc2xsT=F*Ufq=gY=_ zKb}$DzEu3UOM$ZC$bApa7WB=y8pr*3#NfO*Kg_}9#`bA#^E)BGTKS_PC1?Qh_v-RB zslxE&r^WQ%VI%<}MQN-O0T%HhIU-$Pcl@rf#&zBqlS)5EpiL!tNA_kT5A8IJ_5S10=PT zB=Bb`ZQm|p0_Y{8(2b}31E)?J3<`bpTe5_%eR%pVE5L1v4x6>%czu~ZMN#<2^4GRL z#M=+9f6g+zO}e~_wi6+JHYlry?ga#L{pabMjCbXRepUrpc6m7~*g?e^dH1W7nHiN! z8GyURN{OI~Rvf=XU)XLN=^IU7q3a&$OfL@etKlDDpISm4LsfJF&#TE=3sXWmr~JDR z{fu4uRAkPZmFu%2zkELN%Cj*<`b!4$erGb2*7OPBijjHA@KDmhHOw6~FIh}1@uTly zses{78wdj%?9of`c@xdE7g5Av53XCzS&$fm7Y;|%?^4<3RcQw!B;IuIMp*9>yD<&gTH)~^IVu$QB5b*W#yI-p=Vri;J>cA=7i}`2D7!t#lJLbP0 zdpKyv?Z_zmD2Uo1EGUMLOP zj&GtU=(>+<-phn#!;&y2Xki+>i zr*_smchb0V1knDrj29(pEumYB(np=8BI!Rerm-jbRaf0<%X?*pO!$~Wl_V!xRD#n(eOR>H;~@O8 zAJ6NS?>%p|%FfsHaq}%*X#5zB14?NXukA)3?uHZst34S%M!Cu7v16Ojzls-)@3;A# z-U~nF37ya67HLsD4UJ?{W_l2C8b#n46@gx4W#%t`_%saZ^@DgoZ`3l7NQjLQ$IfjDx}Dj;k`HIvTyB?CcKFik8h?pI z`7z6Mg+|`!EFK_ej$-~1im&1I`yCT`$kgB=!_ArYSY6?ku^JP^RjbmlBef+$?ecPp|>QGVjdLwED2cCokkRVRaeo0djP5ESCptMqE~T; z?irm~sfWxRO7E{xhj7};!TQQH)gWd&JS>u%u{&LQok5pM^i}xvf5R}%VsO@LF~(bL zxmO6$Fs29%gD!YXurjA+Kzv1g=I7VO5=A>kO{eUP%{@#8mDf$n*bn8kPCmDWePx`$ z33R&net!Gj{g(_c&S;(84$j10ss5d+V0YXXw3xdtU7J`BP0Tic>Eze}O${_^uNWz| zdzpBxS}JJFPR}zq&nUT;=U0ULJE@GwkS!t!CgO*vKGwfaS5oR*)u`4u3l~u%d)U(S z+3x2fm&(sl`z1Cx)Af;_#dTWUx3YOHg0 zj;7%ctlrjklD$4<%g_z3;K4F3tErT;T7$_CIrXh`eJdmzD@c}S4~5&- z47OKeUL=d7=2P1OrK?)ypd{tZ+>fsMYk-^Q9Zc11_=WA;y%6&E(FZa6jozL??#00n z!Gxd7E`q$9Z_Ga6mdv`9_wXElgf zX3`nh?`@NTatJC{P4cNYEO6xxPEZy}sWlJ9anql8n^4=5?VllXM57G3fzWMTa*+_^ z-LBFJ&t{+g+Q(PLAVBETH4fe&p?my8(x%-c4NQK8?dT=V`b zcnylIpFy(%V*u6P%NWy%R_P8o*epM}MN7}kbpM*eYYn-tYR!soL`vy@7`r4L9nu!3 zO$#ry3ZNTU$j*+?^fy@bXA$m?5kXecQLMEmUmo55b=VISlnj`h)e8>=a@m=i=8+XI z+-0aUx0FQ}-ZlySYq~kmWfoV1l059C6fWTs&-xrQ(;K9+JUTOC$b^`&PGkjH=bGr0 zq4uwdR#{&c*7Yt07}zO(7&FI+w?=Nh_0hW(mZ-c*MZ_8e*}SFZ(wLq8_QO-8Ev-4Y zNTyPSvVe^oyp)qWe>d{UJS(!YD+-rCA^^61y)9(TF%b&C@v<5AybhroE@4VC{m2g1 z7U=pV;Z#4^}{d>Kn6FuV7jZJfuw+t|;FhroG+ym3YG?vy*H zM4sfn7qw#7x;23!PmAe~&~TDM`Xu-0lY~IG5tnQCB~qex8G#fl{yashJg`s&{~c%O5UNDvJX`N)|gItUiu2JCRIz+B^MG^ z%*IRzNHX=hp3HR=eyndPI>#mK5w6-KA591?boxZ_Ut}<>y&;a|IWR7tSxY5 ze@60=`_A8D#&ahgc!$SyP8M>?$=iw{2%;>V`n`}0r8XFc(4R!O^W0BMma4*34p#0q z7{I0&osj2krXh;W3F`B*L!Y<3ikja_m`K&w!|0JgCjAjBB1qSur{L{}35MFXMIM!b zZI)o#5Qx2ovc1n>4o@#)kX;HEl5ap3chJK+h5Zr(FBy>8{?ZeF;4b{YoyX7=MNQug zeILKscs$eBbhb6AQv@>o;= zfG*lAyydq5x9M3E7I}8XJ@-AED3ZoGT{I$0P3}NhfdVv~HNkT>i>p!$uGpxThrP5H zoAbkY^US&_2y@0$!Rr+Se1Ghz^1sRD#RyQ`lhwD^NJMIeQ7a;1FZr4@;=cGC@iRWh zxH9))obNOv#BN%H0^%3*=bOh{Kyi4taV(KVLi_K`aiQMwZpw)JdLF)e3EqgAuVKWe z9ybt;Xfe^~aH7yHEJh33;xw;?NuI<>^i=Jnv)qk7wJX`4!OP=P$Pv}P8vqM=i#S=$ zO*1H75xeH%?ViLKNORwfQk{R^aarDd2a`9Qx9(Jezkl^yAon#{@|1(NTF#IwXeZrgy!K>b zD$06SB|f^{gjB;Fs$X>?Sp&d`YqeDmn$2k~oW? z)~>*;Wt#VMB=JyFKFcR2PSpRLJ79h29NCjn)u6G_SRusf_zGc9@JShyUqMMKPbz@? zzh5f|$^VP3uY6mGoU{RUGkk8Sb4e9YIzCBHoAgXURW?8B-_B&({m=u@hbOS|dM4Yr zE)uz-`_--=jXYD7C7tgTE@ZQ0Wd7s&!Jx{nW3Hbq8Sm6p8W=A1B&0d;%n}^U^pi72 znol(Y_vu@fgc^TD2o&`v2I$BIE4+&;-eF1^P~pZj)7I1V62r{&d%ju+6%6@g&?Ikl z@y-fqrkgGnmTAmyOjEY{eN+@w9;xBd+j(}1&-}z#LoRme!`C+!Q(ECB2M<|SUs%^> z*9C{|*8`#w=$RRI!YCbjn zK2LmXaKm^rcbiIe;t7rRS%X93n}QM{#y|7Qa~#Tzhgyflyopbb|1_3|IU*DsIM!`~ z4*O}nL&cZv#QpQKzTTX!kMf&nU~;KA6BT?QzFc3!{xH)6f2p4}Iqd;W{zfvf7l|l4 z^~W|3y~dn`tJ68!+5F5&v4Xu&CKfCTw1T<)PHvAQC3Tx4S0j$~eGo{}&HyQP714Xo z3i=f4k!7FoWmwv2+djAb#A&1tNf+WOE{oPpuP5`Na-~zSl?s9&UnenAF`gWM6;gt_ zQGKxvg6!&r{w&?Bw|>q|2XlPCcTH!yT8#NP8VNz~eK><1W(2cUBp3-j!Bly6yK=hI zP%JUVpvn$A+|AfBRr?BK#Krx|OyvT=OnN!}eY2W-CHvASPg^OECvWU&_`J)&`lRE3 zZWmq8A%_^Hz39yT-nN9(c8uLQgm1`?du__U$q0sM%om@C zl~Uavne5Dvr+!XALj8(Ono4oyRM|yl3C-E&`G_5a^GmU!9U1R>Tm_fhS5V91DkYJj zQZCd);U&fvNbJlgyWKi>EM8y~JUBjzmlWbviUbuHaj7jug_i^V;1GhmC7inHnA@}V z0qUJq8MI?mR5fxx^t%4OsByqLHSDE>P!F=tsQy1%fEgn)5Obnp0HoMk?zS#j=ccDj z{Y8={ee_#&N$qn?H7Q%&L?L?jYW;C-p{H~-^5T+{fY+r9PfD67JHFa zEuvq181K^YX-iV*h1J=-pAbz;WBA~GHeN7MvxbxZ#vPh|rVpw*DUJLK zq?-m*5IpqE`RA*akp_#xJa&G|o3=w_`(e&{ZLc?5yy8w+k_LFmw-1Q}AcqWGFxeMr zE;CELZ3$$AfN?Bi@gUo3^HNMspIPE_E)Z;e({VZ{^_qBNaQW|XReJ_=*Y>CxQ2Sh= zJ<+ADz!?OW5}|#-Yx88_<-Gq@C}f!JX73Uf@56K>etT!DtSI_2temNe^s2t4pA~i{ zoKl#UA6+<)lSsqkAJRUvoTN(^h>7j8_^wp*kd{8fuH25tu3Ucpi=Na%X4BIJ zA#!6Wdb_=0x2F>XRHE~hcE4@y(Sd_k-i{GBzSEh7xB-T4%Q^pAg5G5BKQfdXUNLn*qZ7j?^^i$3Pklj>T-Gce*k&N2;uOrFZh-u-M_EaR- zAe@Y-#}mh8@fGgM6rEKM8E<&+km{WLI4+wMg2+l;qbz|!M2+Q7JARyqz4Cf@V|_Dg zuoa4)*37*h=A$sTm{nj$j7<$4iqQ`Gwwy6<`hEK)fri|f8^O3C;Di}BlG|_4RmO-h ztu16d_nqH0;V7%^3{90!J$mzU%Ta`Z6NiM-JAGSE{H31A81!S4eCjE^#V1}glYY{l zok*zCh(;(aD!x5Oq$5l$0wnNJ3$Qp% zD6V?++T&;?3u7ht1VNB!?!aR$rSVAvPI7L~(AfpfR~F;-kv4|=;X>$L^BJ3@K=HGe z5Z)>_ZsN2^bx5ckyg)J&NA@}5HdXodQN&k6Pebts3GK3;nv3Pq%SC)?n49*b$dq%W z%DikE@c#H~BWFa7-F16evrA)1?VE7$#kAZcKomVAmD%6Mhf89=hm>i$x|2aW zjBC`h_TrnBPnc5Xm_OA7AMEdd6_nN$s{8E^~V&}_GjJt0~Cp>MgaKZbbuD3fA8YVyiXpTsVI z^c7+)bz3IoqQoRB#2Dij9_zZZ{%(rGOWFg;KJ)5?Lw_+D7BE-R(ggo+05(jTyaD!>~MWG5-d`ity1==TtE{fT})wluuE!4rwoCH?{fj=%ML;*lD~&CY{n9;Lgjo6m=wfp4WH^ z%K1~Z-GVu~?nWhx=}B;Ol9K19QJSCe3rQ;*UpZA1|e#!ev}Dubz`)*vjjZQjl`kC$odh49s<1i+HK zv#EmO&|$ki7fw4AQ}UJiWkZiJl0V|bZyJN6rbe&8V1~LwI!hjf?IzBN)ZG}LN{2g= zhi;E@I5!C<$!2kIZz(VFEW>ua6{1Z_#;WPPy<=^9U=7zpidpTgbF1aQFiLs{p7s-l zGW>j{=(qkVdxs+)_VZ1uq%R#6LOJAG_B&+_=|P=r@1pH*PS(8(w9A8BpftZz*HaX~G3sno0Snf6mg)?vZz z)u)9RAq&KoT&2U1iNn`QtJFO5#&(L*LnZMa5elQ3hD2tiF65qzlj zw3qJ+B&*$P__f-$C$beF z&1*>hij9k3o1(~AmtkE`2UGEaSZ~iQ|=|5ZkW^+aAc;ZYJ>O{kt zq|zG(8fR2CjM@X{vBnY1o_$!Nh5$bz`n0SWe@qqAw+n&nRQ)B=q?f(F8!Y(^s)h@{9 zSy|d--q;ksM}iS-zS!2s?%laRUdfOY869H~Aym`lDLLJ5Ar+wwAyT2jP2{zwdkxnQ z7;+59BqnN4+hN&4T~(Ib%zU;0H#;TM8&1(c+mO2CpcIKq#mN5v9@um!6nU93VC78Z z3jvQHtO|{~OBavQ_SWVJGTRztWtpc7DzH>!6QOe^<~P}YAfw?42R>FtQ?-dhxxfj` zWQJF3{ONkG6wJ2p(B>j7@&PN)4Rr`UE`gfv9d)5CsaLGzVw#Y z+|4Pxkq*AC8Vixa{R||vE#fzY7#H=AJCmonLA#Z--)34uS1L`Fm~kLFBV3F22=cH% zq4hghie4R2;PA9mq2f~NTRMw8&*2GN3%xg<$$o3bCD&}`go=$vDFd&!KDHNh7JdO*-D~jBYW-RmeK^l=@C&Q-#&F6nqqLFR#YBYFt#+Qf;Rf7D=1Rm_O8&+QO4@lU{^>w`i7!} z2Ua}6E#LnnmKeOtxaj9Rt9A{!h<4zG zpC@p0%VjD1;o+><-pipuouIld>R&=_6lVvgx}rgZs8`ukR_;@>Sm zUIk>cC5}FR|Kn`mij4M}t$=ZdrDpc)FHLa;+4Vn>JGeQEn$YpAv1{to6X~7z6~T4= z96gc?RsO2U8DW$3rdMn-zu7!Ar~9Bu!+9>-XYXoEoWP3xi|~d6&bJn&QXZbt(#O5c zMMhc3x7tX58Y6P(TYrB%SK<3)u32MYCT?ySjB7PMXJ<3}o8oS3y`sz4k3B|Bu#S@x z#`hwvibeuA+RKw%_a6ImbLIYGxC&6vfD;3@QbJ)Md zYumq@waACZF$Y=lVUICuYb&!%=!Avk1!u*OlhazM1u;gCJ#ZFhvBUmA&ZL*#V71TK zPC&rjdj39m?i=?FC%St3-<_mU87W({VxSyQ!B zC!a$ND=D)?A=ozy_^r4Ql&KL~l{dmb@N9uY`!!zdEo?Ndik$7H~yuur%^E>avxAl2voxZvo;kh_cr1$#dC zDg3xiJA6E7`Fg_w%S9gDR*ET)0x#_tfBbDOiGeH)m1ZN8NJ{}Z78k@UamB3!Ws~;ykpH@B-6Qm%8oi9;jFjv~1C-vMB}0eGfO)0-K2&qznz~ zJQ{u7#50mBfohKYw5A65?Q8K)?~Y|OB?o;I{1#})&;+EePTK=QO`kv?N~aGWcY|H~ z_9Lo8{{U!Xd;MTpVtabgLZZ}}jB@t<*gB1|$0mfM=V@++0khU8DGA54lbX?Kai$WbAJNtewrmF`c@~e}zuGZCZ4b?N>(>im zGjAWBbKSZlXS=T9BWzh*k}Q*lJ~oZW)Qhd7516fwUpL{6;`Ezaoz0?WXIQQVLX{?{GjX`?a|q-<9DmfT-}1SK|1{+ zLXRkx#5j~Pi=sIred2G&U!2gy%|480QorFNeKHqFa-JzjRswfT>*X9XDPP(BwA#KD zbuvW;Z(-$3BJ>XCeLEW-->wq=ptD&5g~KN>n3LH`9b|`Zs;jU^Gx^o8iOiyvAj*=X zOfmMrIZ3s0HZr!lI^Q*|!j`MjiLbgN*gWnLA1#lTViMZzflp{Kfh?U7aY}k*a5H3? zm-d7Bb&DzwZ!R!m2l!p?KMvNF@2WAh^zbyd{C?=n5`PsZ^NZVgfeD+D{_j_Gnja-e z7jD~ISH&I{Bk+2jxvY;AnYaI#4)=p1!IumUsg*qnCy2V|kIU{ia?h;$;{>+1Ur#)6 z46>LErSbn&jaAeUL|s(;AOb?M!;4E_o~w8lJYJJ*Alp0yN*Q`qGMP+~^H9V@yX@Jn znZ)NQGl3S{m+WXxPeaX#i`p|YS*+`@HFnNl5fF=!DB38eb~4`}UHDjI@Pg-oc72>9 z!HuRsji7-xJ34K(Ub2(GxiDTZ~ ziaXMrXOK>3soJ3NKX19rc%LYzp3R95-5q`K@4+I&qi;emeRnsqh-^5fO!Vt@kN#Aa zmFV5i#}+iHi|Db_O;?J9P>k|!{g~y^%vKad1!kHW8O)rfg3odAE0%^@FL!R zGLNx!EG#6dn4(uMOVQLTt-3pjfE7MA*C76RD*}>T!RpB(M^@0uOYi7l_O;^n46?2; zuc*V_Xjw+vA}Oerz98F<(r*q$mWO**##A1o_>R!I(9y!Bx#;b(c;U+3Nxz~9;h#ck z?Ww~Pi8Qy5F%KL;f-oZQPV8sV2#B~ z*y>`IQ&Q@&FlM1$>#jCk6!XA6c?CX1g)RlzA42Hz8H;Jtsb%P-+45a+ybJDoVm?5GH#ci%SI`tJhbzv*yV7WyPs&N6Md8uw zH|FhLb0#*u$3l;?ZE9~ceTR0NDz)$CrM*Ri!)~W4W`L`ZzKdBhe_YaUGQ(QDUpAY? zFor|YF5b7{L>ZPVtEVll+?qSZHIsN;@UL-#`FDdSJQi)wUnS(DReM;K?+O1qfL8Xn zW4~_BbAFx1Uae5^P5DIJaOe2N)^h^eBKN_E!Y7-*VTy1sxr}7HC!R+el%O%DQisxv zWUb+mD{ErFt{>+O<+%wL8s1 z!bmk(Btv@YWovcJ+?3F4D32OTWG&B6kpZ&nl@D>9gWjmYhPZWO7QrBj2=xCT22S?= z_i$pdC+Ek7YIH`YU-fX(=(4m>;}9lrz#e}$lZ_T6&w3YDVPW55`fE@nMz08ua=UxYv*rsq(K8qCQK)i5yYeNMCwCr6|BhlnTeavZ0 z1#=qH;l4k7#bm^-ejZ1zp-CN+6DpbS_^mwc4?0RZwRYgW42m>*SB6s_S3w5zb)OY1 z$VI~39R4nM9>L+9Eyce-NEf{+^VovhNx>rE*+$_)Vb!Xi%|}xSBRrvStN7770#?zp zTrF+YFlE(Mhx|P_7o3L^Gh}>?z*OMfv02BO)#DkA{nb_NO|<{#ID~D7_Dyo=59m+a z1vbWeyP#s}kr8P}_^17g-ccrE$21(TP4m4o9R;*2&mWE}ube8Ay)j*1BYf{1^jIsi zz~fH?OQ`K)sePS~ynBjv7f?W_M~E>mI`)h2{V;Oqo~>%j2!5eoKPfPftDgjYzAm2Q zn&~P}&@xD9y@yff3|Xp10mz@H8X7OZGN`h;izd!|SeDY(;*Zm~>sQFA;e3Pg7Hn?Z z0?Rm|=q_yIq4r_}W)bq!{`W#hlomUbVm!KvI2v@M*BSZkVyokh zrO*+Ok*1T2(6jPFb{+G+(}wrEC1fa^3EJza=AU$O%nZJNg`73y?Y6w*t{Koty4yoA zp`u4u<;36X4y#s0;i-xKH1d3Vd2x0|w=78el<)eIdEs`LA5=gen~zpt`m4tGOFFDy zMwou?m*%k$R_@0Qk7LU>qveTJUZZXp@nKPt42k_~L>1Csf#*E!cYG-p7y)_m#BR;t zKR=Mb_K1XJ7bBwOHjD+O3gmQD9GvF-A*Z*`lcNsyHYDk;ul^o?d23$at5{Vc3a1(> z6V2N7<;Pc-bv+rF%Q*4J+dplsVMM>C_y-WBr$=C$=kmU5U3`Cw#^zw<=M2=ZHe{y> zKy$zD zl5Av61j!NJ(lecoZ>dMfFlfOPdq|49)JcbB0kT^3-M4tz5L|a>+k)pse7w>AxcfNf zce4~IY$vZd@VU_^BXIU_*x|=2Yod^~*pAdoae^b-?G6=w6jXh*<;OFg^?>W_mVo;#QiJcFv50qL z)DwxS1I}qqsK8R1@#@<@ZGLfmH;VvS%g)O8w?9VsT2ED|U8}U_w+*tOD-TPTh7H9f zc(bs&TFfwpg#Jip$=4uAM?f;2#u%p2@`tC}~B=c@Z`xk;n)kvlj`!Oo>5b zLkt!gE3@eTF!ml$O>SG)Fuh2C00N10P(X@=B3*hBq=;ywsdNzO2n6Z91yGPCNKr%- zr1#zoy@PZR5a~^-)PLukbMJe<|2_A7-xv%>hGO#MdG=m=tvTnKi?CZFK~#a^$Cfml zZXMP7U^CcfubE6>xWl~3-8S8mz^CZgMX)sspR*!9*{nl>`1X?*n~-v^e$jXF}O}f1CxlZE+6*76dc< z(-FIR#yFWhi0G@yeDj+hV|N6iJarau;p}6p_#u1V6E5uu>ylGkm`v-0#6OmZ4ia*| zaA~W^tnG#3r6xMTJwddCxf^K|u~&V+0-1;6C4J3y43)jBW?iiRmG^Y|FA$fFzZKt} zf7}5}`u1%<8Kh>rtl%Wr&Ebl__t(+zSJe39nD|!&A*Dtv;BxvSMkGeZNCy6;1u%ua zlftVcRA8R>n&R=UZ@Dx9#xZsbbPj*2k<;_O`=RNGhgl+zS-nfzYC4r=gJKIvWbdoPlH(0W)VwSX3`O+x!cZ%2NA5DiWk z)6Y@af{6_R)^I{%^uPbg8MAL z&10^`iR2{=2aFQF(l8Q0$otlFZ+UJlN>rm9SA#TbnM)Y=C%pWlTn^WUR~qXbg2@2r z6qiNi^1Dd&WRdm=|81@QZ|y&t&Wf0boB0mWVQItKv7N?n@*~Dw<)n^)bQ4xmaw+rg zSUbMe)EhCZ>E_by)eguD7Vo`*^A`vVtKieYtFsNi8MKlV-O%7tE50lNMGoqmxf@gY6_a36*Q)Ff=oY2n8J+-gg1eDtvL^hS9 zh+oI;1m}^Xc?tHvRzeKVp=h%t>h7zUzT$lSNSV-2;l+2w%x`3#4b8$`5dJ!|z>_1= z!K@TcRvyQCLMqQ>8unhmw9;7mV;(FFfol@dnzc?;3<_f`AZEJSnXsA#C}P&KwQ z8uRM6n1LAcy*8{nuTjOZW!(?Klz1R(;M2-8SYRgF_`K1^0BOXbz!AdkQ}Qb<{v`Df znEGrRfeO{}5%NkputIr!Y97o#s>sT9CN?jV8z0v^c*fCPbZJZof9$YBr4flkV4-Tw z%f;Q*pQ%{aL9j#p3eNVjZm{Y}z%xeA^`bOVIAc2r)fGwvUSoK<-?Hk23(8q~oZ>ru zh@jH&QmtYLWJjN}QYJu{lR(K~vXf0ZLA0&YS4pLqLQmbTRawb#qFH*kJB|U@g3DEA zw9PAU2hWU<6GAp2#=HNN7tyHHbbwcS6S*_w-bp?g61X5vY?!EoFV8rT6hCc_mjwJ@ z*1WF$xinm6feyP@s&ABk9L^oO?@(-Zx86CBj}`X7+5zT=i0c1|$SFL-3mx;A;u=MEHF$G_xVN9h0(;#u=u*oZIEJ+|`eVR*{i!apQujNp)A=*Glu`xat ztA^u$t5bCCO=``AceG2aMZgzbYr|51w~dM4OGI$E^)qmIdB7B#Gp1jXgFKk%QZb{k z);mf;x0knq(A+S6Seqc>&eWZS$Il^r6&q_OU=?V__@Rk43$*UD|5d{MRW$rjA^gv4 ze>xRb5$2a3>_(Ys!R#HiuUu1Q=>PpY{x(!EcQOpFx-$Rco8VG$gK9A_;QRBWf1P-8 zaoDI9mqSFW@ZX~vh;SL#KvtY_ZM1&#(OC;Aj8jpFi^7bru$3_~Yj?HW_zvll+GW{2!nE=XDuKgU>hcqJiT4U+&HS z+-z{4w7`9uUw@wUulw|`EBN=NfEOY>{?~Q0E0JFeehZ5uL7~!5ilw@v8=4?EuCnO=0BP~+F4+za|F}f{c64kkWKweaoF4hx@HxD zm`i^|kRE@qlzK7~?yLOwZ|cvf*4R2w(kC;?1l(nlE!KxV#sGJWwJG3Gy_oi5^;7qj zmA5=5kWZoPcozX~lN=tn-@_vRv?wxI{V}4tf9E?8#W~h_ z9v;BCfIl36-|Re4Z|{Z#fh|_``)5kQl&)CEmW%8ZeNpozUh!uqWjuLk;xhJ0k-n3W zhfgHVyM?;=?8C1mSnnx(V_#?jf42c@9WXQeHFm=Mz?R@AoSqMn!;{YkaX zdzG6W3-T`4t<1_P9~lxTv8I8~uz~->2e99L34VpJNs}=2t;f$~`|pkZ_Tv_bt`6W7 zzwfB3xkd+WuEGAmpt>&ELesAx$?RJc38H}LjaK0iNk7|m299xbubcHbLNt-%IgCNTN= zk3|k@4D*#r+J{C1b;ql@n_#@X+jY7Ev0$pYcKVlIX@=rb?uc{ zsyx|hn04}PJ>Biw>QYArBKA+>A3k0Iwwy6z2dMR;w&Pz-&!;M#HrqL3o&&(dC5}_m z*%90+_eTvrXH!@oTmcSuW*Th zvDTG9;@j(RDCdz4{_VxmDF_Wy+jA|`95K@K9!{GF8#f>u zCackwJsW=O*i35QpCPaR^>B$%&@>49WTt^4f1#4@%=ncuom1V5{a+i#-}J5c--3Iy z>11eI6r2L2qEi4HSY!4*b((dvJ^}VgxrWC6gkC8b+P%O8c|TwKqJD4ij<=Njl;u=L zv~>;e6^oKO-EKJ(C32G2?~`2Po3#QRkczWf;`U&J9B#-mx~w1B9J*{i1M#n(63rr8 ze_!Jm;hijK0fdFW7I4n|>}0vQ7W#l^&_-K=^8$!wE>@{dDo?$#qJacZbvFCEYZD=T zWslhGR7{)6>n_lLxL(|~N*lv}$2ONy<`lpjr{d4I>JE=j-lyw~zLj!!0~SFwlfbm3 zYi2$x)h($ab?O2v!@2Ya;3MBSJOiPxM$BZuGUp@KT&njB>kYIS&Xu+eX8}{`6-OI< zeGfsXJMx_cftNPMb@5wWy#Vm9WB{9NI3%~1=UjfUg<+k@=fIqx8tH#;2I(+@C6f$u9RkV8e%Y!vCK zB%fw*q%3UicYwS}0m z(;jE;2h013k~4I+S1Pb%%~B`PMN9ll%CmfMEN$nNW&i!A^N;oym_YWt6*EfN)502X zAf4@x8amtpr?b>-G$Ik26boH?I+_$#DRTzrXb1LLn++vhH)<+#3+g2gZzW7p?7pU% z878%hI&Xw&8=ioki|Hy`sqPn zzY+va3Gx7a`aiMb|4df?{W^yhx77f-#4%45=HABQTl<9c$y!drPUGM~oEnbF5;!~D z!SMEY0hxDf@1({lNRV=qb=TmOP=86c^<_e(AY0@|14{x82#gVWmr8`{74!>##1%>n zjSn&i7OW$wYpeQsUxY#HhqZ!+nGG;npz3oQvXgz7t$YS-xDOD5ywfFV7x!(`gsqTo3)&_Y}WFy^E zL;hAcrFb-&*^SDKK4+?k&OGt99RJ%AmfbLcmxj{7olE8! zt^y*rUSHGJWC}RSK65Z9c{s{}V`^!9?H1nrn`imS`t)jmV6hWh3vdF2(|t5|*kO{g z-gHc%gH8~wCH{n0sYCFh6lj<^Q}=B3M)T;)A5c$FZxA*~i14r?;{0)%WG{E|D-thd ze_;W$9Ax6!z%JYpP_0=?Tane-r5L|MA-T*ttEJBmBIa6RMA$%B9xm)I^k-EzAurG@ zQEDIaZ3NZJHwKTKhs`8CHP#&doX!QOgyq80mm5mM2i~iC3KPh)e9e%*NO$R#s2gZT zeHhUZmpND&YO~@ftZzTUo*~C*d^Fhrnpjys)Xa4XNoHQcx zR14-$%2M4tT*>qZ=N=I6>mMWFdi|Exs@vCS$cXUCa#fF^X4l8BuItr|vY&}X`eQ2y zYdviCz~}Ht^S>wK84(1~D*bTV+?kExu>L%og0kNk6BztXU!dtf78y2Sg%-cKyaR0t zc`%_AyVDqC+v*zBvdm-EYDZJ}zS#f(Gb_a%JbsShxU4srq??yMeN0zna=({p%n9>TJ$B!Wda!Bk7)GRU)s!WK6nQ6(G{Cq_ zWaFAW8HJ4MW%GEc+-Xgec5VzH$*b(dayQ>&@R4s?LLQu)Y94#iL`poome(#SKRE$V z*SaQF2+}dmB#>XyzH*KzJwlcjntwgru8itTW?UeLeu682PacUY3{mQlbE_pSK@*0p zm)8-Qif~vODrK4qH|Ux6PD_?b2%7T1Q+@*-Ysw}HN8{<`y!&SmwFGr+hOmggYG68DCD<7 zWZgZN*2!YZj;BE;S-1BGyn+m=h_tsiiry%N7h5KMYD5!zr56Qh5S!c|^xZA&$6^py zLa>3PMgQSH1rl6bBt^+3=^J`0Oq)!P0=p6qCbcG6WNL3HkOv6lmQ&s3*JxF_ZBFZ3 zDLGvqXx;8Ju`bXjvkRWS--AXh!$2RekIO_)g37DTPuR(Dn5~y7Q819)1|s!O=0r^h zpDyc5Xg*)= zZ(?atf7;DsV(G{3&DMpwYd_h;qi8MN2n&$wJu{(Zjl?nafW;TGx3q&qXysv#*$m0y zN2`4a_NP-;YKMhu`86+0=!%j?HgrtD(71k-A6sMj0Z9XcPpBw8?Oa@^+2o}{bteDO z=1w>h{<;f9z;?thnQ#c#)hO2|%|be3Mi8zP$Op4bYBUP!;O4dU(hx#9N}s*m;SATT z$}2$=>syptsU~@|uO+c>Aiku2i(Y1t{@7kfMGm=N>fTKXN~8~BY*4_(b$?Bwi&8&! zpde&BYp~}UR7P@-_HO8ZWJYtZ;e*Q(fmX<#Or_`J7vs|N64IIE+oZgJ?6#iHoSP_Bh^A#GLI58GWRy}7;dqKv%CC4%ETgf4C~ zgQ>j{w)>Al2MwWzQH1rQp!V7(Z5%I?oA6%^2oWmv#mM6Y5?!CV-k|&nP3*P~oUeaY zxEb#w_Ul@y?;L%hx9&3;Q+Mr5PN)lfeq8EW&M4n_tyg>j;$XuH&C##Y>hxZ{t}S`Y z9s1V>ol#uC9miEc!{)XYK(3ZkA(Za&p!t#;NT3?T911&G;sOZ`^^BZ5u0?OqaVw@} zM3syXp3yWhA0%$d!s=dWH!sy}W==1lhj+lWLo42|OLY$`}MQ(Kycc`&y?UxL%tBoFgtC$9}kp zpPYv3>u93fZT+ZpvG#7cD!%sTi08|98zN={M%vArmq!bp)IA3oO@|Qk>q)ng%?>p2 zbhWDsD2385Bvoh$o==*xN~?azYZq@4<(eyJ2rJx}tT<$s!9a_ne~=do_1}=_4cI^+ zuD;Ytmpz?j7hz@<$C{w--}w3sZks9pQsRUA*39`VC>sJNL4{>TIK6#UXQAm`4J~nc-f_XVP>@pAUce7kf-v|HqJb}0k0>ySz+St@_X0fr!{p0h01Ig+ z>rSGDZdXj$@cKTMB2LD`mcK9Hl-){l2T>p&zd8D4z6ZtBW^q%2>$N5!jmZO=E9004ipKAeM9e@mr&R$UPDW9((O5H{6p3GKo(WY7%J) zY4ukY4X~A|feZ2usK9?Ge=PNG8TVwM>Uamzl2%@1Z?;`o;r=(n8juB*tfPrj6L)D& zYji(qozEt`!WBFLAXB^ft3xut>?Ku$V!@13c)+G?1i3q@0|m=!0@BR)saszyiWRAK z-&9(zTM0b_3?jXm3Rxtd4yc*25aC_@)G4SLq)*m)-Dri zT#FqWq`;GE#I%+2b9P^)yF$rh@|JUXh!~#R@qHIGQ&)Q|y{&lsU~hG#3oFV9jv}5T z9hxvPkf4-WN4SIf)HALXz(KFZjQHX(V0$hI=Y#tYXn=P0m?)_SGO)W?n*Dy_$6n5V zD1RFX5G;iiXTT)+dx3^1E>d}P;(24)A8-in)X9AdY359#+w0y-^u1 z%_-k$R7zX6nJ%>9n?~(Pm4|wAUkPq2Y7h^Q0L%h(Q;>*t)u~|Qk}z{#**629i`_~+ zU~f|Ac<1;S^e2Avz1D?lbZId z4<%z{km3D6+OuMi$3)Xkmfi%zKAY3{c|Oyk;b=m&0ZpZNU#+5_eh$&?V+T6-#i?CZ)|g~6Hb63F-dA7E`cGA>6zDx>6s zZ%^9$U)~`J&#JM!$@?zzgT~UB4Fl!vlxQa`bhK}HLrHlE;MlEX;Y!1(Mjo4cja;Ng zFdV(N+92*Aja_cw?eJBzzfH#iDL!{_g=7kw#k7-laEfBSFw*Ipzmg0sdW4(IHMVxE z+vsH*s`0a1xq}?HClETE%?`lC9W&^w^qI&RBH1zc_m1LBS&GJ6ErMi_`!3`{l!eFR z?6nnHcEatIMZjGb)k1Cu6-+tyC$x)l#tC3T);uT6QiN(tf2TzBxqfS6UxfT_Z*~G!f z!fO)c(Kw-Co$W7XNR0-11FNVxI2Czu9HV0+?s=QJX(Qq#t@0$;x)NMOB#`ScB!IUo zUVKHEji7~lm(y=qQgniy`u@UFaA4{G@ubrg#6@OJe#0XX%o4FGKp}%;2j6HwvQj|E ztEg*q2aV;PI7@SNsJ(Kx7A;CsO75a#^PUx?Kfnk|8nql^z}xGT&H1Yl?A&2@G@EtizbFu%5=&imzlwWfICF-V`EIp#~70J2;6o)O`ONdNk*9K-toq-(E4dF)##Xv8DLU;_HXbG0%zjs zd#`{%v+x5xpP+?Outl-k^Nop-C!ux(+>wMB;{0Ios4-Q~5>`WejdAT;M*LCXxCbN{ z7+g=MXNNAVJBb?_7Y899sD640l(Rty;Oc(XN4C-uO6i{ETM+bMPli$&41M3)en+mf zb}P4MP#e+awLkJO8jS~LpC-_s@Er+~+X#wUgddd*(daM~P{LyBRj9dLb1#dtRt?lw5)DXeFFVRd=$9<1I zH*N|z#~r7yL-qtg0#wTuMLb2rNw%7}&cDaYz|x^$y1=pEZY`Y?baUOBILQF^L>m~8 z-@Enb#ma~14O0YXkYWCqD8g1zj;VO083>6s*18~KY8yq?QX0Hm={sI#YZMq`^z}Jd z-xy`VR>MX8jHoO)`FbCj=XI^d9D@Tn!vssy71p}m{0BDa6B=ip)>Pwp%yZ;&$%|pU zf$#^*V0et;ExZv?W=CA4N{PZ7V+#QV1{Hkd5&M+e=F~Xw{r1=gkJUywNJ&~@%9IQz zx=mc36n<=F9^cFkbG@M`t2R0wFX{1SW~{2Iu;g z$zLn{!)dsV)6Lv6WPW=fMQ9gr7hBr{?`nFp4NsKwDC-9wMsI7>Tr&=-;<)o8s+hx! z#O{(A#3GAQXErNy=@boz86h$YZ<1n9v}QqmM{fBj{{RMt0)_6!{+%1GM>QC+f?? z<)tK*<(34U5L-COZ`A>63W3i*v@~;;8&gnH zmV=ZKIBwQr@arStfg|&I-<2JMAJn*QFixtoPO&Sfya%;|w7!0?jVpl!@}+8EAGDT= zy(88C$ksneH5=j+f}{DCRf9c&-BDMib;z34)}_1BX`$9H+&T<5WDT2CZ2$n=RfsKX zL`@eY59P*d)SEH1$L3yzCjy;3weAz*c8RY~IklGT3Jz|qG73}A3s^E2+Zb=lIjVHa zfFU|-XyVKrzoI}0vH5djL!$DZ8C%7YEdDY!m)S~4*?$9Yb?JogENY$g?BwvU4H`DO z$I>mbr#}%yxDozE3{la4J_mM%r~*;2xS4v{iH9NsWu?0i2|^~8jbMjGm-4V%^kz~q z0zWueNj#hSTj9oNLAqEMf@sj~)05(7{VLYaO6iMDjqe(mMcwp*BjWn=$0LFzExk-V ziB|b|JMBVK1-_(uQSf4DI~6P;5C&0a>!MTYc|Sv$0hZWnWtqwBm{%Sn(*A!{*T4#AA;3A zDBk^c^WPNd-@M2O$LcD=AB05=*HvYjAZy5^8_6J+}$+RyS+`JZn0KVQ_eU%k#jtP{@%DPI={W z#f?7`?z{L{`U&T=*7g6Me*-PaTLA58)`i@!4`Fp2dGN3b%ay_{lbXI1cks|im zll)&cVucMM6ilntZX2tZ7#0C>O?2azika2&SszcaF20h=S)Y?H^MiGO*0cv-W`F57 zATS=C9BlB)Sh?J4qBFFe1H=<^#b3yPXuF*V<|e}rOh6=7AzNlM(s^ONK30@(SYclk zc~`{yr~9n;(nPu4TEQ-0ers+#sy_1NJ$qum*K-^RQts3ggh>EaO*iF-i~reKK+SIT z-_i^W;Lhd@D(oM{uiYGtOZ^v3|LH@5GYyxPZGMH0P8As9c2&%}KjX!gj+$)2vgrd! zy)B;yc%O#;Q!?_OuSKM=$a@VB@8j=kahz3vBAS>6m$(U1Nhj=AS8N6JMb#7#G%Sct zKi9T!mdn`&mF;c%3}~Rzx_7kUhXqdjc47yv}iM>wrHkDDWZ1H zEIDZ6DxH-`Tz_!bz4Z8rm4ZBcViHU{B{HNjw7&YTy+&bBvlG=X9Yy@&@Y#`l%7K0V z_J;x5zyHb^i`esuaQJN8Dt!aYxI_4U1T~-wP`OkpW*7nwzPh9fFvP0{FfujRQr;U- znCG4!-@3h#0uza@yw&=s^>zxF)=e*C@Ht;Cr8vk`09H2MLfZPdACDXl_8X%m-m65# z?yv^if6>6fmI#vo`!p!s$*`^fg&22Lg0~S!{ohEf*fj8h>-hkZs1@2U;jUOlw1q;f=xWc zjz;t{V_y03<3090a}^ska`})j2gpM=z=`G=dMw6I52&(ie0$=1COMlf?(~i$uo

JuA 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

mug0ng8 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 WyXSjd!ta3p$z4&9$&uFg{r>=}somrN diff --git a/_attic/modules/docs/graphics/permission.png b/_attic/modules/docs/graphics/permission.png deleted file mode 100644 index 1dd0f2a2b8cf9b8620a3c2c16bb078500e98c222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61010 zcmeFZby(D0_dY6!GD8RhNJvS8G$QW66Q zs355{oISq!JbvHr?>g7--*a8(KOH`^KYOpe_Fik<_q`@UTT_{s;0nRHbLWUvRTS=? zJ9ob9+&SDL$VKpp26J2SxpP;~sVdyMhcI1xhF@c)_`_RmMCGDtLSiKA(_2+bl2^r* zaV|g$UQ&~G-xA1ut3ukX^6U;XHJ=@}BcbH%cpA85@sIFWui`*eWdHL|ZEf5f?FPz+R!%AZ<8$zc z0xp3b$K(J0lp^C1x^}3|a`Ep`ehrBEO7~xbUk#Qc2ZQ?}oU;CV7*6A7=l|DS>~IOj z=X zQ8w_eHGV(Nc^xOjF)ysEQ}w^!iXIdHGvq&W3}MfO^X_g=i2Y;K-;ZcF+{FKHE9DO1 zQIv%+Fwk=R_ge|{R{k0C&yxOsWB<36{$GtvpgJ#{bD)km-s;M9m_Gbg&RB-p?kSq( z>TTOV?P!X9E2&1`7&j(o@LkQ@98u#BA(1&2@c*ilLlDJNrJ`^9%o9Bzu|a2(Zk}jXE1yad;v}8(Fgn9 zuo(L(1ODy;71A|uClk{_WmaOea!*I&a^O~!8Pe5%k+!k6)Kqci!TnMxEt!*tX|~xu z=+mPO#!E8Cn{pMEuz%j0>ja#|ns$rfiz`{#+~LQ1ba~*9Vg`H96C3HX;~n##leQ$> zWepZC=pU)A$JYA;-Yw*`BGXRQAsc~vP3BLCMIbwaGC^rhRo!SEEvd_$vGlaDQa>j) z*Qy6QS7N0PS2s^Kf?A9Fn%=$E4I7j>JFe&#ndUTZy2(;v{QIB;SAip(5^#~C=In&i z7#5!C+TsJ=S2yiKSX|!XyT4ixhrZ2SO2OB9ye-g1Bz%v4>+E!|_0G^Kh9n4*sCm=A z;q3INjZBSaxOVcXXt6Iny_D}mYGIpbbgg6cyGXV_=Sdbqpl5rF30foH!2DMFbboPk zvyCK7D{wmz^XU8~i0I5i9mJ0@y*AX&0PWzz1p`*PbdQ`c24A~|Z)Hsj8(S)YC*REC zW^V`PIDKkxyEES}xzo3mwOU#~dnNYf*O&0QfV~jWIe+0k@s%v|>V6SInbWPfwuc`y zsLYNAgHFkpv;Drm&Ki{1Kvf)lZweEgMX=1%&)DV!yp|Rls)lPkiV1#}Gb=9E`>3d!Q&Ls;(4G4NEcg{jyoWcw(1Z=3BzoxRg+_)k#Y-y0sB> zCgHnS-u!cFb16})Gv~uNa9-iqX`>o^4$fh#dnX_?T6)GiGExsQF}yw)PH z0nJ%J%fWIK^GdRwX~c}!YVH#Yi~QP;hTQ5>KSu97NTB#yJ8l})s%&>Mk1s>Ly8UC^ zjPawX-?~5tg^q$-^_QYdC7e#5zHzf4sjEd5AylSfkxK2va%qRKxS+G6xq?*_%a|Jr z9>B(~V(T>@&=DNj)FE>@r@Jp+BgDz0#wlPY?c`eRfuq%}C+n`}l^v8(aikafXvUS+ zo{&gG61Aica+RT}Gj3h<=Ua2^i_*~vYJ4<<3^M!kPwu>B(S|*7x@g54gR_tza{SHg zEOK3r4*hr=vA3M*8hb(;IhNY8Tc|I&_-OCSySS@n{#zZERa`yoe(H?i$jpWC)=gOC zihIumc<*ngw$h0TPr!3qtZMLwBM~z$P3vgjJmhVSTQ#$Y#Td-zRI^ysl9%|FeXE)5 z|C%~OrlHB1;0CPZU8 z!4fNGq5V?8;B;G!$xxtvRybaubf_%?p-;QhUbxyDwySuU>T#4l_`Bnh9E|mq(-kv8>D0i;9evy#3Mw=oq+z81Z`d(RO zL9sK6xG7J6%P(8`nAtFBzl~8z%ZF^*N%QSNnq_Q+sTZDPCPBAK#lxki%AGM6P-`_b zZ5~JKu0axgz+K&*Fn!Y~jPaiJd69?a9lUCm^iPm$iD% z&u(O`fOs~4PBCKtdO_~OyT?yCAx|T>j0y7SZ#dk$`mkXHqNDf;17%I*x1cU&Gd`f7 zZSmV^7LC+E`5Uy!hd(N!M^d^r|M)0R*3}e|Rzfi=-=hB+M=m{RCvy%t81UU=xFG#7 zk-?hf9Fqz)A7)H4lLxAY&Vt@hQnw+F6EW{LZcFUhYf@z& zz%?(6a4ocx!=v|_Fek4i+Q1~~Xwn3QzMTe>=Qs@Lap)yEI~;Gl6#l6M-n@w>)y3+*VdDtg7+x3xG<oXUC6_t{t(}i&D^_PuU=$d@d9z{wMpCJ?Tglu z)d=nC&LDDkb(5geot#B+ThzBP5n_ZE=4RI9V$;8ilEN+uW5?yp9*^XnZKen{DkqSW zfMpt}&9=;){;a=4p=(H{s%PqBO~f{E#nu=WNsZqz-SeNngPsDC3K13nS`0GEpW8#92EstS(_|}Oxthu!tL_(&+{*9K( z5Kd!>$76C~YPnQMZro(`_T*6Q+j^KRzweFana*|gDh&%XifLpbN25AgisjB^UaU^c zZaM`@)V$D_6+y>~jN~T7AM9u(l`qGQFA&UY)V=d&WZNp=H)Icd-L^m zu=YfrWLZ-6@pdnMnKM&Ta&;0Vz5!Crpm;e>`M#nRDiz}PYc zF=zxN@sSgSAZ8Gu3X8KE?l&dWDJ7EZK=?yR2H0zuSp@XP@2R;b_h4?*RqeU26Hh)# ztTk%5%jY?-xa{)D44mAU1!_d>4myjrGf{n;NA7ha`w9rm{-^JTCNa%T|z1SEX;n(1bxgNBbd=%9-h}{t@UaC$>1FwoCtY{L$7y}X7 zRXjZ_uj$Z{-AhN<`Anc|8Mq~fK>{&ov0c)|803F7Lbp!qQ)!g`N{Q?3)AkMMJ9hKS z%u>#h6@s!U=GiM(n98QQuh^PRD!fdlY5Wqrb>ZJK=dToE^#bO$k`c<&SSoSt=d>#c zNVPSIQcHKW-RrscBAFXD9X@X7vge5%EF~%rtFl{u&v5R5yyy^Cwc}-~g9xK7VHuxZ zMRNRjOvnc@W|U_)t=cpNu^Gc{cF-g1S#!BkS;?#?pHW9$Q1Mu5oZt?-srtYV_c3)5 zpS#5j9s=MapFZ+h;fG@J&BGiNa6AQ#bGum^aJ=X{)$zZFT0Qy}6*E zPulbJsL@H*ds#DVS!v#|rpcp6Ml|Gqxe%FMHYjs_Y+9b44`wxnL0P#SM!$p1lT)^W zHRERT{e2L*As|)sAiA(D`6Y_Kg_=|r@|-QzSjhKF)p+rygrpy}sfJ{Rk!!Ojit&ac zvYeShu!o(;OU&X6C_G|lqN-=-93&gBgjT=iE=O(Wn(16rEh2pl@j@={Z!H$srf~a{ zcEAUGMXN1`oOCgH`ZMr0V)H}|5h&|>IR$dV{xQ`!=|elj!RJ)Vqb*&=heNl{2fRys zGbnx3&eLBbVd9;{@K!CVo*EN#P77KG308twdJKr$60u2dwUgsp=esz5PI@+y4-;1Np{zH{{it8q}yU=N4&m*2vb#cpO6~GWTwj-dsH0< z+x^$NOt=|!i%;9Xb%)|I$9?nLWc8q|8!`ORaCbnvq~Qv_))q)JY2_bn)w#1HIxg!G zfk5d!@8lpfHDH2*Q%iU`t+^I%Nr(_ZWM=JOJj10Wr(TSvItIC5gj~AQAj0PZdwT_b z7w%sLcql7KILMxosLY>{U){YP@|5`@q~5unsfx4=K?<|wBC4DDp`ZOXQsEl{yg*N> z$BXi@ECbpTR1Hxp>WyK^)dd-UKh~oOpopI|56&`~hg2~=>38I!yVKOddB=O;MR)%O zGh`=0&fP10el17`?`4H3TeVg*xE|RdB^EOboIteIuKUi*K1g&BN>KQ_ZT<)16@*VUuV4Db~) z;yRP$|M~e)6xjP_F^4*X{|S!BMt~Tjc74L@{(pVWPo~}QbK&Kr&EIbYRWchhKthHe zOyB>n&zn_1^&C}TlgT#3gqyS9&SB9_&aS?yO-#xCZ`OP@co|!e*e=tOtr~%ew$K|& z{F_w!VqvEjVS}A&xqou2f38zm+;t{!J(V>h1ykz~n1cQ@g&}XSx&YDVUMjey zpp>l}7!ds@iax@-sSKtjUYEiXoXwI8UvFfpe)rF~xfI}=h150@T)~~d610m;I{*Al z7WV)cVYzpDidFl6!&ZeL0`aa7O}jyf0665S`xhKV@f0j1yuc!pb%+hDk}tU4@Smw( z4SoaOs7VS{dGP2FdaV0TX$-bY8=!IH%(0Qq39_kRE=_o|4u7p;_ZQOif1c&gVg|pf zW8(h-0ZU2&Q>l@6?P3#11Fth+`gb$_-(U9?EdAy!)~mrdScve+zehn92DUIt>{^{F zt_kpkbuvWpU%oc9_zNMt0u1dOov8Is?u7$gQj?8yY(bT3;QnuXN81preB@Fyed^l> z;B~ek|F^GusV0m0iU-nyi@;#di2m9-MQ{=DF1(yzhdzt|CQzF%)&0xE<9>mScG2K3 zf|}B7{~9HpA4jU}V7pEP`oD2GS$nW@HHlp>W85d;U(YW8-@Y!F51^am3bR>q&QK*&=e+b=@IX51CW$cW7p z1wc`QRONV9;}}qB@z*(V2ibaxBWm3_0*dv! z?`bqhZ@xW`L6U1iK=^Y(?9F(e$F0j)UAL$&G5ptQatFbtANfC8&&I35V^>cj6`8Ut zfP=8r&NwL8MQ09xD-vY}AFDKwoy(JzA#54_)+*ucFlD5XOCwt-wIxUb+{FM$x#0Id zBFi>7Mg37VKU8wB;*~Xhe^YUK_$>^emhfCfkNz8azaUF&ITuvd&7O&es%G@xe5X*# zAnIaF4a((Pz81oN#lIdo5T;U|*5#1xGX?_?fZx|(15}nc>Ry|(E!$=g9!Mq{E5IOK3TiRbc^z3%8nzE;eY$M_ znlS4SA8>E4r!{oYU1}U8XG8{jrc>1|TZ3v7Cae7^$8uuFl1inxA4AKx{{`xI39$h) z`uRz`Y$9GK@T0m0<{==75=8=_tg8Ep{~v_&mqYv;LA1ykzP>I-1GtD` zHt6gmVxV>;J*gt%8(bIQciC$>F@HtXRT412Q)*>Drr;DvJTl^&Gvq><4Jb!#Q1zb6 z>9#Jf{LK>n3bwKm;3}HFH7vwB)P`5qdU}|~oAwPpk}QTWI$$(!r**2hMY1Mj|6+4JO&lK8(rRfDcYLVO%S#JdzV((!B<4T7}etu$jx`s zx)LETB;MLDh?6G3o{)y61hxF!vHxLZXRr#FxJN(Ka?jzJ`g~5V0O;ifJf6-m(Qy-R zlQgRYRf3_LnSVzkFYt}3!E;Ca!Dp~}$!}m=$Oh}&zk32dPmTHaE_#GVa0~ccxOoMP zY*iXZ4kwoMrj6JGqoQZ*}qaPG*WyZw_L^A+8+ME>r3y~5j#7i>-~ ztiKPwEDrcCp#VfA&kdIkMQi&xk?bYw{N7^LAMz?!51eH`&!yW_E>yE@^oXVzO58vh z=XZ8Yf2{m482B;aP-&GX7{SPPC6jFP$n77_X{Z#+Ys+>YyLW5egCpxzTlMC>M55!U-!b8j0D$DJ2TDieV~k{ zWd378Dqz8;b2HbBIOfq!o?b0nIIWETl2^^Q!Rm@x^hUgzHu=81onEga-8`}NiHRaV`gqj%q2aVi~EP*3pNGG)B4y`Zu=$^MC!x&buS~x{z=V+f{;J4 zap(dt5T9&)&qrv(rpvQuuD5ejTXIG}0zTqq3AiMQNoL>SGtylWUy83-tLhDH+GuIQ z?D=n=L3jYVi*XG)GTNUU45a)C;PKGPHGqd=##>K4^@C1+v;ok2a?{V+XET)61>#s* ztGo6ce4SSMpj&Hs>IdW5eitU3C3dsvee#=Rkie{i^v+rIPVYC)U{gbcHw7|8E%yTM z%wZrl22dK>ndl`!YJNhOTK zOE^PLg(r4DIBx)FdllBYcXO^Z#CzjuRRxgwDs&{ z0|P+jXxlq}CJnI+Qa7V%gq1L_;Xkxue>wI;kc8H@J>qR?#(Pt_>EcSlqk%iaG8D5B zh7@28H2@*W^5qhi55jUKoLF!f)6J1Xgr%77Up0vPwjy(O0G}`q3juHAL+vj_nRn9I z5*3$J-KJ=b;(N2IutAcX6@k=%^iR9CN`-1_-Wa=Q4%QTB>#{d#n}a2=K4Jj(#kSUE6hlUbT~vzp}20G5)2kKNZ(EMq-R z2RAaBs%0}|bF4h@#u{J(@3-BNIb1D(qoEwg51JCZlHfn)kz7R(EaN!gF(}mr&=NCI zaq?OBgj~Asxqq|(A~PWNxUpEw`m7LRL4^HxB!Q$YM>88D&$7Pw%^jKU9}EUDY`!;p zIIM`NZ#{9|?{^I(pH`HR*=ro^h{3XaEWTg3W2!$;8N+Xh?eqy-W&)C?_Wd*XigW#p z$Ql4Mo-B{w!l$RWB(*!V%J!ngHQ<}kR^N>i^G^cHO8^?8!=g}Py7+W(*#^MspuzFF za-`mfC6-v`0P)6|(p5y%YHQpId?akce?@|PtK7Tu2jFuct@|DP7W7yi&~gq-d33o= zf*KtSII$ZqH~L$I@3|M*tgM20P`2J$=9?SFB4}yHUt%S`L-J6K?E2&1J}xlOlQDYTTNO3 zU|gD}_$iw*@O)!rXVJ+WXSjqsq~IvL;*>OylmW={@cG^alxafI=tpubNx_ybnp>3H zDCLhvr`_I&oqo|U>l6c<2b^D_dJ4j}cVLnbQsgkm(#WLVZZz+i8jH;V2FM%}LdD>2 zXOPSC$cF)@I!y`qqg1WzkleSeeuPeGmQk=aH>uSj4qpA`9fSZCGFffREx< z&%WR!7&BeLWE;E zg!ci5^UiOHW|Wb30>m0-yO%!>_vs;x%q$kXS)eYj8M(d1bHgct-gEShIiMG!XfN-c zOjyRnv_4)0*A4aAvr0=RPTE_8t%HC|bt_=2h2o$FZhmW5f0sr346LJVF;0e|Ls&@) za%feH{08n;+K>8{G4B(6C!gm@e$D5n{si0YHuQOs4R^MV9l0pvttH%l9Rs-fI6Bgt ztelW{SXy?%xD$DRjMoT#FoR{Wf(C?odA6D!SUz^M+<8)p-*B+R?l8oVAtA2GP|`(iZLEou->yPzog2|I5P_?=I4|D{?JdzV$fZGq+iU zUeRdNO}5(PkafVFe};d3^+HLDJ5*M7ZQfIEQxcGg=aG(J@82uYI#Wp5L2fE&Rh=EL z$P7n?HoScjMde)8&F*M7YB&ANd)DB_JuDy?{&^&base@zz~m)5X_dH|ho+6`dOgg2 z7fZ>*w>qf82K|?Xht$Cpm5q9?`XQ34T70t&3z>LQXAYW&UDW6gvlGr&6d z3v#W_<7s&ap%4hJbdRR>I-^}Lj<&X_7gU1`w3G-P8hjDC`3R=YRc_{J@yJ}Iq^-X3 zmY=n68-%C;y8N*Ma2g#D+;&P+qvgx%=>Rf3zjMui7t?bQZ&vNFGZfd8!&3gqHZ{pI zwR0!f#uT`-XY4HCOWoQY2Ug=edVdUPe`;~_-BjUqfhXb&K15}3zm;d+3q=<)*|@$w z7PM7AnB4uK#ki7^*?#`RyC9Ghs0fJ%JF9Bo5|eR8!kr)9nS4-x#h2(^&skBHdr!l+ z0ht@nU9wN2s z(HXf%8V2dPZJD?ojL#5`j`exM^n5F=6{sG7DfZ>{0}npqH;37Eu|&qBg`Y_Vsy1xn zTJS*^op4ke7H-)NSe*rtRA!<-z~Yf88{%N7Sv2Vs#YI!Kh6Q4qfw4E`X+F311?IFf z7E4h&Y7KQal@sBGIiPH`CYmg}j&vlOqcTO9AKze_F*_VdU1()7Ej~Hp#B}&?^lj*( zS7{GI{grUZRy9D*G)q@sR(o?J#I-iI%CdLBYgUPxJkOQ~Nm1tWp}xh7^!?5eTOUk| zh#?hw$>Z>w3rTV#%wSg$Go%8^DO0zpEeTfoq@RSv3O_sMm4(AbBJPuyed)Op7+0S% z)b60Pzj|5E7}jA#ut6W`$BT)a&>WAQzii@MJNB9~WOZSUd*v=*LU;3CJFe~_6k(Fd zj~8@u4(}0ll(3O);Vz!ESD`&WXowQ08oR5`I7W}$xLHb|H^BGeP4zSNMODZaaCC~G zkS@9nPXey8iy{5z4v)aap>_SN3Vk`wskZNI;#px|2@tHuE{2 z8mTqhmDwTZ7vE`^GMMc-t=-nV0oYCPjLT)U3Zk?eUG(0@Sx5fosqc_EeSClnBEMLM zMW^hNKt^)st~3>Nsd1C{iu=F_Ec+##ck2B_wi0yd;3Po|>Pl&W^ho7G3e+a=1VLUJ zs%G3Zf~w7c0{FGp(;-bHr+GMptRw@j!PI-qkY~WnL}9B8)mrLfk}H4#`Z`fBU5FGp zDI7TIzST*l)F*BtXH0toNn_rLV1WfdMkr)E=B`OLJ5g5HKf>J6bbd+H)c>*j;Jye& z6*^hKcz`QGB~p99K`DV9)!I>O;%K`GipjgK) z-{ci^z2!5z$_F8iQS<(#0(jepfm<)hdLkf8Jj^sY+{EUJY0SF3*F|etjPC}n7v z>S#1%2mGAWVDrs0rd*Bz$2fBDI@AR-nn>N%_H%-0w~>=6t5Rgv@_it4%z3+bBOVP8S0=olc-!@FQ>^bM+qM>)Hti{xGm_pZqh8j zsWAkoynZKv=T(VtMQXR>f{f3+#`fn|JYi_$jQct%Ephk6^9MVHBj>04B*u{6;LEFU zq~ljAk90f8q57Oor;UiuL?6?rJ~kK&3{SmXQr8T(fh^T-Iu~j9NEQErt{z6pn$Gbv z{oqk({8%vC{4z_6tuJ}VgzR!*N!zYWZL)eXtNkmRET+#{40$O?R*Nwtx7@jn%c1)A zFGN9j(J+X9l~|n)>2*;0XpV)gjV z43xNuUCFa`+WDEn5XTh`=*w>M;ao~yAJ*=Rwb4f#qA%Y`PmpzMsWfch@YLJ6GVVw| zYyEwfbu_hAH96EfRlphT0DN#o#pZ&eT>aLru3=q2IHk&TgVgCMFp06~o85uak?@Yh za1NAV=%oB5an@M-pT6lk0}}i;4{Txu>iVs+*Dqr-s9)eITdCNbFM<{S{Lh6r<$}pL z40+U%sJSY}oT5R16%4<9J0%-eoR~+0>%-%pX|I(%c+Gg{xwFZ$tMOfXnF)NDMwS|n zmyQJuQy~Io=sN}~FWOaKm1do^C*Dif=E{U~eN!y;q`%Z12T?9%+b5l}l2M#z&ZYg) zlVG3KF1&m6vLH6YZlXamq_3)0=;ER^t3uivXoTX`OV(d_zPR`DQf(xb)vP6pAZ~SE z%;NDu+Y5V#0ij96u_U)~qg*&Ko(RGFM@ByMm$IuK+SFaf+zzlJDD$cv1T{D9caVT0 zim2X2KD8rYQVX3k#Ps$_CD0AqcCwkgxW|g=xi8%pfLi8i)c>6JTtWQ{L4odUUZ3GO zrsk%y(dDveVb#2ed#^65K1~oEdsAlj(zSgKfO98Uy5cO>S=l$G3ti7b>?)r}FfJln z6JAEPy1OS4c)U;jUCnN7b+};hKD9heb~2V2mQHD>mE&U*Myr9cP(q2{{AOE3DlrK= zrZ}0oBn942U?S%X<<8~7Pn->U@U%&Cu= zx)@G5d>{AOX`l{-<5}OVx%j;oiK5p-@|oikUb6b}n3wXb8Z7Ndl*M3BERXSBZQpPw z`Z_@M0>f6Ev6V_criTork@Q4XWrd?FmRpO$jXXUDaQ- zlXjd9Hyjaz2$4z;QkeoL;vJ>d zcN}~=Qb^mITLcdVvp`G_z=EuJ&^i5HHB*CsJO9Xjd=ewuKs&J)p3n(hWO zH1-?`FRWa6L(xfkXMmdgFlzsK9G0S>6sEK#_A+v=y+4m~u~4%UA)?kg?2$r$V$5iM zU8n-$3yTT~D9b1CJ7W&sPHtXT-WNArp>;(Go}$LQ9ej+r%9F*XUc(jRh43er-i5>G zo911~_r8)X#IA$t(!4KCFh-pv2jtebfpFO{|DB7no<#Gevofv3{ZMqRjuo#cKi1M) zE-;Y{^cC85s!2QXf{cXgOe#9dW@Ulq?=-2oqr8#O{6t5U{YfCo5W92Z2a=nF**6Z< zv~W;dhpprUNq>w$usly%k`I4o6AizQ>P1A(`hF{2b?Z!QpB%HQ$yAU){#@v9H;TYd zESAyF70vui?aGTwN5VF1fwu~ZPsR<=LQ_;Z>-M|0$RQ3CHOaM5_&lF()o6k}^_JQ; zTQ(Lp$bb1(!o+7e&3kJABiQyWwM-IS&^N{|P(i}-e zM&j`?@mWuPPL=_P>dcJas}$Q=UYj=o!h^)Z=sM=M+5Q>jp{zUKviDSyx#fix<1-x} z68GwjQS!2yyh*HC3;71jb3idGxSL7L*8&af47~uu+w~rOd8gk$R2p#BNl1_wvYwwQ zbMf-UOqY3i<`mWT)iqAUlD+?7U;6wI2kt!aXgE$=igJo zO!XGnPGgzhB`sM@hRjZOS!Ev~__LOl2`!`CE79z%a~*(R<(*BNV8+7DirD6a?Ny2j zXM*us%Y12Q4I0*_``3&KB?X-g<*~zw;Jpv~!!7*Jp)iJh;`YT? zIJB2H>fLTjbNvC6e^bU6Ty)Z@S_sB*wbU~|k_HO}wG!iOGyOr#2>_RCIFZL?)7FF9 zyx&0Sp*i)s6Pk2ze-Lt67lKvFhyjkUjVX+dnfpHzmes;ua7z`Q<-_)v>1N7f zvwjw(==aS~z_8t+=mVT&;aysH2_=AF}4}|X;WZs0_FA6)P|F_@PL>l0st9rn6sNc z+H-#=#8sp!!zzG*P*F0IXN!*tAvVy$$U!Gc_%a z6Y4jg6l@BJ^7W28+-{j4(3t{g7n)g9lq>>y9b1p*6OIFXS0K=60swNfHaP)5L$?AK zY3CpuIsR4XT5}6&&i`!jDlc}fSIS4~>sARjMo8k%5oqMD&J6<7Q(>j=?>Dj3FPNN1 zn}rY|kc>g&Nu4vCJ&jr(gXw(9?&%To7G0jL}bHk->h;K$fj z0~*^mFjzhSurzZ3Ig$XlW;)j$vlk|F%(PZN7l?V!5|{N-Q>gF^2we$kegLgK30B25 z0n(zjxWL_lO{~@qfyxOy{30-J?9t&3l{%f-2&4jVcm5_Q*OW{ZayGFLJnc_F8E&Qz z`WJm^IrvSNJ>UczlLt9Cl7qeXz?i&@Ju4UFx$5-j3dr%RiDWHQ5{ z*p?E4hj@b4cE8CrFL3nh5{s-ovt&&HyW+hB7$6TZp!Uz_fVz%?7!IRqN0{p`RmIPO z6R`ML$dO=NGfq7yHK%KD2ebhx-+ChI0%Uz800rq**x3jB_N#|ue}6IVd_K9BZI!Nk zNcEheHPHV509ry~ENi@bsyl^MA(G269q%)2X*2I{zG1)9HMseeou4bf@&iO`3)>~Z zfS3;sw%`Y?Iu*l8w2E%3=$9q>$Jp+d4#DhcMJki)lDk9l=D(oLk>OLUdhc5>U&H)k zoHzk~kC34&jwP_^C+}sjO(E${6!Gy;`F(aRPP)5ZSj{#cmP)%5Zs8Q}jN0ln|K7L~ z86WEFs43@gk$F@p=G)3a6?PU_)fX@MVA`AC_%j9Z6EUbNYows-q zZ(ASX{e~QiL@naRcL*v`vt*M~&ha=I>{}vk2ZC0TFwm9an9p80(Sg;L3xH-4uQ!eK z+&LZmkMm5a?Yge<+rRVimqBo1J*ENn#QXA~Z6WNMKj5B~NthO{8E}A7lb}-BZ@)zv zz~ow^Sy&$8P6N~CrU<)Q$*;zY`May|!vM0E$D*o*Er8YNG}{`)V(NlCshgi}vmmeV z^O$P)?Dy!kj0`zFr$^|)o`p}`ZUVXn%cE3q4F%WDTX#72%t0kPcOzOQ5WcWEq(P2* z57(2P!=Lr7^zz}Appk<)^pYhKM$Q~9n$l{Xth6tb?W`cq;QhN@b4U}MQ?HSll34Qh zmYA7t%?gzzx+|UHqLkr)*BO*e4%bD=&m9bSTc})JNWNh6*`g`Yxv#)!;26dyK6=n0 zId!+_=JtMI9cWBKTyzIYmrLQV975~)LK+v@6yBRZ1Nuj=$)&t(pb@xP;g)n`s#|;% z+mJJynZ{GO06K%}M)q|Nq_Lu$!K&|I=LDaN1Pq3oh}gcSnbpMOe0%_W)76fEtfzPG zF<=PUv#_`^1ICx1B`Xf}UR8|T=I+=uCDP(t@emXte*J7%F^lZe1OCqCOm3mJQaZ3l;uPZ z$tQGk8t>4LNw(xHxs`DARN-y_VG02#+)eR@p_to^2x2Vz(&do_lrx*>9+HW`$TCrt zlS9Ytksb|MU8OeR(x{&9^QxS#+o6F6y=G-T)|BQ=PU^5(wFx*&Xj;2pWY@!|ij)z| z2?DE0*IyaZz!eehA5#?!s533Fpt~ha5QrJCb^FB^S#_a>?AP$*SIJIe#?x{tp~?t> zpz%LTdjY6d35|*E>DyQ1LcEP=jqgx*8>?6)NM8T(m3iq>+@&aV4V><4G&j^N@Mm>S zhXNOfDK3&vI`e5^@6gE?eqJjsA#-W`oD%$ct7Se!98@%mKJrsufHUg6Aii>{zg8{# zxzG6q3yj1(1o05k@jRx+8$2FmYK@ZW-j|Zg%W$JisP;t38-3&b3YB5wc`8!|uHK10zZ;w#=d<>0?d? z3J&q`h>A5V;ku=VB%1>v|GaaVuIQZ1pe?y@;RgkT%e7*Wr;<9ECszQFmVB}gr&*G74CV^E6s1D_e zHQgq#fclmS#~4tMEXjWiN;Q%#-pTr*FqL|Bt#4Wh0WjIN?a46aNFsV|2Lz# z*Hip~nj`E9>TVB#3zelF?z2z4e7k=NCDEdFzHhc0_B;Af0tYw3TXCFWitj= zoh(qbhTlI1&4S^x3<+h|9RO^~z&5bO^qdsOibtv49H9f{Vr98zszQn3=}atiDr9{T z%x{iD!Yq=y9_PU2%O3;ELI=tN!E54le{?g#xn+0hD z7w%rdvCN)J8+VWP)MJG7D&M4G2ALw@vOxa)!kxJy`vff=Er6zBFcVIM7wJjwy zcR>53@cBJZ1B8!{3JgxBsjl2jFaP9W)IZ{5D7lOn_(o$vjT3{gEhyREPUhXdIqkxR|6Yq}fmxpu~>XAgu~n zg#vx|E-{r!tk>uq4+2E74nfil$*2Wd7Qd@CWP+&*yymUQ1!i0o0i6Se$Cvn7oy&;o z*J|L3S@Co)gnZP=I;lD01V>*o)XY+bdbVssfQajxba>_w*7qUx*M;g_G9J-&1)v0|7l|_86 z`*3_SF#%oY3p6{1-s#M_dH@;PmvW!`s%>h3dY2{67A@`L!F|+mkt|aWqCC)P`Q>ZI zTC(Udy{r=pPlSkUgKf-^@9Cu>vuM{;FS5M1GnL2LJ2e3ME@G~F%!2b^?NtwtJVP3uWDOoL5ffu=JCbFs`8Fw^qs4di`bY0e> z$!kvTWEKrM=TXN;%idd!TuPvb?2s^TJNAB4kRqT)*@UoCB~32*fKFDFTo87w;hyP; z;4J+_p)$z)-JpR5Db^Gv$R}XKL_#QeAFhxEFV!m7XP6`Lpt#jD>5y<0rj#MI^S%gY zMLnG*IeT9>g!_1_YVmV9)of3rR>G5a!IhbdkP?_);^iZuKqP>I|=$kLJmQWfgMZ+!uNMX!WAxs+Ch& zt^FwXT=@F0vNU)BWcifdPEH1w0VdW)Qi_L~w4GH@Aw{E|5lIk@A&F(sO4;}P=5~L_~Q47Ymf5##Y zfRH>siVDgXv5rVr_7u^%*Amd)namKzmTrn0Q!NXv9;Y^>=RHtOW&7Ea&)VzY{)qL?@jU0gq zj|-Ppj3)P)>}i9d5-@ok^3iTCSuE!v?y*Gixsh-7DJR-r*K&=ndanQy3@d&Ob^wky z5S7gwKaOsi*516dFwC^bl?{_*L`VPt7p1~;)j(j;v(yIpm05k7&A9Q>lXzvxuB3=Z z9kfV%u8{jhMAbfodO~F`ps$zQ{HiBf#IRT^Is9Y2%g&pp;LsY8|~s0AD5 z%E(QDTW4`a^^JxLNp3r7U+sgS||;bt&hhG7W0z zH#oAb6*x@wTf|W%kbW!gPj1RfMEGcb?!kUxhHy7#&hYTuASYu%zVLC-_QXX8YTEO1 zHQY;-X?~`Vtnzl?dR0%{t?|wMvObp(jm!5XATBtj!Zp05+>27GYm-CksmleG zD6JDlSk=}`Q@YcvM3Pj^AeAM%OYQ-xugeWEJpq}YJXQ7i33t|Js$MxmY|CylWeGpK z#hOlGU>7Ixy#aBtVg!=9tj@&1T}IB-*MwcmAl!%9P*uCLaXJrGIyx4IzTpgayFfL^ zK7PNjmD^v<7^h>7dZ3J4v-Ed^Oe7Y!=*#T1NE04MdTM>(gAaKjY~|AtZq4{!VA}}h&vrUvEory z_WT^4M_Vam8NK52WK@*`no8m9gIDRgOCnd*yn1=-iNbx`#pG^mVQya<_+%$wPj~?#NuPpLVBJ}!79iiZ5%Nb5a9!&qYWm}src8dD z)8am{Neu3Xm3cEIWov{calLUuC!dlr_jgi5(<%ILeskg$wf$=aJ%oFtaNGdian~(#Ld&qIjiR#)sgs#jwfc>s9O)0w_m~W;9W{&sLw?7<9Id*~CXqWfLeN5G1x~^#%-f)j9mah<3{$%=l zp@(6>|ARV(QnQnMFh&nCJ$MZO5?Ht|#wyQzo`1znHK7Kyt91IQsvbX2PQ~&x+p%w? zez)iE;sfUiinerV=G;No1E#@+{9UAP0`{qFIssbV-yF=_bJ%6)apC?Vb22loNgK=J zTAv0IiqVOv{^3p7ftn@r(dPmtQ{6Z>Tf0ehjA0#YqxCf9;Ap*dxJLPRtp6=!51W}5 z;`hH?)|M?zIb@9;tSNf->z|fIYGCJY0yrt_KYl%Aow&bDc#sC%unkYYZv59nDb96!WVJ=Gqra920gdE!MkQYWm0A=D^=Ckw2I;<;Ol` zST{Kvbixbx!k_~CxZecZXKcIeID(|9{@1>RNd@ra_F_pmFPi4Df6j?I_MG7IOam1X zVCs5BrjN>7!FC+EUSEIuA2a3}gT;TovSGeghvgE#RlJD1@Gu?gBzy(+zJJ^~R8_FQK-j3;S8Z|S#h=KRJ zGv%4k=@&3%C(i(tXN=KU@fUEBz7H0Z*#2&K0KD$h3e|Mc*2~%HqFp6YFX4hF+A_pm z!C%s@0?ic17H792HjZ~gXZvfQ6RmkVO#NysivNFfg&OHhYnK%{^|%=UV(kyM_8i-pOKWlP z;e|p=0;RHCrqG~U1zzrGWAFVP2!I`u!t#|ciXdFOaXs^qzetpa!tW^sSWy=E;~@D{ zmN@wdSb^|FxE+ocdr&Lf$|EM1M>As#7G7Vcw+{I`^M?BH9{A;vke<^T|JMX)n*X6` z|DUcOz`_m{TpiH~r1?j6-drO^F6O_yd`yKuHJtoZ*>rqmY$8rlW}IZ7}ED)8ndpY`6o z_|Un-G=+^r#|IYIk7su6x)WXl3anV5<1!rc856G|1T|taZz~LyZdT>@Z35P1kezUh%Uej_-6co z>^4^paECr5M@+#sg}ZN`M|=j9`;=PhEGwYsJMzV9Vkg{1aGyV&#ufyEGKX^t8V=$* zjh$J>rPK5(3k;uc^Z*l*L9lWbi#EskQ$>wCt3FKCi-@XuG=T4}yeH9D_lt1m+!y{? z{ZJCOA3!p067pLtJ%|(}K?Q2hgATcW{V)r`l9p!sRtu?-giRfU0kXHdN?1uNbD@h3 z4PASj|N1O~=(BkLlVeKog|j9>JWRhb2ScHM3>*9e2qJiveZAIypv}KRp*Q)D&Lcqt zlninKel&SuAALeDRRI!W@0V4h>w?{cf89O~_Vz@pjH$ zx@bAYVgQBTC-`fm-IDKuC8;80Ac9ASjDXwZAdoXZH+*%h`g(&D3l&+DsD@sWzaDTF zMJrdkr-});{l#rF+TR0r+QQ?z4au$uZ)3B$o|Dd)%P)TZ2*J$}yzmNsBav@|zFFR&Onkmuuo7bT<;)=!-#;HXHBbnK7e(2AeHp;n^)4tHsy9LTn2Tqok_$F z4D_xI1LJc{M8HPgtrU4!0D>R9V99o8FG@qFv{9J9JPB-RlVL~aKJUCW>&xcqA~!cAQs8{ z%>u}Ye-bK4kkfCB?G<{o9K-6AlIg`N7# zt10uKLi!&ycGJ>rNxE9eaKNjjMK~sdp8y0CnHBJOTw0rjgmr^{X~T+%L!d6x&qlE@ zWr9j!3YXG833k6PUq&~OI(>IUlbr$)y~PLp7SI~aFz?$U)`dZfA6|C!#*4(Ih{mOj zg*FO6m_=hh>)@ni%_q=lLgxyMn6ngtGw#*EzaHSSjsyW7`4iP_mC{5V=rDu|Zsq`| zB1eL$b&wBZXnU~y%H@x6?giYBbY}eeGA;~bD|DB!pD*z>z)B3T8r&y*rHc61#O7*b zMX(+<=rpBoeB;Hb%B|_%1H=UurDP7JUi(!dZS3r>gVI+D+(hcU|MF{K zc`J>yPs39r4@LSQc`^&uA0{B1Xpsu?S;mU)Hf#@4%r<}M;{c-(VWR%?7-VOHkt#0k zx!LBGZjg0-9`Z0?@q;Q}bmd8^hmjZjPaVxUEh?llmJc#4AyZ|8)lOFrRgQ2wz5<@z zuu45r1ug~f@$5~u4R$|Ja&K=VWun-A~nU`Z}KR3`B8bLDiu_SzW$!T-= zqy1X)EU5Qo{6gosz^L_Sp_`#IZ~O>>w@{@oNlbJ?4WMDR0x0niLX$h3rc~VB`qlFZUe+2_&(EDT zHta@dsQpjUe6B1OTM!Y}?>FToY(x7*`vPDJs0tB?kmBHt{U72dL44uN;sXxB*{?&& zAkx!x@cxTG2f zlE$+XkMq@-K&=Wev z#d%iKK@jVHcm#L9GCfL!XkbNEy#5c@ohNvzefpnTX4%fe4J{>|& zA;jb61W{Gwz_gW@*WBVzk7XT!^U>iN6(VVodIo=GjEE`~lmgRMd%LRX81zSnAf!GB z^0XBUr>=Kn?cY^CkU==yOQt+P;_SIzAu*HCH1_~0ntsg+= zTFA+u-C6t}$|N};M|1H;ZC!oLVk6wh6mu`-?9XaVuXG9*sI8mkj5K;eHJ! z`Q17j^e|UDVCTQ9>C>!@$-?tICz7y zZ4rsaGYs^GaY*1o?4Hr(MPs7z}? zrh8jV`m2|8fz7n5w&fe&FhxS^EI4kR#r^M*p&z|`do1h=OEaHBj*jbBe&rwf4^TlXCMOiM$Js^=J=NRM5#;GgVisFnZFEeVOKXd#S z>Cav-DNQiffU9W#sxV}5IG5*m!F?)O9}xUfnoGp`hTbOvl#_+jMX4M5*Wf(y+=%8u zWYLQhO_|NbPodB9G6#ogm1obBM4a*eaZZG$C{eARG-~AlkXa!HKMuHG9`_d_8eQYX zM@=LvQhv00h(_~r)C*NDp535jb*t<;@~HeEjri{InTZ##Wj}1ZBhi;G{48qBi!;*h z7M+Rfwus@*Oz*vJU|qDQE;3EYNdTv@`Tk7hxA((WY`yu`yPCJzoOXKUoz!0(QkbE3 z?K-_ceo09^-|!~YmNr8r{-K&U_E2Tn< z1M^fW<(H!TXN`|{dNmAw2v$s_kPj8-*i7(L7Q2++JbI#jk)4Y}A|z=Njdsl!0>M^RYwosRIpMlR!b z5`mHWLa8rCUvisx-<^ME2-}$j|ErQ2DYuX(tJ#dCd}qB!D-p?hrCsOd%J_^ zg?FyY642Ow(|l=XL1|7xKVC#NtmZn`;6Wy?=XtNLDB8Yb+LT2g z!|^lFSzF9q)l(PJNN1{p?HV;Sf#$m}_Go5Gn0zZ|oJh$>No-Y=)=&{V;QcrlqSDws22t`=bdt7AS$}-@a&1jg zh7)62j6-6xQ%Ri>wA=`5P2w|r(JGS z<-tvPWo!i)`@nZDewyZ@tsX)drAVyX%=ug(O|tTVm8c3cy8}^{HgPiFbFcydMPINTvD^<#YG5n zMmmZC{^sM})(K7wam7e4hxoy`0`=Na&8&T;NuJM$yKwJ6;E1|9ghoX_P%b7_KZ$B_ zn9omA%q~E)V} z@cVydKtCYrGK#Dz^(cKHOxMFduJ*pR)uqHCEH!7akVn{rz?(>4TG?x=`vA}XGatHI zQ(^zyPji5*424jhi<*4g^V}umU2&ods2OnUq&Vl$O{;(TT-mVHi}6g7k|ADt;|3r? zPvTF9a>V&eyko5N@(*2OI^&#W-IqcOQNmo*?aPb>=UTGkC(B?gNQZl2pKof*e7mJM zbkF9+T}jw`E%w@s5?S_XjrN#Q<%PRyxG05KiC;QcaAk)CPM7!8jL1OxJ0^z9qUTXN zN*j>nkb~YT<9&p1^~_#&3CU(6xX;I?2Q{nl%TQnx)7YvGBLuwtxsN>3o*0k)CAD>* z1u?7CG0h4mc}{CMj!g2VJ!-~i^k6g%g|6gIxTpmvNn8=A4Q)TPeuRL2*OzR4kE{f} zh;ZBS6*vjzPY;WoX?kN2Fkos68O;^ow*^7zfO+_td*km@8 znf@sW>nFapw$1|4HQ5T!agW9E4|7MOGRfMS5kG}ZbBLVdZX6?yrytIN5AO;Gj}2Sb z-Bka1C5s3Gts;fHI>ri-=e&tHD$iqhxXP*8mlRTp{D%T`D{mEtQZ`OLK8SmTnfgdy z*|x~V=>PR%{UX3LhUJ)Ek^~o}rp(oAhKF&i^Y1;TM9F%z(yaqIE$kETKbu@=UPicgl$JiJFv-eP+3 z-1m~xNx`eWTE2yzUkf>|xAQ!A9#K)gjp6gG7hPf8tq?T#*tW>I$Xqc@Ds7Ux-54)? zP z&ii67&#}7=&}95{su-}(Y^6r#1uTNg3<*W6z1u9m!DdNj?tbG!BttYn_4Ga7!p&oYEZUw z{jAQF*bp&smO)WT(o$<&XeeIR0?8J=H%Jld2I&~RpoLfA0+~I+m!!Y*tq{2d+ATjz zgu&Sx&5khemTU|sMt9rRePYIqd8Il7@#yD*-r&;_*Q`ptQM>0@+EdNUR`L6|ut767 zUTgP1*9?;?g)>sHh-JfZ(P$)%bC?Q3!SKBmEElI1v1Kfdljj+Mk#)PIzmf=g`b~v$ zw;hSSL$R6F!;z>f8Xqz2+DU;g*Mj#*ndk5iP#p?8oyUQ*B?Xq0(r2I$ONWiifO%0J zq$pU^fO}}bI}~k45=X(|abE;`VNP)P2xp%ptF5#;K<-s4)Qc7Ega))K6TF09uHD?@ zQ)C!3*U4Ekr!yp=avc>4<^sPX6YOve{AGjh6T~SX$u}rfusDc8-WY?Xr>#_JE2P$DFXf z6sv-qWKmROf|6{%b!3?8`8p3+3|Q++?Xa|h8-b+$?2_~gQjX2}1q5b!zn)g^d)edp z1NyvulG*V>`C0n0e5kARGpx1jr5_}ev#h&8M6f0WDK{Hg#dN4rXdtE8xF9F}6Nq)L zFD0cLgDp95Uf|dngaldm=5R5Zis4FpX2DrM4SY8Dw=}KOIXOK3qVzJgp;i|W0%;t) z#s^wFxF6rP>+m*^DoxHDDcX%Qvaa0H$NkvXj%tThvNtwA2LRS3`bibaN4H;wXzcWX z>7sf3{g!*I1kF7W+u5a@bkI839vAv{FQN?}MWkcU5`kKkbz8>^Q|ClF#`qW>@} z{AsSCo(?6X52JF+ZPh2&9T6)UXH-LcIsQH;!fYJTk>!VI0Is@oi{N1W2wMRf-(B7U^S->pOCNXR<9~S1M4t3KTr~v_Q$uJTsV%giAGs z3_Q3zOv4U6<8?mOm2f(Qa(?;=w#1mru?oGSPcpn-S)9i3fXIN+o5|eespHBD9xt0=ar&s@_SuX}V z^O^&BOTDXbfn8^DW(9b_QLK8C5WSNlMZ(5{6qxPEc}2H8k)8Y1aC{R9zQ~aA5W1G- zO5j_IzLkx1c1S8Z}{fob{;(hYjEC zA-tWUM|qz6s9GYo`KcyJ^;_)ORy<+Udzy5W?(m<&>@mb_rj>1VZu;2TPNybGefjih zA#H5V^<`NF*7&pkMAuly(|i!a3e2n3Kjdyua#qOU_h;+2j0890?aJF?$ov0`vj zFa;nzI3y|w6*nKesAMzW3+83GXN~MoPL@pG)bavSk+w~7RVjy*?6ZsI+kE^BnHFFX(vuY&-H^!Wo4G*XQ4Vbwf|;3xnrGGORTL%5B0YgQA8L7A z$&=TJdxHQ?_eaNq@ssg4g-89V@%eAqGO94hjB->$`a0MR2*_na50c+dlGXyA_1Ubr zK_+2{Vn+5DeQg00RQ4?A#4w0(@`Dm45>BRodhYq3@65KSEAnAhh9X}77E{5^u>-Zh zv_8?09(_>ksFuhZ8eL{q@C8xysQ7%6O3}-R$_u>Yj0^y=REI3&4BBAqvLJQXUAR{e z0pJxqpetX8O_`q=Md|4Q$ZmRV!c+z&&^or$?G2C`6+|dTeEl3$46F@+RgHyjz{HsU zf)1+WU$FN?EDx2(l2w4sk)i~gU$LmfApi4thzq#61xj)66T};nZ8Bh|hS`33eI5R1 zMtJleHkz-g{KQ=zYmmM64FS6-ak}8ICcqOWxRDyb)xqdVI0ExTM#qc`=L0(r<~EnA z%4uW?XaF+k!|NX4wn&C(I-C_9Pe7+qf~3cas1wP#Z}GD28wDNQ!x@acqqI%c3|*Yd z+9$-+Ot*{l05R*5fd10ljqQx`(+7m`q%{n3LWI-TEm?Num|T)NJOWikH+pH{^@W`%(XM1N_< zqKMh3X6MiDRk`TL{M9z` zRszAL^T*aSLQJA=nMyZIe&EqM_`))G3N{#|uN>BtOESg%}qaz!tZ8}6_mrGHh_;B%&|nfXMNQIwrfCOWZIaS=oX zPbO34m9W-z99hcYJalRJ3i3qR!uz}8b_9&e?Mr%3a zNZmGhLfb;ncyHyL!BD1FWBa3%##3WDj*9OWTnQAlgbLqs&JDH@b%D6C)1?@ziPeFX zYI;<;2*KCRkh|gQ=H-gcn=YG@?o<|okJjd?d8}@pN{L%7ZSEC3U z(Ub7W#p4z3AXR{rVTHmGZbAuO7gBnWv_4cc$pY1fMOlz60V|&)Bl4iXeE!xU$g{?bncieyM zA)%Xq?|a<=teC60kbti}u~-9XYoKK@Rgm^}VoIK%3Y{I3hdax11ubx?ye6&G-~3dl zvt9gDJKu^nGu~c`+H*MEl&EAKWDBTQ+Qr(8L-aHvAFS&K7r54}G?-k3hnjTh<0VQTvVo>{%v_%GrpOVIfrrgM--WQY_;Q#D)A2`D4oV6+Hd0= zd{HQW!p8s05GUP$H-VE%d11MRI#iVKj z36w%z<zqV%b`17`kxkpACc#RR4Gvb;V@A2mshSUn2W)Ryf0p6;1oTTy;b8zjzN$QKZ%^_Pao#G$Vhlf^Q4n^?cVPjRsD0Kbm z&~7xWM!j6hd5H3PQ!fDQpSmSn&fl9r=)jV8ZfD}&Qec#Ps@fSNCLQG|Ux z&$fQg`)(H5Y~`n)&N)fnv~nk1M-+*rC5sYYUT8Zz|CnuaTou=@NWnt#@HHMvA4H9y zPA)nQXDtbo`70N`4d%JDl!jBj2RwlHgCeR=Vn|b;EONM;mF^mbPh6C)l-tdmBfPsD zg!<*9m0Y}=eFIc+ zB9iR9oeFI)lyQxZld{Unvd)QwsqJkx13~P4YvCvEjK#HY;;Z){eX{#C)3esh$CSpq zy9utN(mxKOL?^sGGAzn$!Sk>m%IdzI)NvQ@9o87)QiyB%`Y!3&cV>O)?-cd3%Gt-+ z1`2(Xqy$VPSwpLyJ3Prq>n(ClvYkbaEB)fSGm2Opli#cFwRBjs)-5lQ8nNrtV=ID3 zi~TNx;7Ft}T?7M1AOyU#@=^v~TqYvmzj-@EG_Q6&xa@|KDF4-xE7XU7ta^j?&`|XS z1^u3LEd!GvgC;Hw%oXG&9p%y_p*4!jfu;J$!!IYPJVB|<)?u%&!sQthHpiA;)^FFP z^B*&O)W(q34kdb?L;OR544JROdI7d&@lPGR-mzofDK@cTh3t>+hLKlhybpqOh}Nw~ zcG)MHi1npQG0K)+ohX=?1r>IcT3K*49uHSmD(nh?Qf?HkUX{)N+C5a<4i)3~HMRHH zFrF*tRQtYrMlNcLT2$NY`w9{^3Y6`xp0FwRiQdMX-G%k(9~9 z_1Em!O8`OP_T2OtKe^)?aY^GIT(3dnziF*ms-4hqWlXvxtPcJ zPJ_I{Z$ju`yv)o}u;+f;mDf91fC^AOZbWf<_d9n8wCZ)r5z7c6sCEyl9Wqy-5{Z+z zeF4N-|8lLDr-dBFbKwa8j?e(gyqn~_990ihWA}rg-=LE1aq5^R5lIF{arKiAQO`xhse#Pm8SP6C` zT-Jg7ODP{TuF_}|7!p)%ZAjeTNoN4H0L1WO{Ld^`cF_;iQRVgQ8fMn2p8(M8f!Izp zlaDVWxLr8=o{?Wm!CANd2hfRKL( zxDFhW2Kd)**6!NJZ^4Ff_n3$iXd%sI@6UZj=(D-{boy=gAMASwpc7dlZoL+w4Kg+J z@@yXV0sI#kh6p5P>dXO26+66$WW3Vi!~H=UCT2`xzcq%|Er#d85*Rj-077>{r|joC zD^L4G+nHF4vYwq6yav{9CA$FxC_zwFJv)8J<%>%e2r-B z0X762s|*>W3XlePuuVv;+QBBSYd?Szhlm#8voqpOHgU&e05$DI zkj;E^0rtQ%vqh-z?Q;fLlNLG)ItqR1%w3YF+Lfh!)3ZmwS4be$rY?y=v%qT{?AT#^un-oBsKmu(9uRZh|I-uKqbo@RA2PVmuI-z zKgrCDjg>vw*V?f2btu7c@J1rhBFby_emp-nL`^*omtgA5T*7v)Jn%JB6dw4wq^ChDas+N~>n}}&QD*cjQ){|g!V`FrG*LE%p z?zQb9R{5E)G93}*ezc4QOz6tVz1|e>T>ee((h-C4@+{h}b@TfeQ2)fnnylwu9)L!j z@GRHc0VT`l!MAuhlxvE^KTOYAcEvb$ZFP03tf2Ju_FM{j1|LGtQORxkj2z-3N}dsn zY)h4ghrO&T+0LxN>Tng-q!wD|C6XERuo9nzmxDeXZEeo4qf0h_1Mbg9!~0+1y6+aa zhEk|4-d7F%rU~I;Ei8Go_|z|?oNpnc&OEQ@`d;{leNJxM?0gsy5U}o;GxcKon`R&( zgbPd`Qr17UA<@p(_;*8YyzTI?X_s7-L5AC~2blmo&+UzI6?PpxEO)?fx{P&cVWH32 z(lPM&kh%avBeyqfv_Cxnk^0=yOz6_3g5Y6pq4s-r7Lsq^!*ri-;0Nsh{$Wd_Zm*ZJ z)6)k7nC#bo`)+0*gf@RxIXVI3sl4j{jZZTcWOc}sOv{-F^eJ__OqiI6FfUBww|Be7q4!D27AhIPCP~m>%MpptUXIH<+ zx|ZJkJ=BiE7twP)&)3gOKS0ZBQjsXND?PoR%J|PGlSE4yVW-6c$5*TrTV7%>8$4po zGG!|3_lS-_Bbxa$$x2hOXYjtRyphv2W4xaA|4!4>aDik{Nw*)M<6A?YXD#o8M{F_J z`u-Mx%|`roTGbM)|5e;YTy2T{%LB8kP5;vk|7Ul@5rIm+e&vcoLH)$YY-r_V&d%}% zcG&G2HCI)BlTTK zyO*AeTG?54(SE>Ak5;IBqijMS#6T`mcBzlH{kV2 z2^__C)^YfyBTU26;Fe@=9i*ju<#&;Ddn^3C7xc0b7bDiw-s8@H6LOGxhH!@-chELt z+QH!u`512Bl!ROZ<%tg2UZvY`y+f$esdfPQ8SDoOuJ#x43&hKE?yL9ys zFDyIopMRYMp>0jXadrd`gbh--ex0W^Z2;E)pZ+F{KPE{GZG->(F{^~OX`F@+)3opHsCotwKz|}L99aJ9v?=K6Qq9(N zZXFJIFbVnNi~n{SE%4uSzh?CE5EmoQ$fF`JcJvtFp@-2jq1M~U6BGxxNW6B*A@Q$H zgI~IH!iPMC`@#L+JfnXPS;`wQo&IdS&@|vUHkNeMSq^jSkbzzE8<$eLzj}HZdb)3T z^dfaOf*@ptd}{qYhhQ!=qY>n!Hg${82#FP>CVBq(+b&`nG{>0j?c;u1P9GQ7`tya< z*zct@slyb8|442x5BN`^a}_>}rmVd983JX>_F*GJYdjI@_Z4<%++Dmnz#Bw@9&9H( z74fI1v)Q3_d-i=6RL?-Rq0vgog&3mg0M1E&b6 ziNGWLPe1`bN`mS5PWoi2Ho+cv935frmA`(peSAqip`Kv`_x^nFjPJjz%kT3=i5#`v zO?Vu+-N0XCUWWl1YMz~|Mlb>ay}(R&x9GpU{d>p;QNncM|9iNI!H3CWWo6$Dm-n8?2z<6dT7Al-fTeG2Z7~3@OLmMDiy&s9c-$OAZqCm`M3HcvE zikl=T4|b^h9IkgG3c=+NkYf1PG~}RXp^A+sRce9uC+<`F)-`l6#{xZpi4JO$qohmC z=J34zr0FMi4temUzX9&#{;o=BXee@0V$TtljzpsC@^=vB&6SNkq~;Y=_3MB^Dp@-# z4ax1f*HmUeXu8;{*p)gII^jA}SA!~$$QJUH)NDblKYswb1j0JqId{4zwbkZ|4BV&= zk%y5n@z1#j$>Q)2q4*^Fu*MTDTMf2?-3OO}1%d-tv{a-=U}l3ld8mE|iqdq1frQh}{BBQzBJnSEbC|om0(_ zi|;S1r`E*WHT5~-LyAbg$aS^U$x{|QKW9Oe{RHA3&8_gJd0BJ=x$#x6d+!<~U#?v& zHwAEmIh5}8%01l04PO44eYfO4z%2O1CEIfR69&>QWk+sbgZM`!me1k@&(VWdVkZ!1 z!v*+pjTjZcD{M<^qoRTbRP*qrqsRz!dI~v5?;EW_`rRli>H+|645WEPN~d5vkwRJ9 z42$d?>3~%>&U5HdX&SEQn`!SlASHs4>0vBtIcO)P6{T2}6p9Q2GVZ{N9&3fw6ZZcYK`dC0(=(#C9boFUy|D_wGgS zMKzH-ULAaQ`s%gMFHWBikdj7qa73%uK2K+vu28pX{X7TQ{0l#WF#eTZcc0v|h#>xv zQK?L4$UScxGl@uuAT*x$F3NQcxH{rFo}ro8I_y}>Uz1M~iu_v?vmi>%sCbP3Z*6HFbr^M_i2ThZbmdcP7=JWg@(Ey~^d8a}97yJ^6 zMYNLYb)kVQc=KT5-VFpXLQ>|Yss__%H3evAd?9a-MVwbJ0gex#kCyaRR*BC%8@Tm$ zS{llomwGn|niShg2G3OTu z9X8p#>3%h``Z{a~RT@uPZvsDWV6pr-bzT@>oEXm9T8@`7lFFE2;5>$zRlA;IT`~|5 z0AwAjBSL|aCV!FxT5qYUgm&(Q?OYl|CJ(r5ley8ZnyvUMvF z`f9i7*?_jdVRdFGr!1~fv8M97%75eRp1pL)GM3kYvdo|eOPl#dR&Nr(!r{!lV&H0a znou&$vNF1dtZmU2sn%hbxK6H8-p;w0)>DwH-Flq46H+rk>D-`?X;_-=U#{)|Lj5XLJ)3jId>rN%lKR+=-LmRp$x)I=Ye;DE;lw)! zPP|@i87FT5>&l`|B3fCnD1Ja$PnryX89nd)hfMmcQ+qM=2`*09d#gI~L=q1YL^vvu zOT!%D7ceE0a;w})eV~~6E^NQY9)|9V8`dZK!0jMmPh?on=gUi_GWq1a5f|wU#V;&bhz)(Q%r(k3L|BB(__dPm%qOKzO3mWao3&bM9RKm-onymZYQYgv{LZY zmv?rrs2S%w5b@nuK+I7@kG8mXRmSp{-MnBt|7BQdV|>rV+ZNxhv3kL$ely=D7?E{Y zR#Ggy+~T{P#$KLkmjR<#5%Ujipw|9M`D@QPPWVZG+{V!cKQ zN1OJEX*7?jQw+ISPrKO^Bg4%vm{^BNdZLy3sw|n zWzG=t*+h2zIZf{(K98J?-rVLcj(5m|dF!b)pft}D<8_(aL=ubP(w;3Ha?iB|V1*ma z<5cRr$tmtd8j*U|KAUJuGqqlf7!DheO^=8v9qjTlrV(yhYUPEZQS-=L)Q9o-&&3oJBDP!hc(I!#) z+48vXvfC~rB6uY=Vw~bg~uWp+1+QhU(@!x59Hu!|IK= zjD?89jcD_%8ntmRh`!zVdO5!|iws;skwieFW>2~X_Q>+L!V_g_u8-Oghxh06 zs55-xaZHxG2|Ga&Sovnsb7b-&wO!U`{db>W`=X+rZ3N5q5$_osY7Z(%K>6yS>YaA2 z817ZDG8Z0a;BEVYh`0H7i(x3{aP&ess{jFn9<%3c+D?SJ{y3o12;q7L}PPRFPc=bL90%J^Q6Ue)QbK_iv}FQy6?>{D*Gtq56mW#~;NH6#nbb z!C8j#fezP3f`2B_JHXc+3wa`l3a9I2$X4JmXAIa@)VT6>@1ZxLe4)w7&2ll0_C&1A zvcdcPnm2d}i5sW5Id0J3w!GTSw+@SvhgLb~22m4_$-Vbj=Eiue?`1yLOW3fcJAUn_ z_66^zkaoEwd)0xwvCG9qKs`AwjQ5j3)2*K@12_=6?)t=9f0Q#ZmN2CeiFB$2HKcU_ zLqVW0SVTP~zt`b?m`vW-IBRP@&)fmFJ#htR?#k9M37zx{1^dJFsMp0zd$~h2#F;x? z#)fy9Ucjb*QYDYmyj>GP!D3R!z{7ORMyne#+I6VzjoekuSp@F*6N9nXyhiEY2lXX5 zwfs`ubA~|FXLZ)QbonPi*YD!a3vJz>hDBN4*e1MgqDU{L? zfmpxYS{|C0!XPWS!H@C5w|M(cOc3Yl|6^)MZB+ZD(~fjq?>krHuG;vC@AfAH%k(at zRjFXrpXOP-NBOOukd8Z5!J)M7VB4V-s%nh%LMDg(n+11{1M&;Ml1=B}GVKH5t429zNT(V4J z?wbouAy@NvmcNcXAbY_zR(ti(k%3c{n5Gb};=?yf4_ws<%%*P>-K<&HV9QRv)n`=q zFoKsd6N%3sxZmt5i;3r?K9YRPT=Z+{mDvo3wPwc09jblV`vg-enqR)~dceduU{Np2 zsxLh<+z=hvRm7Hf%+x-ZeS|EOS0OFxT`|24^UXTdm~Yn3!D5`ZH|xTF&iIW<;hyBM zsA6`o0CJm`zc`7?PQGm5(v%QkJ1e~AKUvV&P{2_PM0sDwP)m|7T>FCQzenPrN{9m% z4)rUoTFvvAQ(?yen{79=UkE^2@CT{CBywQFoJ7z_!?XhlDr&+_!QHWM2kLvdY$(Z? zpDX}Cq`^uFFa)hHmFa|n!r{lMw0{NPC~4N>eNAEjL#RG^n`dzW5P9V2RGE`7YoH+A zbY1fvzweozvTXGXJNO(A!j1oq#rRN6bd*G1;y4+S~Ff!QOna_O&~?l`22d&ziS+?Ia>FU2QY zmb>!2FmI$zeGuJwBy`t2gw8FIIU^bwq3}mvyL^Xde_AxI2yZFNe64~%$cTVMe+={I zFaIr>ksv7lwn8oR|CC%OGV2Qg^mho-Rfqzdy9p?TzB%t8@Yj%|wz~l_3bC5$d>|nb zE5f$mA^Pf zm1t(v6Sl(cGz-VfJwQ_1*YtQBk39n8itoguRd*sBN@WDYDMb);n&?(9ST&)Z(9rrv zXaeB)k6i@j7<#tfCmUsjml}?jv2vKS0W#SIo`Pu+@8d7?;YSFazY=rk7SA9hYxMbc zOQsn~7juRYSU|a&m5pHaGF%e+B_uK+917;1#6&B8rz_%Kw|BNAo}XC_M0j zs(5I?5fiuTS8l^ww!uta?!VP@3BN#OgY>cep1lRxf{^&;bd>p@ZuqZugU(3;lySNT zickkjpEKgt(9A^YRZ$Eg53X$%o!Xv}J06nnp0)seMbiK>dUXJ{Gb#(Q!Au|+Om~4L zicRjE;}bwQeE9%Ebn?yzud-k`lzlP>L)-lbEvb}1e#itVtGmFzgdi{L4alOB0YU8j zi-N@89K3NZw7MRg%zWho2`LO@homMUJ>yy+_Kv?u%jMlA>=Mi`Vo1?lE(avG1>+K( zuj1#K88n*i1l0iX=RoyRuCsFNcci*i4KhNZ-hd;@xV(g!fN+!z`ANIfQ>kJQ69x%P zB2g&o@fb&#Flfl0M=K9?U3b!HJP6??xi}H>g+SybBsxw9@o$wdB=hP?z@HrgU9J@O zPD30L2}21YWDSf(Da*%T=-7I^`7F96jn-H2Wg`K{&eP?9nX+g>$w$Akxz})>=CBH$ z7?WLj>GJu4K4P?D(5h%E2XPq&9wg>BdMy1&`H0@OvjlavAdGeQ#?suhRCuWm=Y+wi z+Dk6;Di{@5b_0~L4tX3`J%wLuF^F9`F9Bki5AQCalX0a7Bn+cSt1jpnX63%BLYm<6 zhC~SdI9JEQDc*zVMEQ_n3b_*@M&^LQcCUaqB276RfwYX$c?;^8_nN~ z>@}uch!chb(Waz~U!YdF%^T_^}oq6^G5 zMJcyBvn{=tDGMhTjG*Owp8};&8RQ=V&>eH{A8xD2TfTWwfI~VLC=vNzccPNF0O5i~ z_`>0N5bh$g&nZype|Pd8m3SFYYcPn(#lG%ByXMS>u9v?~bSGN8_b^GfN`tQp;L0hu zuW<&&?-a4+$54RSRxHXxz4p$uOC{t28EdL0_0 zc8Qa~>td7e`<|SVkTQ3ej4?^wAXK*N`%Y!@);3P&`C0z4(yQ;arv?N?$=tN|r-gz3 zf637=C2VLR`a%6Q>IWd3W!2Tnzy%X|n;A-jV_4;wwrPZlL;VNus@^uWH&FM*gu6zv?s*ePVz?ITx?4!$w4DUI>zP+Aet$__R5MCSGYJf4VsU z_O{i6T&*TJ6_BFk3+dqPTPp_2L$F($Ojmn(b5tPmka+X62pb`OdWZj$uw?i*{GrXPg zpRzFtWLX6Mxk~#CskK^$^`pH0^)h#m(iMq+jDMSSqWstH;E;_2Tre3NUmXpsZY!@n zU0=Si-N)?+)R&hzQxyR=yYKO9D6HzjIpsqURb9J`(fXaSn~;ch)Q(w{c$*G_7C*&| ztJs8NOAx_;I_TNX4qU?7stW(t=bg2tbms{DUemPoA4F|Gk06R95AE2v+sz3C`6qT? zDEIJsU}$1SJ-hkwZk^K;bP-vyymj#NK!#A66Z{zz#N6hi3&+Y`63(#6GJAM;!`;Z3 zGWVeIJ8ln+t!5375(*+FF3)H7Q+eCSt3ogZ(4@=hsh;>lf;`kUZK19yEMF6xh5g)k z3UHsZn{o7p?+|LRoejR;rbz4ZSpsb;7xSksj#nOd-6rg1|GJ*_r*QdeuvWC%BDrLv zZhSIPejT7yV9?dZI&G6ZwPE;B@1T`{EYgxp#$Z*PxKhvGd~R z(Yka5rlY1Lzqkg$7eHy9#r38p+2(G_*Q{vDMHTuZ+1gudupR|C2pB^6gc@5ib|{y8 znvtN|%*Q6%AsdbCv#`n}UNvyIL-oa!)7_8Tklk>LDX}3`!p-;?p zQcZ~Cw2hehk3p|3zSrr|L8CtlM!vvEe)nPGYk)X|OFV7TN|tv+V>gAHmvvENw+D5J z6$%CE6G^(#l8eR5ZHaycd{4?O%tW(M1CZxN&E^HV)Z_c{mrTExwx8Muja@UpGxZQP zc3UsizKMEV623Jp#H5!UUD_z&OCM9TR>be+2t077&f+0=I}84jFG=2=y%eaib%*;@ zQDe8I$~)tDAgnbpI0_2mAA7&1alrSn4QUQRpZG8jblVZ+i=H8czog>WLQV-AYHX-( zX)J2&w(jb-NO^hwc?c{YmDI{8Lf^NMC6J?mprZjp>FoZ<=s3_wMwfWljvCs_p~g}? zbYMe`{RT1ZeKupwM2Jn%P?>tEZhzA^1o}RW@hH<#G&AnNXv$)yW8w*#ro>;;`o5?$ z01YNKl^$8t*tfATwkKerxyx3~{YH?R#+!sh%^ z7!v#;Q2XT60!NqNvRV=zVPcvd_!0~C49Q-B8SfM zil%;s!BhD1yNHi#v!B47guvx7(}(Y*jnPc>uL^2dfWCSU9#IFC`DZRuiy20y9E8o) z`TUCOua*M5p@3Y6=m9qO%=d!P{h6By*Y3+RrVXB6X`09Hj~NmK2{d_caLL`n5q2mx zqRsnqkZ^*9E~rq5|J^{fc`e(JjdUKOq2GhjHn`K?D4pyF$n-)o(|J;KmT6ao55&Uk zpb$)($3l2TH~7Heb!_3})H}BtxElEWoaky}LbGiFSa%o``(yI4B{#t|fe+tQ-}QOs zN~;dnrl~BnchqBs2+K5Tth%6;Y%~uOc8p z6hjvXMd?L)5fSWk5Cv31?}|zjfzYHwD52w-#eUzt_qnd~UgyL4az6b1CNNoRO=i~2 zJkNdqo*s>B)zbi55XA>6jgkI`3M%y<&?2rt0QUh(KNKPUzTGeXbGsuS|G(?q!jIO# zsAmh3wk{_(HE6h*8C18%q<||63+xwi0l91kyurX3rmPH<21F33Wq>SU-%Jlh0Kh{Y z25_Njdw{pxQuInl%Ucy!#?t-UGI(Z1-M_0vQF7Mr}(Y zYZEf6XPKw(hA}vBJ{Gn3`JiuxHO!U9*4)ShmKk{5+W8co#$HwG`$!_%rqQ6H$w`XRd=fh!^c^ zH6R)k0i+TF;d_vO28tBXf>4VavwzGR6XhaM(f#}Y(2+0~g&$`lT_}lVU}FC(JfHu3 z17t83u(MMlmx)95o?ttQDAc(Zras7);^<+W6IzJvN-A<>(|B^cN79Oi`c%*|c%OD3 z@*hBg9>azGOyMbctC+6;Fg6S{21eDVETV9Nrg{;yTwa~hwjgGI9QayHaiGq?Sqopq zN7t&ov0UJ-^$$-&Skr&X#Mpoc(R(oo@ZCrQAF z{+gB_JCM}uR&9mI|XBi}w75<_LYlJ!GQaRu#>h#>VI z1F@qaoTgxksld|LpSNDWode)#aK<2lg^vM(#;i+S0u&6}uR3fepcHchP%lZ}{0kcm z714@-k&gvVaE`)2>1hKHBvdiK+>N(UR{*$ZuuCRDp0vwAVl^N!^pGtY&JATX*L(X< z`aK6E&R*<@&+jIAkhuTzXqfiC(4H4aif7*p_@>9krgDsx&9s`a}u8Od%a2jIP2vP#T}5>RaFIm=p2+bZ_f@dP?sG_#31V@ z1QwR|=Mk#(hWI2tIItGB%+vnJ1`;sBZ{R>WENcNyJb6>j;}3;%V7Mzppg53h*49rx zujJE>lTXYB?-I|z@8z%X`_DgKzgi7YjWyy1@t23yJAt~ZhZjl*e#U2llJ-i5Zye7( zkvd$|^8$YPev0N+lK*IJI;pzx{aTo_C&rD@+|ZFWnYhi(V8QxFITVmQESPgJIc8VJ zgB?9pO%n^hZ-N7r;7E&aaG3ID!hX^py}Kh&L=~JmcyCVI5Lmu;K21I<{*=yk9iT1r z;42Upv$}O3sH@l@Iyiq#7et!g0HkR$5MRlUM2I|dAGrT%_tzo4{(zGe{c`-*T@bhe zoM{kJ0ktiv`7z+kq}7)$!PmwTMS|2@k1+Tls3cTFu{9XpIF6?~;6Za=TnvnzX`T^& z8Y1ljwnq8vT8CagCPxe9;fCp_g zY~_V~%mtb*k_mRwUbuNcT0S}E$?s7}{WBhs@?D5}15og*T(5O%CU()g2bB95BxHV$ zicn)$UIEN2(hXah!Ih*@u6P?m8l$-j1W)NBCa1`)wd@DXpG6g8zCO)*nQM3YOIE(ELw;+96ZDeSDa zK^Z8St}1a8$%ez4wO*DVbkMpdd5}}J4;GC#oTsvC&#vc&DU6gmME)|&*VTcujNDW< z?&3*+kk?^i#kDe+lFyW1YZ_0U;>fX7HfFb~xJym<=Y-dQeI$)?dfN*7s#2e$$ESTV zH8AP2yK7@79y?-IzS~7wEj7&Vg0xeO;Jz;dw#IKDt z;ZG*1&h=&f1*-;;h_64hF=653gA>bCBSy`^aQ>A>g#9`TvYAWg3aY)@2@0M>i+PbC ztj++)*xOT65F$S*c8U$jf?(6J>Fb~i9>Wnh$yrWb<`+sFyr)ItNH(!wo!(^o0fCJ7 z@0r|#_2*mlA%SZYN4~Zu$Y2RGl72(B$GntR*)538H14YAE2V#fsggLqnWAvZsP6yD6J7fRD`5V z*T;$o%ojTJ6$G@Q4fuqgF(dBF{4l!4a$4+-E@d{f>F>BwcaidOys5HJ8-hRbDC-*> zZ8<^AGHItfLRi~yk&@MOrLs6c+$t99NPGl__#RKOK$N5M?aCAtR;q+d>X9n}Toj(WMFzoKIg`Rm+4>+G?<4h>dMyN6!phd~x@!Cxh7UQoBJf z3(*PiW({P%9x1J@)3@?qg4AfP*diChvdPat%UvX=>MJ0R@b2WK=kM~{2Nh%Be}{U7 zKfu4n>M`?&IiK~}OT0on)@Z@lJV=>{Z3^wqYCGW8Stwk&OO56)Hq){pu%YnsVZmnr z_&1bfapr7snvceoRL_-+iN)b>=YV=kF9})yL96n$`GbjNu89Fs=<*7w_L>dH)(>d!RaZkiK^Iys*^^gpAKX(Hdx z_o+37#e6}3aRmicZPU+qj7s`2RqdT(nwi?9vyH{snVyDnQ52H4GRk5&Ya}1;7ecBs zW#=-x{qf(OR-yO9RI>lVUvJ=D&;E_S&Oxf~fY;dBNAH+Nl)mrX0*bMpvjfQ5r`B5p zwmH_Y8M|e%-K#wy?V9(>b#4=_7RoD#6Vr^1gCRZ1pcq~q|{ zY;B=|qCzuMzaw0Y3)h$u3hAcp0=O2lI62f;zqJ6^hvxkCCv4L;qS2Rd zzlM-Sp|n@16*Rd}4y=ahiDya6^;LN#e^`sHhO94foPU9pocd9Ywg6qETA4EKbo_qL zLC$`*=ra{g+Ars-3F%)<=@X*jQ7@5JYq|;Xi^JCpsu`SPox;R45gMkhcm`e&*|&vw zwO(=@UU(S2!s;86tpmt`dff8xapyK0spM@f>pzrt`Z<;7SOMXYM;4=He@76zKK^Ur zx+pLN*3($22JF}jEXE>ce*FFmnoWkF*?ou5>po#3YxOk;YLgG~%Q*qe5v(=a7xn+q>L; zQv_GSQx$05oxup!|4at9B=A`Xk@Z<~y8b}9Ny+SggK-{6SNjAbH`C@Y< z75+qCg{Uo~Z3`DN3CyL!YpZ!cf4OSs93~bLQuj8L)&z)bN#1y|iOBmEIX{@V{9k2>c~QcI-KLxVFTl0MN79mx#A zRsn&nTOFFo!z`iMQSApt1Pj_RpmmSOn&+Dt$!$o)3VU=ifX#&>q(jja6 z^n90#Qz1|`4~EIOBJqwY_Lo8)@Y!P?287FycNxp{SAoLB;pSU8a@Dwa=W!E-=h|mN zeM&hb$zfn7%nNJF(Pki+H!y;MxAdxIVrRFKhsw%%xvxe#uTB!DI{wAl?l@)P`tx!k zzl_?1SrhwxvLDlHPZ$1Isc)qZn_&Rn1qr`_o!R7g+mRwYuy4 zTZy3z%Ph6EqVphdl>WTXp?@88lX>*Q+p)aqDdjX$nXsE^LDX_1_8EdrKI{If{%zqQ zCys4Ka4=0`D|odsJH0DdT*~ogIJvX%7ES5>&?)TPLep;=1EiG_`3B>oR=d&!q|CWi z9={W$I6cxnoDxHYotHb*Qm*xhui4&=6 z5p7)eL8XR9N#n*Ud;jc9oa6cm82OiaFeBo28`C|Ot@VlBur=oMj8Cy$YqRVh7OeaO zuR<*Ey*lnW_EWLm{GF*-Bi3F~&#QBO`6!7p+SD?u@479-_`OK%cij+p-X-!iY6;2@ zX2lDqUcX^v>iObPmf{pMVbqHGDPk{WrK^d5nHg`|C$42Sr2hdhPpP}D-c~Lo$m2BH zj%8td2rjbD5q;*25BHSCEEF{(?^Ey|-+FP~kBcFvtirj9n|L8WyW@w_kn?0~0+jfC z=;w=k!~U=kQRcAa&it`+80D4>LA(_TWN1xd|Au(qI)r%Zu~&M*9p%q5JpZK#=oN<$ zZ@tI53CyBC-)uBbcg!k{ZeNB{zY{dF0#vuOUTs%5`Qcy0E(AKa15eRLvnX-dj|8`8 zMM+v)UG{gJbnNW^tebb<;nxJ53a%Q&MXSXp`ameyn|6I??c427nRUhe+w1eYg5n@T z+SR@8Uo>C&+Zh~sq=!?#m`)?~Z0Q|w#wk|5vp6$G57_(UPM9Ro_=Y=6ouCU`*h*eG z4Rh612U;LmKH!H|NoOBNAPD+8rZV$1)ay3<-Gi#0A4TRFhO{E>Ps$eY-%Tj7+zHuC z4@Bp~hojQ0oYEb~|D5q+KJKS9IMFtqRY^bSES<(5vT}u(oqxN#Xfpc8_d>S;@sLOz z{~hk#L>FG(ldT~DAHSmBiaN4l%rumR=ObhVj;T10x+@V_`tY~M4Lifbo#KjKZkRvs zBuujBsSL_uxA_j)--{8CK$mw%Ixfi`Q!rkE*xyV$067h@zkj}WmLd)E;Q3hUK0+ zVF_N1LtxJ1pAAk=b(vfhLhqW<$XdNY%a6g2{yzI7=WTQ94I!1mwk^9BUMkIWg_{{_ z-p|5%%=1->Fu3PU+YIKHIXmbJOk zo&5gtd$CR2)?C{vOu1|#*6Q20S~?Jt z;@0lx3gf}{Nw6X;^~B&TP8~$|x=e-7!%U+KwW%ZRSQBHqabjPMN=5I%)>qfAH9jEA ze9t0{W-j~H}ElqCCyGP z$!--3hL_G~AfAa@Q|o;ynL$TCR%{xz(-v-tUy;3|@8B*4mX^qo-2DY-Dqf2hOr&Nn z_0>FMHMHy~L|OL*7~!Wa>6O%eCP`m!GcF>AI=q^^@H9#JYNk)#WpGk?h*NUG1xM_t zXCN?8&zSd~k3cLARk7XDA^6IR^?2*!l z8~S=YM8oNuOlenx@~DD1+F-w=Dv!i}TV*37$NJ9DBktG2hAMqdH@K~?no-81Xp z9f6TPK&Xf9D)vEvCMQa?`9j;$l(@Rjp z!|XoZDoBOfN@9e3OntDh!LPn?>XK?|I$xF?RUL7k==G`#)mm$VR-*ZozbSfSwpIem zu#GtD1O&<~A1}M7>iCpP+D>~oHRaOXP`>E~9zbJCzy}xZ>%LTRFwhwrr?B&EQ&eovjzlT|sdVZp_}+trr_S!B&BRkDmPM@NZuU zoW+Cn4N3Hm?>L#mUS&KcD3C|z7n%X!qhk#dnuHW)?{slCIKsM0lr2GjOE~3Mai3dn zjKK8G^m%Zkd){f`enSzcR63*?s-8k3PQjC-01PD%PAG{N$hxnfi-YGKg^C`~tG#l@ z^uq4jf1=K;&txfD5Y~9sXMVw~TlEIn_GTT(xlfJR_x*iKf^(sF2CA;OqMxIflkW2@ zf6N2NXrYLCn5=_=nMy;s{!?zvjjd`^F^j>D zu%tbh#+-M*2@>$(PLnKkkQBVe-nqjs0wgB2?R5mgfH+>Y@Q0I@UrmY%o}it7h{pBb?TI~v~b)6P<7{%;5mlNbTOM5SJ z?EA+6;Q`P7+@>Ybd|$dM;unB~h#akq*D=Cznb$4a1RCblbw>OA4Oaao>xQdjv|kMQpG#!Y=^s3bX15(GkC z@vp63%_fYmpV|MWFLjDuqoLinMEUqA`)_C4XMUrAs6EfxuzeE}ZC&g*08*Z&Hx0-8 zogz&(PqL-_U?~C<<1~07$|eG*)$eL~6!VRZ>N|V7XKCV4Vk^_~u3Z(+2g`P*&H@pH zOfUHwB!W-{U*a~_y~e2fPJ@2?M^PC|`3tOxr))e}XwSpo-A+{wyaN#3oHo$-r$}rg zG5UquOg5o%G4FL_%;A&Gnt?Ui9vI}#y}An#zt^6)#!#PgI4Yr8UA7oZH6bmN=Nw1i zmTa;)8BBf0%z$-l?DpNu>W6!+?N@pA8T#Iw=ABS<#uc z%z$O$2noOirE`S0KpG65rIPkRf1B&EmZ`LJQ5mcO%!W+F(K9V!j+J4q;BLNT1I?B_ zo@USo`O<7+j0~mCNLhWCkM{%7prBCnPmsQ_6WVwq4vJb3A(k#MX!}-!3N}I+N3z)U za*j|h0m-Gp*yHQfRR?!g_j}LEE+1;MfCl5`@6UjlcT#K0RO%A2j|Q)?k*N7jLnua- zms$C~AZgNsz6?1^t5@5_Xu8>+dEso@E=Na%mNiFnFahS}qk-i^8*?YfIiU_+^FXZ1 zqtLEFG@pB!;5T7mY77cN)!hDQ{em|b2SPSY?#Qg&EY(h^JgzOUl}0a1lx=xmt-f7S ze~d(LTt*3{NIm_u%iNrZfUPPHsT--5FLYz4(uyHjQy|wf_dT^jto#1G$=!l~b5H<$ zuO}D~>Q906k^~7BULPHuvTz*=`U-!DmI1lXauFlvbjOqua0H6*oM_hRSpW+Ui;lFP z%{Ly&<3OSlcx!S<9gI7+qV_$nX)+Nf#OGUPJI#$c#kgXIox~cPWG~j3^eYyG`-J$St#%=+! z1qhDSAX|cG(B0#b%PiAXUYe9pDf`bUqJzwO5Awg9J9Yt0cSHI#ZG}Ei#k3z3+-A=! z!sqhyMagU8&mU-r0G{2=oxXlr=&rqM0`Q6jD}9$&ZWquemU#Np`$@4By^UWRDnrbW z*M3SwK&51|yoX!>Q->mDQdQH)EZ-e?3WyG0iQIU{#qwp>8ZdeF>6}j zXZ9F>NWXBS9}KM#AZ%M4OB4O4JpUKho@EB51q2{wzIpfs^L{eX7FeW@Lkn+oi2#Wo zX|k~ZfD!bNjJb3C4{-Q2Q9nfUG$0!G_MU_?9EbAN6C`i{Eh|u~VZ28{=2ea-dW6)% z%PV`ADe$3Zx0G!s+S2Xr=oR};7b>(Dnt#&zU^NvdK%uCF@Q0KHo$Hpa=qnAJmkL*b zVdJ!rT0T504$>_^@ClEneuwps!D~Rr8=d{ec@`#C`^({oK~<+r2Oi3Y1o#5^3+<`Bl%Nnx8Z&(Z)VXd? z3!yymp{xV=DczYHE$)NhYKuyii`%h@?hgqc<1w+rA{9_A=E!@V^a5Vby?=82KFGF7dhglTiw?u{9GwcrG3BL-+aW8XP%$d2 z9vX^fIoD3qv@%k^(=0L6j?1uFAqmZF%$3xPyECG&_DDvtn*>q~ebjnsmEScaiy&7A zO@t9~NF$B)2g|?5K?Xt2;6sWfb+DCRAYfOorzQMh`?RIg*uc@4C3%sDj+Kn5_K{H3 z3jngwdq@ExQ7T(6pf;xIqjibf19BFwa!ZtPt9i^3n@q#A4f{YR9-#ih@kCy*4XRv` z66qo3J~ktyO-H!{64^e?DsR~dVVxte^FyV8&fatfSprHZ7%s@Bzk_HDaAy5P1$+z8 z&9ZF{e`BTo3FP4%J((>C@2r?Cxt(Zr?azD;a~yu#pjO1T$Sd7A9&X8CI?71YE5z%_ zGdp#y0#S{*`yeMD)9)#%W&pIize==kl8Ahz8u5i?+uUlx`3jWWL>P^##EM3+G^!Q{ z)}!<%@1c>D|3wWHs%iit2S(Xx0p+&nZqpM^(fovixS&0IW~YTuhuL_LRAg*Y97ZNc z*}X|Bn5cn(7|lLj1X|%n>#tVLZ#cBHS8b<(5hx}VC6Aniog?SlMRQK1(jWMN8rG1G zWDmKP8;9;3g$iH<&WuqVe^buO0F9k3eyV&A7Y4%vc;HIt3MjVC-|aGe)G$iQ26N5W zN41x)TaFf(d4}qJz)buHnVF>Or$N;CEv+!*YurhsBvgr7SThplz#n%`o&9Y^?*&7D z{v0W7DYb^znPqPTcEHOaTZB)69ILX?2Kqm!acuypjM+loZu{2ZiQ*Ct>xUyBZZgGP zm(_ibOF({v!L$Y48xYSI=pZaYLs8Ar$+&0&;&BCBlAEhrVIrDVxePbCQf*f`3{~0_ z>6>W)suXEMCQ(_RMesJx5uucByvV2x6T?Va zD>izNaT3))Lo;MJC`&$z7N-*e!o*K)}+z2 zWz{g8r1eG?&Sc$8S4vB>C6JZGzh$dl!(koEqTfuzS6c|PpT1N!N$Y$O`RV(4C7gkS zj!J+psPK|Gm&$e>;)jRY|FiH9d?O&H4*`jMI}sw7R!AR0D+MV(4Ht-YjY$~*o>78G z%uo)U-4w+q{%KwdSBFq5??k>ITQd@HTFDXUMF@2boB{BDEJWMw*3iYq!z5fmBH5I= zDe^R)GevtBY*aXbmcQuX5-|gU?fZ_3@Gi@QvmxWq{7v7@=IbXjI6Z2mAIVqWv21_R ztrs#m*qqdLuQGj_q%Kee>D1WUEyWTM<&i}Wkt*6sn!IreIV5v?cRlu1VExJOe>{1a zJ?DI2tf&0xr{eP*+|ep)M{~aCip%;Lv^#Z0Fzn!kIrIsSgJdOeemA5WB}P1(LsUKi zoX-LEJ5(RZpTHA`;iycHfVnOamECIBD#KeiB;}j^ok#5Py8?TzYAaI3wz_{-jAX6L z!e8hO%fewlFZ24F&%W+AjyvpPAQ}DVK@SojtR!3%f~C^-@rni5spTW~+6)320s5(! zqVXXWoo}Q2TYfIcu~Ti@virV6qNY)Q<%s|nDZW&%B8MoA&SL7p5HqznC?CZe?DUFk zGw0ZoWqSLQxo(4vQS8VBcofw~oxW8-k)#_p_cTi4WEg+AUb>%j?ad8kyeM-D)>89c zQbAod%vFJp)m2s|xUQH{k z`nk0?j-?y+sj?cC-7MTU#o+E-z85N-o85k2`{Owm2#WdySkb zP=+`anKqfOlia7DtgW%o(wHA!ZGTB7c^?=SVs>e0y99^JIf{)LQ(&B$W}Lr5`;*Yu za2nqZt|=GeKMHgr-8QYm=Q#R0Ln~bD}oQWbS8XC%Q4g6PzA8am zl;{2I>WiV_T$T-|Ntc?8=W*Ng-q1wGMphxF1IKmE zd&rFfXN#2GGAbJ}RL0}>OOj_^RgLSmEIgZ3uhf*BZ_+gthTD{5m}=a%u;rVDjTg~j zcDz`We#;++2A3r4+h0n*F8&&%Hg>Sf0k+5R+L)42C?0MVv03@`tHGd3kv83!_+=h% zGUeJ=KC^aAm;cS=fOLd+*)^ui2BvjF6d-7$qyYa%(dA6j?{}bXh^HWq*!tyBKW##r zmA=gJ@|B`4iA;qO=lGIA-xSTTq$g-sDd&#@Gv>bx6bC>&%Ee<*b+~@%e2#%;_~xK9 z!aT3($dMCG=e0GAazCUBJc2n3T|84G%tm?$>slJ@WK|!31~wxy2a)qv%TV3#1+~*k z9Av)qt)Ydb8*^@uM}+iqtd(*2*FqhE^y-n%>)v%K(=BKfp6HBw!&a5<_db089c(j? z+*jyuZQ->JpFN=PyLgE6|A1{eVSMxkBRZ7b9MBB{hRkay?uf=co7>2ou82qn(el%N zpSA;DU(f5LJe9OeABYtBO8l zvV#hKv8*^Te)w*9<3xR&qd5=4ucu}Q2ItAYGN1P`}wSUgfAm3V(&0!vg}=i{ znW56~IR2*ceIShXr;jL-Ydqn1X;y8d8*G*ptu&7fSF|MTzg<}FG;bH^=()8yJf5yQ z=~gx9LFsHNJF+;)d&uF zj{89xuDZ1lQ+T^CCZ@LMB}1dyVD7aS>sX-d_;kv?h22R!Y**lNdc*9(kGsrpuV*8* z<0Aazr@h8$1@qr{#uwgy=#08+#9&r9FW5w&>xf8j)15Qs@C%STv^5m{^I9~wrVo=M zzN~Z(bxJ4RvoF2OYex45R8cfs`BB~&dRTQ*zQ4aj>wOQ%{RZ*)AXjFwfkyQl3u2Q0W&cM`RaU?Eg>D*3R_6V(MV!; zHC{%1xuV=5S}wJjPyq`Lm6|Z$c}PMY>EXz6nA0dB89um!P=$F>Gd+#X_h>zpiCKKz z#CeX_RXmegWU+Yir1ss_z8_4HINO&|zO$~z1B7@|uwS43x%V;MLhe(F<7p^um64l- zF2y^-98VM1t`p5_cyS5@77t-!8(w!JZ`y4b9myfv9DCNau8-5b!jQgP7t44(o+Wc( z*-6><(w6LEQ(4{sS41Pbol6gfml;0SOTH-zST0&C^LC92z8Qt(#4kqO%MKpa?X4N@{LdcO zW#ACV8uW6#ebg60C9&`^t!O!W7)STdi-W;PL)i6L8)CNBIbqw(${a19EQN6*?tql|BrzZNoJW#9#wL;z#W7e*Uu1VgjVNs z`|w+!d-u`b*)$@m3D+{@@Mritunn#k6Z04Jj*h%V*J>(EnCaqV85V3EhiPwgpX9Nt z4TJU6$DY3BME`=*Kx)J)Hsk!R`F4D;P4k+m-{mDNsHCI$fI#szT11e<#;Y+SNgUXy zeG+MaM{Ay}Zuh?MwDl^rW^VP9zCwBI9Wo7y79vG(YFlwR)2ym>y4w)E7RM)0Z} z?cOKylEm`_ZWxtF0!|YX>{tRPOP11)$lf_^8<-q?@jl3=X78ScKm4hBeR1A^Kl}BA zF<%==SP_lg$y<@?x%|l#c=))Q@-~Q7JhfLT@idGiO^-`j`mYY zpODk$+pU+`-4loss@9!5SrhU3)uspCTMrM9RJDNprEh)Hm}>HjJh-Hd4s^v=$N%AG zmqy8BS**rCH#L85^8CENJ+vw2vEMzl{4vBe?zYznN@`Eg>i%<<_L~UP#RGS^@hyW!cle$Qyut-;OGN=*5pcyH4G7nG?lN8-8=nsf7)yp zxs>1)>B5#@BoV)FlP*{tTl>!1%1UClW(bYc1NOC?{odCtIBRi&eH1093?q*j@xD*TxmeK#0{&G+q3IXo2jlr zLDR7t@_N5utjo5o=IDZC4ebf_2Ss~zRS95vab4i=%<)lYuoNsHjS zqNR>~Yv}wMjZJ+JS}^8ol8-|Mp8yvC=3vbSM<^(BDMMa6@u`pXhhxuL9xNKzdYlOh zeU};b*_&ds$6IL`4P7CErv5q`f{(9yWRQwsHBlQ)jUH+kGaJGp z>db>FroVpx&DWX-V;Oat(|Z5Zjjjmu41_x|&7V9Z;nW5q{~ zq!|2n;|0)|d_0{Oy5irLenbZ=YU2F73g*dQ_k!Syw^YY=S@Ex-{{0g$(mW~ZD{)k& zs{h@%3^X1Ta|ry;$H5RH5`5LH9!ENa|GTj_MZKI~SZCbf!~S(8P#n8|{DjT+e>ZLg zjh%|)w~_z38TBXC55~-EDKNSJ-FOf*USN??`>!YYf9=FAiU<<|&4^w(-4XEbyv}9q JB2Al+{{{2Q5Iz6^ diff --git a/_attic/modules/docs/graphics/tx.png b/_attic/modules/docs/graphics/tx.png deleted file mode 100644 index 7318c43a10ab955273b32d957f75182909c257f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15202 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 m1;7zrfPa&2; } -_shunit_error() { echo "shunit2:ERROR $@" >&2; } -_shunit_fatal() { echo "shunit2:FATAL $@" >&2; exit ${SHUNIT_ERROR}; } - -# determine some reasonable command defaults -__SHUNIT_UNAME_S=`uname -s` -case "${__SHUNIT_UNAME_S}" in - BSD) __SHUNIT_EXPR_CMD='gexpr' ;; - *) __SHUNIT_EXPR_CMD='expr' ;; -esac - -# commands a user can override if needed -SHUNIT_EXPR_CMD=${SHUNIT_EXPR_CMD:-${__SHUNIT_EXPR_CMD}} - -# enable strict mode by default -SHUNIT_STRICT=${SHUNIT_STRICT:-${SHUNIT_TRUE}} - -# specific shell checks -if [ -n "${ZSH_VERSION:-}" ]; then - setopt |grep "^shwordsplit$" >/dev/null - if [ $? -ne ${SHUNIT_TRUE} ]; then - _shunit_fatal 'zsh shwordsplit option is required for proper operation' - fi - if [ -z "${SHUNIT_PARENT:-}" ]; then - _shunit_fatal "zsh does not pass \$0 through properly. please declare \ -\"SHUNIT_PARENT=\$0\" before calling shUnit2" - fi -fi - -# -# constants -# - -__SHUNIT_ASSERT_MSG_PREFIX='ASSERT:' -__SHUNIT_MODE_SOURCED='sourced' -__SHUNIT_MODE_STANDALONE='standalone' -__SHUNIT_PARENT=${SHUNIT_PARENT:-$0} - -# set the constants readonly -__shunit_constants=`set |grep '^__SHUNIT_' |cut -d= -f1` -echo "${__shunit_constants}" |grep '^Binary file' >/dev/null && \ - __shunit_constants=`set |grep -a '^__SHUNIT_' |cut -d= -f1` -for __shunit_const in ${__shunit_constants}; do - if [ -z "${ZSH_VERSION:-}" ]; then - readonly ${__shunit_const} - else - case ${ZSH_VERSION} in - [123].*) readonly ${__shunit_const} ;; - *) readonly -g ${__shunit_const} # declare readonly constants globally - esac - fi -done -unset __shunit_const __shunit_constants - -# -# internal variables -# - -# variables -__shunit_lineno='' # line number of executed test -__shunit_mode=${__SHUNIT_MODE_SOURCED} # operating mode -__shunit_reportGenerated=${SHUNIT_FALSE} # is report generated -__shunit_script='' # filename of unittest script (standalone mode) -__shunit_skip=${SHUNIT_FALSE} # is skipping enabled -__shunit_suite='' # suite of tests to execute - -# counts of tests -__shunit_testSuccess=${SHUNIT_TRUE} -__shunit_testsTotal=0 -__shunit_testsPassed=0 -__shunit_testsFailed=0 - -# counts of asserts -__shunit_assertsTotal=0 -__shunit_assertsPassed=0 -__shunit_assertsFailed=0 -__shunit_assertsSkipped=0 - -# macros -_SHUNIT_LINENO_='eval __shunit_lineno=""; if [ "${1:-}" = "--lineno" ]; then [ -n "$2" ] && __shunit_lineno="[$2] "; shift 2; fi' - -#----------------------------------------------------------------------------- -# private functions - -#----------------------------------------------------------------------------- -# assert functions -# - -# Assert that two values are equal to one another. -# -# Args: -# message: string: failure message [optional] -# expected: string: expected value -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertEquals() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "assertEquals() requires two or three arguments; $# given" - _shunit_error "1: ${1:+$1} 2: ${2:+$2} 3: ${3:+$3}${4:+ 4: $4}" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - shunit_expected_=$1 - shunit_actual_=$2 - - shunit_return=${SHUNIT_TRUE} - if [ "${shunit_expected_}" = "${shunit_actual_}" ]; then - _shunit_assertPass - else - failNotEquals "${shunit_message_}" "${shunit_expected_}" "${shunit_actual_}" - shunit_return=${SHUNIT_FALSE} - fi - - unset shunit_message_ shunit_expected_ shunit_actual_ - return ${shunit_return} -} -_ASSERT_EQUALS_='eval assertEquals --lineno "${LINENO:-}"' - -# Assert that two values are not equal to one another. -# -# Args: -# message: string: failure message [optional] -# expected: string: expected value -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertNotEquals() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "assertNotEquals() requires two or three arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - shunit_expected_=$1 - shunit_actual_=$2 - - shunit_return=${SHUNIT_TRUE} - if [ "${shunit_expected_}" != "${shunit_actual_}" ]; then - _shunit_assertPass - else - failSame "${shunit_message_}" "$@" - shunit_return=${SHUNIT_FALSE} - fi - - unset shunit_message_ shunit_expected_ shunit_actual_ - return ${shunit_return} -} -_ASSERT_NOT_EQUALS_='eval assertNotEquals --lineno "${LINENO:-}"' - -# Assert that a value is null (i.e. an empty string) -# -# Args: -# message: string: failure message [optional] -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertNull() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 1 -o $# -gt 2 ]; then - _shunit_error "assertNull() requires one or two arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - assertTrue "${shunit_message_}" "[ -z '$1' ]" - shunit_return=$? - - unset shunit_message_ - return ${shunit_return} -} -_ASSERT_NULL_='eval assertNull --lineno "${LINENO:-}"' - -# Assert that a value is not null (i.e. a non-empty string) -# -# Args: -# message: string: failure message [optional] -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertNotNull() -{ - ${_SHUNIT_LINENO_} - if [ $# -gt 2 ]; then # allowing 0 arguments as $1 might actually be null - _shunit_error "assertNotNull() requires one or two arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - shunit_actual_=`_shunit_escapeCharactersInString "${1:-}"` - test -n "${shunit_actual_}" - assertTrue "${shunit_message_}" $? - shunit_return=$? - - unset shunit_actual_ shunit_message_ - return ${shunit_return} -} -_ASSERT_NOT_NULL_='eval assertNotNull --lineno "${LINENO:-}"' - -# Assert that two values are the same (i.e. equal to one another). -# -# Args: -# message: string: failure message [optional] -# expected: string: expected value -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertSame() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "assertSame() requires two or three arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - assertEquals "${shunit_message_}" "$1" "$2" - shunit_return=$? - - unset shunit_message_ - return ${shunit_return} -} -_ASSERT_SAME_='eval assertSame --lineno "${LINENO:-}"' - -# Assert that two values are not the same (i.e. not equal to one another). -# -# Args: -# message: string: failure message [optional] -# expected: string: expected value -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertNotSame() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "assertNotSame() requires two or three arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_:-}$1" - shift - fi - assertNotEquals "${shunit_message_}" "$1" "$2" - shunit_return=$? - - unset shunit_message_ - return ${shunit_return} -} -_ASSERT_NOT_SAME_='eval assertNotSame --lineno "${LINENO:-}"' - -# Assert that a value or shell test condition is true. -# -# In shell, a value of 0 is true and a non-zero value is false. Any integer -# value passed can thereby be tested. -# -# Shell supports much more complicated tests though, and a means to support -# them was needed. As such, this function tests that conditions are true or -# false through evaluation rather than just looking for a true or false. -# -# The following test will succeed: -# assertTrue 0 -# assertTrue "[ 34 -gt 23 ]" -# The following test will fail with a message: -# assertTrue 123 -# assertTrue "test failed" "[ -r '/non/existent/file' ]" -# -# Args: -# message: string: failure message [optional] -# condition: string: integer value or shell conditional statement -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertTrue() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 1 -o $# -gt 2 ]; then - _shunit_error "assertTrue() takes one or two arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - shunit_condition_=$1 - - # see if condition is an integer, i.e. a return value - shunit_match_=`expr "${shunit_condition_}" : '\([0-9]*\)'` - shunit_return=${SHUNIT_TRUE} - if [ -z "${shunit_condition_}" ]; then - # null condition - shunit_return=${SHUNIT_FALSE} - elif [ -n "${shunit_match_}" -a "${shunit_condition_}" = "${shunit_match_}" ] - then - # possible return value. treating 0 as true, and non-zero as false. - [ ${shunit_condition_} -ne 0 ] && shunit_return=${SHUNIT_FALSE} - else - # (hopefully) a condition - ( eval ${shunit_condition_} ) >/dev/null 2>&1 - [ $? -ne 0 ] && shunit_return=${SHUNIT_FALSE} - fi - - # record the test - if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then - _shunit_assertPass - else - _shunit_assertFail "${shunit_message_}" - fi - - unset shunit_message_ shunit_condition_ shunit_match_ - return ${shunit_return} -} -_ASSERT_TRUE_='eval assertTrue --lineno "${LINENO:-}"' - -# Assert that a value or shell test condition is false. -# -# In shell, a value of 0 is true and a non-zero value is false. Any integer -# value passed can thereby be tested. -# -# Shell supports much more complicated tests though, and a means to support -# them was needed. As such, this function tests that conditions are true or -# false through evaluation rather than just looking for a true or false. -# -# The following test will succeed: -# assertFalse 1 -# assertFalse "[ 'apples' = 'oranges' ]" -# The following test will fail with a message: -# assertFalse 0 -# assertFalse "test failed" "[ 1 -eq 1 -a 2 -eq 2 ]" -# -# Args: -# message: string: failure message [optional] -# condition: string: integer value or shell conditional statement -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -assertFalse() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 1 -o $# -gt 2 ]; then - _shunit_error "assertFalse() quires one or two arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - shunit_condition_=$1 - - # see if condition is an integer, i.e. a return value - shunit_match_=`expr "${shunit_condition_}" : '\([0-9]*\)'` - shunit_return=${SHUNIT_TRUE} - if [ -z "${shunit_condition_}" ]; then - # null condition - shunit_return=${SHUNIT_FALSE} - elif [ -n "${shunit_match_}" -a "${shunit_condition_}" = "${shunit_match_}" ] - then - # possible return value. treating 0 as true, and non-zero as false. - [ ${shunit_condition_} -eq 0 ] && shunit_return=${SHUNIT_FALSE} - else - # (hopefully) a condition - ( eval ${shunit_condition_} ) >/dev/null 2>&1 - [ $? -eq 0 ] && shunit_return=${SHUNIT_FALSE} - fi - - # record the test - if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then - _shunit_assertPass - else - _shunit_assertFail "${shunit_message_}" - fi - - unset shunit_message_ shunit_condition_ shunit_match_ - return ${shunit_return} -} -_ASSERT_FALSE_='eval assertFalse --lineno "${LINENO:-}"' - -#----------------------------------------------------------------------------- -# failure functions -# - -# Records a test failure. -# -# Args: -# message: string: failure message [optional] -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -fail() -{ - ${_SHUNIT_LINENO_} - if [ $# -gt 1 ]; then - _shunit_error "fail() requires zero or one arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 1 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - - _shunit_assertFail "${shunit_message_}" - - unset shunit_message_ - return ${SHUNIT_FALSE} -} -_FAIL_='eval fail --lineno "${LINENO:-}"' - -# Records a test failure, stating two values were not equal. -# -# Args: -# message: string: failure message [optional] -# expected: string: expected value -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -failNotEquals() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "failNotEquals() requires one or two arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - shunit_expected_=$1 - shunit_actual_=$2 - - _shunit_assertFail "${shunit_message_:+${shunit_message_} }expected:<${shunit_expected_}> but was:<${shunit_actual_}>" - - unset shunit_message_ shunit_expected_ shunit_actual_ - return ${SHUNIT_FALSE} -} -_FAIL_NOT_EQUALS_='eval failNotEquals --lineno "${LINENO:-}"' - -# Records a test failure, stating two values should have been the same. -# -# Args: -# message: string: failure message [optional] -# expected: string: expected value -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -failSame() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "failSame() requires two or three arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - - _shunit_assertFail "${shunit_message_:+${shunit_message_} }expected not same" - - unset shunit_message_ - return ${SHUNIT_FALSE} -} -_FAIL_SAME_='eval failSame --lineno "${LINENO:-}"' - -# Records a test failure, stating two values were not equal. -# -# This is functionally equivalent to calling failNotEquals(). -# -# Args: -# message: string: failure message [optional] -# expected: string: expected value -# actual: string: actual value -# Returns: -# integer: success (TRUE/FALSE/ERROR constant) -failNotSame() -{ - ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "failNotEquals() requires one or two arguments; $# given" - return ${SHUNIT_ERROR} - fi - _shunit_shouldSkip && return ${SHUNIT_TRUE} - - shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_}$1" - shift - fi - failNotEquals "${shunit_message_}" "$1" "$2" - shunit_return=$? - - unset shunit_message_ - return ${shunit_return} -} -_FAIL_NOT_SAME_='eval failNotSame --lineno "${LINENO:-}"' - -#----------------------------------------------------------------------------- -# skipping functions -# - -# Force remaining assert and fail functions to be "skipped". -# -# This function forces the remaining assert and fail functions to be "skipped", -# i.e. they will have no effect. Each function skipped will be recorded so that -# the total of asserts and fails will not be altered. -# -# Args: -# None -startSkipping() -{ - __shunit_skip=${SHUNIT_TRUE} -} - -# Resume the normal recording behavior of assert and fail calls. -# -# Args: -# None -endSkipping() -{ - __shunit_skip=${SHUNIT_FALSE} -} - -# Returns the state of assert and fail call skipping. -# -# Args: -# None -# Returns: -# boolean: (TRUE/FALSE constant) -isSkipping() -{ - return ${__shunit_skip} -} - -#----------------------------------------------------------------------------- -# suite functions -# - -# Stub. This function should contains all unit test calls to be made. -# -# DEPRECATED (as of 2.1.0) -# -# This function can be optionally overridden by the user in their test suite. -# -# If this function exists, it will be called when shunit2 is sourced. If it -# does not exist, shunit2 will search the parent script for all functions -# beginning with the word 'test', and they will be added dynamically to the -# test suite. -# -# This function should be overridden by the user in their unit test suite. -# Note: see _shunit_mktempFunc() for actual implementation -# -# Args: -# None -#suite() { :; } # DO NOT UNCOMMENT THIS FUNCTION - -# Adds a function name to the list of tests schedule for execution. -# -# This function should only be called from within the suite() function. -# -# Args: -# function: string: name of a function to add to current unit test suite -suite_addTest() -{ - shunit_func_=${1:-} - - __shunit_suite="${__shunit_suite:+${__shunit_suite} }${shunit_func_}" - __shunit_testsTotal=`expr ${__shunit_testsTotal} + 1` - - unset shunit_func_ -} - -# Stub. This function will be called once before any tests are run. -# -# Common one-time environment preparation tasks shared by all tests can be -# defined here. -# -# This function should be overridden by the user in their unit test suite. -# Note: see _shunit_mktempFunc() for actual implementation -# -# Args: -# None -#oneTimeSetUp() { :; } # DO NOT UNCOMMENT THIS FUNCTION - -# Stub. This function will be called once after all tests are finished. -# -# Common one-time environment cleanup tasks shared by all tests can be defined -# here. -# -# This function should be overridden by the user in their unit test suite. -# Note: see _shunit_mktempFunc() for actual implementation -# -# Args: -# None -#oneTimeTearDown() { :; } # DO NOT UNCOMMENT THIS FUNCTION - -# Stub. This function will be called before each test is run. -# -# Common environment preparation tasks shared by all tests can be defined here. -# -# This function should be overridden by the user in their unit test suite. -# Note: see _shunit_mktempFunc() for actual implementation -# -# Args: -# None -#setUp() { :; } - -# Note: see _shunit_mktempFunc() for actual implementation -# Stub. This function will be called after each test is run. -# -# Common environment cleanup tasks shared by all tests can be defined here. -# -# This function should be overridden by the user in their unit test suite. -# Note: see _shunit_mktempFunc() for actual implementation -# -# Args: -# None -#tearDown() { :; } # DO NOT UNCOMMENT THIS FUNCTION - -#------------------------------------------------------------------------------ -# internal shUnit2 functions -# - -# Create a temporary directory to store various run-time files in. -# -# This function is a cross-platform temporary directory creation tool. Not all -# OSes have the mktemp function, so one is included here. -# -# Args: -# None -# Outputs: -# string: the temporary directory that was created -_shunit_mktempDir() -{ - # try the standard mktemp function - ( exec mktemp -dqt shunit.XXXXXX 2>/dev/null ) && return - - # the standard mktemp didn't work. doing our own. - if [ -r '/dev/urandom' -a -x '/usr/bin/od' ]; then - _shunit_random_=`/usr/bin/od -vAn -N4 -tx4 "${_shunit_file_}" -#! /bin/sh -exit ${SHUNIT_TRUE} -EOF - chmod +x "${_shunit_file_}" - done - - unset _shunit_file_ -} - -# Final cleanup function to leave things as we found them. -# -# Besides removing the temporary directory, this function is in charge of the -# final exit code of the unit test. The exit code is based on how the script -# was ended (e.g. normal exit, or via Ctrl-C). -# -# Args: -# name: string: name of the trap called (specified when trap defined) -_shunit_cleanup() -{ - _shunit_name_=$1 - - case ${_shunit_name_} in - EXIT) _shunit_signal_=0 ;; - INT) _shunit_signal_=2 ;; - TERM) _shunit_signal_=15 ;; - *) - _shunit_warn "unrecognized trap value (${_shunit_name_})" - _shunit_signal_=0 - ;; - esac - - # do our work - rm -fr "${__shunit_tmpDir}" - - # exit for all non-EXIT signals - if [ ${_shunit_name_} != 'EXIT' ]; then - _shunit_warn "trapped and now handling the (${_shunit_name_}) signal" - # disable EXIT trap - trap 0 - # add 128 to signal and exit - exit `expr ${_shunit_signal_} + 128` - elif [ ${__shunit_reportGenerated} -eq ${SHUNIT_FALSE} ] ; then - _shunit_assertFail 'Unknown failure encountered running a test' - _shunit_generateReport - exit ${SHUNIT_ERROR} - fi - - unset _shunit_name_ _shunit_signal_ -} - -# The actual running of the tests happens here. -# -# Args: -# None -_shunit_execSuite() -{ - for _shunit_test_ in ${__shunit_suite}; do - __shunit_testSuccess=${SHUNIT_TRUE} - - # disable skipping - endSkipping - - # execute the per-test setup function - setUp - - # execute the test - echo "${_shunit_test_}" - eval ${_shunit_test_} - - # execute the per-test tear-down function - tearDown - - # update stats - if [ ${__shunit_testSuccess} -eq ${SHUNIT_TRUE} ]; then - __shunit_testsPassed=`expr ${__shunit_testsPassed} + 1` - else - __shunit_testsFailed=`expr ${__shunit_testsFailed} + 1` - fi - done - - unset _shunit_test_ -} - -# Generates the user friendly report with appropriate OK/FAILED message. -# -# Args: -# None -# Output: -# string: the report of successful and failed tests, as well as totals. -_shunit_generateReport() -{ - _shunit_ok_=${SHUNIT_TRUE} - - # if no exit code was provided one, determine an appropriate one - [ ${__shunit_testsFailed} -gt 0 \ - -o ${__shunit_testSuccess} -eq ${SHUNIT_FALSE} ] \ - && _shunit_ok_=${SHUNIT_FALSE} - - echo - if [ ${__shunit_testsTotal} -eq 1 ]; then - echo "Ran ${__shunit_testsTotal} test." - else - echo "Ran ${__shunit_testsTotal} tests." - fi - - _shunit_failures_='' - _shunit_skipped_='' - [ ${__shunit_assertsFailed} -gt 0 ] \ - && _shunit_failures_="failures=${__shunit_assertsFailed}" - [ ${__shunit_assertsSkipped} -gt 0 ] \ - && _shunit_skipped_="skipped=${__shunit_assertsSkipped}" - - if [ ${_shunit_ok_} -eq ${SHUNIT_TRUE} ]; then - _shunit_msg_='OK' - [ -n "${_shunit_skipped_}" ] \ - && _shunit_msg_="${_shunit_msg_} (${_shunit_skipped_})" - else - _shunit_msg_="FAILED (${_shunit_failures_}" - [ -n "${_shunit_skipped_}" ] \ - && _shunit_msg_="${_shunit_msg_},${_shunit_skipped_}" - _shunit_msg_="${_shunit_msg_})" - fi - - echo - echo ${_shunit_msg_} - __shunit_reportGenerated=${SHUNIT_TRUE} - - unset _shunit_failures_ _shunit_msg_ _shunit_ok_ _shunit_skipped_ -} - -# Test for whether a function should be skipped. -# -# Args: -# None -# Returns: -# boolean: whether the test should be skipped (TRUE/FALSE constant) -_shunit_shouldSkip() -{ - [ ${__shunit_skip} -eq ${SHUNIT_FALSE} ] && return ${SHUNIT_FALSE} - _shunit_assertSkip -} - -# Records a successful test. -# -# Args: -# None -_shunit_assertPass() -{ - __shunit_assertsPassed=`expr ${__shunit_assertsPassed} + 1` - __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` -} - -# Records a test failure. -# -# Args: -# message: string: failure message to provide user -_shunit_assertFail() -{ - _shunit_msg_=$1 - - __shunit_testSuccess=${SHUNIT_FALSE} - __shunit_assertsFailed=`expr ${__shunit_assertsFailed} + 1` - __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` - echo "${__SHUNIT_ASSERT_MSG_PREFIX}${_shunit_msg_}" - - unset _shunit_msg_ -} - -# Records a skipped test. -# -# Args: -# None -_shunit_assertSkip() -{ - __shunit_assertsSkipped=`expr ${__shunit_assertsSkipped} + 1` - __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` -} - -# Prepare a script filename for sourcing. -# -# Args: -# script: string: path to a script to source -# Returns: -# string: filename prefixed with ./ (if necessary) -_shunit_prepForSourcing() -{ - _shunit_script_=$1 - case "${_shunit_script_}" in - /*|./*) echo "${_shunit_script_}" ;; - *) echo "./${_shunit_script_}" ;; - esac - unset _shunit_script_ -} - -# Escape a character in a string. -# -# Args: -# c: string: unescaped character -# s: string: to escape character in -# Returns: -# string: with escaped character(s) -_shunit_escapeCharInStr() -{ - [ -n "$2" ] || return # no point in doing work on an empty string - - # Note: using shorter variable names to prevent conflicts with - # _shunit_escapeCharactersInString(). - _shunit_c_=$1 - _shunit_s_=$2 - - - # escape the character - echo ''${_shunit_s_}'' |sed 's/\'${_shunit_c_}'/\\\'${_shunit_c_}'/g' - - unset _shunit_c_ _shunit_s_ -} - -# Escape a character in a string. -# -# Args: -# str: string: to escape characters in -# Returns: -# string: with escaped character(s) -_shunit_escapeCharactersInString() -{ - [ -n "$1" ] || return # no point in doing work on an empty string - - _shunit_str_=$1 - - # Note: using longer variable names to prevent conflicts with - # _shunit_escapeCharInStr(). - for _shunit_char_ in '"' '$' "'" '`'; do - _shunit_str_=`_shunit_escapeCharInStr "${_shunit_char_}" "${_shunit_str_}"` - done - - echo "${_shunit_str_}" - unset _shunit_char_ _shunit_str_ -} - -# Extract list of functions to run tests against. -# -# Args: -# script: string: name of script to extract functions from -# Returns: -# string: of function names -_shunit_extractTestFunctions() -{ - _shunit_script_=$1 - - # extract the lines with test function names, strip of anything besides the - # function name, and output everything on a single line. - _shunit_regex_='^[ ]*(function )*test[A-Za-z0-9_]* *\(\)' - egrep "${_shunit_regex_}" "${_shunit_script_}" \ - |sed 's/^[^A-Za-z0-9_]*//;s/^function //;s/\([A-Za-z0-9_]*\).*/\1/g' \ - |xargs - - unset _shunit_regex_ _shunit_script_ -} - -#------------------------------------------------------------------------------ -# main -# - -# determine the operating mode -if [ $# -eq 0 ]; then - __shunit_script=${__SHUNIT_PARENT} - __shunit_mode=${__SHUNIT_MODE_SOURCED} -else - __shunit_script=$1 - [ -r "${__shunit_script}" ] || \ - _shunit_fatal "unable to read from ${__shunit_script}" - __shunit_mode=${__SHUNIT_MODE_STANDALONE} -fi - -# create a temporary storage location -__shunit_tmpDir=`_shunit_mktempDir` - -# provide a public temporary directory for unit test scripts -# TODO(kward): document this -SHUNIT_TMPDIR="${__shunit_tmpDir}/tmp" -mkdir "${SHUNIT_TMPDIR}" - -# setup traps to clean up after ourselves -trap '_shunit_cleanup EXIT' 0 -trap '_shunit_cleanup INT' 2 -trap '_shunit_cleanup TERM' 15 - -# create phantom functions to work around issues with Cygwin -_shunit_mktempFunc -PATH="${__shunit_tmpDir}:${PATH}" - -# make sure phantom functions are executable. this will bite if /tmp (or the -# current $TMPDIR) points to a path on a partition that was mounted with the -# 'noexec' option. the noexec command was created with _shunit_mktempFunc(). -noexec 2>/dev/null || _shunit_fatal \ - 'please declare TMPDIR with path on partition with exec permission' - -# we must manually source the tests in standalone mode -if [ "${__shunit_mode}" = "${__SHUNIT_MODE_STANDALONE}" ]; then - . "`_shunit_prepForSourcing \"${__shunit_script}\"`" -fi - -# execute the oneTimeSetUp function (if it exists) -oneTimeSetUp - -# execute the suite function defined in the parent test script -# deprecated as of 2.1.0 -suite - -# if no suite function was defined, dynamically build a list of functions -if [ -z "${__shunit_suite}" ]; then - shunit_funcs_=`_shunit_extractTestFunctions "${__shunit_script}"` - for shunit_func_ in ${shunit_funcs_}; do - suite_addTest ${shunit_func_} - done -fi -unset shunit_func_ shunit_funcs_ - -# execute the tests -_shunit_execSuite - -# execute the oneTimeTearDown function (if it exists) -oneTimeTearDown - -# generate the report -_shunit_generateReport - -# that's it folks -[ ${__shunit_testsFailed} -eq 0 ] -exit $? diff --git a/_attic/modules/docs/ibc.rst b/_attic/modules/docs/ibc.rst deleted file mode 100644 index f7f523ec69..0000000000 --- a/_attic/modules/docs/ibc.rst +++ /dev/null @@ -1,425 +0,0 @@ -InterBlockchain Communication with Basecoin -=========================================== - -One of the most exciting elements of the Cosmos Network is the -InterBlockchain Communication (IBC) protocol, which enables -interoperability across different blockchains. We implemented IBC as a -basecoin plugin, and we'll show you how to use it to send tokens across -blockchains! - -Please note, this tutorial assumes you are familiar with `Basecoin -plugins `__, but we'll explain how IBC -works. You may also want to see `our repository of example -plugins `__. - -The IBC plugin defines a new set of transactions as subtypes of the -``AppTx``. The plugin's functionality is accessed by setting the -``AppTx.Name`` field to ``"IBC"``, and setting the ``Data`` field to the -serialized IBC transaction type. - -We'll demonstrate exactly how this works below. - -IBC ---- - -Let's review the IBC protocol. The purpose of IBC is to enable one -blockchain to function as a light-client of another. Since we are using -a classical Byzantine Fault Tolerant consensus algorithm, light-client -verification is cheap and easy: all we have to do is check validator -signatures on the latest block, and verify a Merkle proof of the state. - -In Tendermint, validators agree on a block before processing it. This -means that the signatures and state root for that block aren't included -until the next block. Thus, each block contains a field called -``LastCommit``, which contains the votes responsible for committing the -previous block, and a field in the block header called ``AppHash``, -which refers to the Merkle root hash of the application after processing -the transactions from the previous block. So, if we want to verify the -``AppHash`` from height H, we need the signatures from ``LastCommit`` at -height H+1. (And remember that this ``AppHash`` only contains the -results from all transactions up to and including block H-1) - -Unlike Proof-of-Work, the light-client protocol does not need to -download and check all the headers in the blockchain - the client can -always jump straight to the latest header available, so long as the -validator set has not changed much. If the validator set is changing, -the client needs to track these changes, which requires downloading -headers for each block in which there is a significant change. Here, we -will assume the validator set is constant, and postpone handling -validator set changes for another time. - -Now we can describe exactly how IBC works. Suppose we have two -blockchains, ``chain1`` and ``chain2``, and we want to send some data -from ``chain1`` to ``chain2``. We need to do the following: 1. Register -the details (ie. chain ID and genesis configuration) of ``chain1`` on -``chain2`` 2. Within ``chain1``, broadcast a transaction that creates an -outgoing IBC packet destined for ``chain2`` 3. Broadcast a transaction -to ``chain2`` informing it of the latest state (ie. header and commit -signatures) of ``chain1`` 4. Post the outgoing packet from ``chain1`` to -``chain2``, including the proof that it was indeed committed on -``chain1``. Note ``chain2`` can only verify this proof because it has a -recent header and commit. - -Each of these steps involves a separate IBC transaction type. Let's take -them up in turn. - -IBCRegisterChainTx -~~~~~~~~~~~~~~~~~~ - -The ``IBCRegisterChainTx`` is used to register one chain on another. It -contains the chain ID and genesis configuration of the chain to -register: - -.. code:: golang - - type IBCRegisterChainTx struct { BlockchainGenesis } - - type BlockchainGenesis struct { ChainID string Genesis string } - -This transaction should only be sent once for a given chain ID, and -successive sends will return an error. - -IBCUpdateChainTx -~~~~~~~~~~~~~~~~ - -The ``IBCUpdateChainTx`` is used to update the state of one chain on -another. It contains the header and commit signatures for some block in -the chain: - -.. code:: golang - - type IBCUpdateChainTx struct { - Header tm.Header - Commit tm.Commit - } - -In the future, it needs to be updated to include changes to the -validator set as well. Anyone can relay an ``IBCUpdateChainTx``, and -they only need to do so as frequently as packets are being sent or the -validator set is changing. - -IBCPacketCreateTx -~~~~~~~~~~~~~~~~~ - -The ``IBCPacketCreateTx`` is used to create an outgoing packet on one -chain. The packet itself contains the source and destination chain IDs, -a sequence number (i.e. an integer that increments with every message -sent between this pair of chains), a packet type (e.g. coin, data, -etc.), and a payload. - -.. code:: golang - - type IBCPacketCreateTx struct { - Packet - } - - type Packet struct { - SrcChainID string - DstChainID string - Sequence uint64 - Type string - Payload []byte - } - -We have yet to define the format for the payload, so, for now, it's just -arbitrary bytes. - -One way to think about this is that ``chain2`` has an account on -``chain1``. With a ``IBCPacketCreateTx`` on ``chain1``, we send funds to -that account. Then we can prove to ``chain2`` that there are funds -locked up for it in it's account on ``chain1``. Those funds can only be -unlocked with corresponding IBC messages back from ``chain2`` to -``chain1`` sending the locked funds to another account on ``chain1``. - -IBCPacketPostTx -~~~~~~~~~~~~~~~ - -The ``IBCPacketPostTx`` is used to post an outgoing packet from one -chain to another. It contains the packet and a proof that the packet was -committed into the state of the sending chain: - -.. code:: golang - - type IBCPacketPostTx struct { - FromChainID string // The immediate source of the packet, not always Packet.SrcChainID - FromChainHeight uint64 // The block height in which Packet was committed, to check Proof Packet - Proof *merkle.IAVLProof - } - -The proof is a Merkle proof in an IAVL tree, our implementation of a -balanced, Merklized binary search tree. It contains a list of nodes in -the tree, which can be hashed together to get the Merkle root hash. This -hash must match the ``AppHash`` contained in the header at -``FromChainHeight + 1`` - -- note the ``+ 1`` is necessary since ``FromChainHeight`` is the height - in which the packet was committed, and the resulting state root is - not included until the next block. - -IBC State -~~~~~~~~~ - -Now that we've seen all the transaction types, let's talk about the -state. Each chain stores some IBC state in its Merkle tree. For each -chain being tracked by our chain, we store: - -- Genesis configuration -- Latest state -- Headers for recent heights - -We also store all incoming (ingress) and outgoing (egress) packets. - -The state of a chain is updated every time an ``IBCUpdateChainTx`` is -committed. New packets are added to the egress state upon -``IBCPacketCreateTx``. New packets are added to the ingress state upon -``IBCPacketPostTx``, assuming the proof checks out. - -Merkle Queries --------------- - -The Basecoin application uses a single Merkle tree that is shared across -all its state, including the built-in accounts state and all plugin -state. For this reason, it's important to use explicit key names and/or -hashes to ensure there are no collisions. - -We can query the Merkle tree using the ABCI Query method. If we pass in -the correct key, it will return the corresponding value, as well as a -proof that the key and value are contained in the Merkle tree. - -The results of a query can thus be used as proof in an -``IBCPacketPostTx``. - -Relay ------ - -While we need all these packet types internally to keep track of all the -proofs on both chains in a secure manner, for the normal work-flow, we -can run a relay node that handles the cross-chain interaction. - -In this case, there are only two steps. First ``basecoin relay init``, -which must be run once to register each chain with the other one, and -make sure they are ready to send and recieve. And then -``basecoin relay start``, which is a long-running process polling the -queue on each side, and relaying all new message to the other block. - -This requires that the relay has access to accounts with some funds on -both chains to pay for all the ibc packets it will be forwarding. - -Try it out ----------- - -Now that we have all the background knowledge, let's actually walk -through the tutorial. - -Make sure you have installed `basecoin and -basecli `__. - -Basecoin is a framework for creating new cryptocurrency applications. It -comes with an ``IBC`` plugin enabled by default. - -You will also want to install the -`jq `__ for handling JSON at the command -line. - -If you have any trouble with this, you can also look at the `test -scripts `__ or just run ``make test_cli`` in basecoin -repo. Otherwise, open up 5 (yes 5!) terminal tabs.... - -Preliminaries -~~~~~~~~~~~~~ - -:: - - # first, clean up any old garbage for a fresh slate... - rm -rf ~/.ibcdemo/ - -Let's start by setting up some environment variables and aliases: - -:: - - export BCHOME1_CLIENT=~/.ibcdemo/chain1/client - export BCHOME1_SERVER=~/.ibcdemo/chain1/server - export BCHOME2_CLIENT=~/.ibcdemo/chain2/client - export BCHOME2_SERVER=~/.ibcdemo/chain2/server - alias basecli1="basecli --home $BCHOME1_CLIENT" - alias basecli2="basecli --home $BCHOME2_CLIENT" - alias basecoin1="basecoin --home $BCHOME1_SERVER" - alias basecoin2="basecoin --home $BCHOME2_SERVER" - -This will give us some new commands to use instead of raw ``basecli`` -and ``basecoin`` to ensure we're using the right configuration for the -chain we want to talk to. - -We also want to set some chain IDs: - -:: - - export CHAINID1="test-chain-1" - export CHAINID2="test-chain-2" - -And since we will run two different chains on one machine, we need to -maintain different sets of ports: - -:: - - export PORT_PREFIX1=1234 - export PORT_PREFIX2=2345 - export RPC_PORT1=${PORT_PREFIX1}7 - export RPC_PORT2=${PORT_PREFIX2}7 - -Setup Chain 1 -~~~~~~~~~~~~~ - -Now, let's create some keys that we can use for accounts on -test-chain-1: - -:: - - basecli1 keys new money - basecli1 keys new gotnone - export MONEY=$(basecli1 keys get money | awk '{print $2}') - export GOTNONE=$(basecli1 keys get gotnone | awk '{print $2}') - -and create an initial configuration giving lots of coins to the $MONEY -key: - -:: - - basecoin1 init --chain-id $CHAINID1 $MONEY - -Now start basecoin: - -:: - - sed -ie "s/4665/$PORT_PREFIX1/" $BCHOME1_SERVER/config.toml - - basecoin1 start &> basecoin1.log & - -Note the ``sed`` command to replace the ports in the config file. You -can follow the logs with ``tail -f basecoin1.log`` - -Now we can attach the client to the chain and verify the state. The -first account should have money, the second none: - -:: - - basecli1 init --node=tcp://localhost:${RPC_PORT1} --genesis=${BCHOME1_SERVER}/genesis.json - basecli1 query account $MONEY - basecli1 query account $GOTNONE - -Setup Chain 2 -~~~~~~~~~~~~~ - -This is the same as above, except with ``basecli2``, ``basecoin2``, and -``$CHAINID2``. We will also need to change the ports, since we're -running another chain on the same local machine. - -Let's create new keys for test-chain-2: - -:: - - basecli2 keys new moremoney - basecli2 keys new broke - MOREMONEY=$(basecli2 keys get moremoney | awk '{print $2}') - BROKE=$(basecli2 keys get broke | awk '{print $2}') - -And prepare the genesis block, and start the server: - -:: - - basecoin2 init --chain-id $CHAINID2 $(basecli2 keys get moremoney | awk '{print $2}') - - sed -ie "s/4665/$PORT_PREFIX2/" $BCHOME2_SERVER/config.toml - - basecoin2 start &> basecoin2.log & - -Now attach the client to the chain and verify the state. The first -account should have money, the second none: - -:: - - basecli2 init --node=tcp://localhost:${RPC_PORT2} --genesis=${BCHOME2_SERVER}/genesis.json - basecli2 query account $MOREMONEY - basecli2 query account $BROKE - -Connect these chains -~~~~~~~~~~~~~~~~~~~~ - -OK! So we have two chains running on your local machine, with different -keys on each. Let's hook them up together by starting a relay process to -forward messages from one chain to the other. - -The relay account needs some money in it to pay for the ibc messages, so -for now, we have to transfer some cash from the rich accounts before we -start the actual relay. - -:: - - # note that this key.json file is a hardcoded demo for all chains, this will - # be updated in a future release - RELAY_KEY=$BCHOME1_SERVER/key.json - RELAY_ADDR=$(cat $RELAY_KEY | jq .address | tr -d \") - - basecli1 tx send --amount=100000mycoin --sequence=1 --to=$RELAY_ADDR--name=money - basecli1 query account $RELAY_ADDR - - basecli2 tx send --amount=100000mycoin --sequence=1 --to=$RELAY_ADDR --name=moremoney - basecli2 query account $RELAY_ADDR - -Now we can start the relay process. - -:: - - basecoin relay init --chain1-id=$CHAINID1 --chain2-id=$CHAINID2 \ - --chain1-addr=tcp://localhost:${RPC_PORT1} --chain2-addr=tcp://localhost:${RPC_PORT2} \ - --genesis1=${BCHOME1_SERVER}/genesis.json --genesis2=${BCHOME2_SERVER}/genesis.json \ - --from=$RELAY_KEY - - basecoin relay start --chain1-id=$CHAINID1 --chain2-id=$CHAINID2 \ - --chain1-addr=tcp://localhost:${RPC_PORT1} --chain2-addr=tcp://localhost:${RPC_PORT2} \ - --from=$RELAY_KEY &> relay.log & - -This should start up the relay, and assuming no error messages came out, -the two chains are now fully connected over IBC. Let's use this to send -our first tx accross the chains... - -Sending cross-chain payments -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The hard part is over, we set up two blockchains, a few private keys, -and a secure relay between them. Now we can enjoy the fruits of our -labor... - -:: - - # Here's an empty account on test-chain-2 - basecli2 query account $BROKE - -:: - - # Let's send some funds from test-chain-1 - basecli1 tx send --amount=12345mycoin --sequence=2 --to=test-chain-2/$BROKE --name=money - -:: - - # give it time to arrive... - sleep 2 - # now you should see 12345 coins! - basecli2 query account $BROKE - -You're no longer broke! Cool, huh? Now have fun exploring and sending -coins across the chains. And making more accounts as you want to. - -Conclusion ----------- - -In this tutorial we explained how IBC works, and demonstrated how to use -it to communicate between two chains. We did the simplest communciation -possible: a one way transfer of data from chain1 to chain2. The most -important part was that we updated chain2 with the latest state (i.e. -header and commit) of chain1, and then were able to post a proof to -chain2 that a packet was committed to the outgoing state of chain1. - -In a future tutorial, we will demonstrate how to use IBC to actually -transfer tokens between two blockchains, but we'll do it with real -testnets deployed across multiple nodes on the network. Stay tuned! diff --git a/_attic/modules/docs/index.rst b/_attic/modules/docs/index.rst deleted file mode 100644 index 77f41c985f..0000000000 --- a/_attic/modules/docs/index.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. Cosmos-SDK documentation master file, created by - sphinx-quickstart on Fri Sep 1 21:37:02 2017. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to the Cosmos SDK! -====================================== - -.. image:: graphics/cosmos-sdk-image.png - :height: 250px - :width: 500px - :align: center - -.. toctree:: - :maxdepth: 2 - - overview.rst - install.rst - basecoin-basics.rst - basecoin-tool.rst - key-management.rst - roles-and-multi-sig.rst - basecoin-plugins.rst - basecoin-kubernetes.rst - ibc.rst - glossary.rst - stdlib.rst diff --git a/_attic/modules/docs/install.rst b/_attic/modules/docs/install.rst deleted file mode 100644 index 5c606c0f44..0000000000 --- a/_attic/modules/docs/install.rst +++ /dev/null @@ -1,35 +0,0 @@ -Install -======= - -If you aren't used to compile go programs and just want the released -version of the code, please head to our -`downloads `__ page to get a -pre-compiled binary for your platform. - -Usually, Cosmos SDK can be installed like a normal Go program: - -:: - - go get -u github.com/cosmos/cosmos-sdk/cmd/... - -If the dependencies have been updated with breaking changes, or if -another branch is required, ``glide`` is used for dependency management. -Thus, assuming you've already run ``go get`` or otherwise cloned the -repo, the correct way to install is: - -:: - - cd $GOPATH/src/github.com/tendermint/basecoin - git pull origin master - make all - -This will create the ``basecoin`` binary in ``$GOPATH/bin``. -``make all`` implies ``make get_vendor_deps`` and uses ``glide`` to -install the correct version of all dependencies. It also tests the code, -including some cli tests to make sure your binary behaves properly. - -If you need another branch, make sure to run ``git checkout `` -before ``make all``. And if you switch branches a lot, especially -touching other tendermint repos, you may need to ``make fresh`` -sometimes so glide doesn't get confused with all the branches and -versions lying around. diff --git a/_attic/modules/docs/key-management.rst b/_attic/modules/docs/key-management.rst deleted file mode 100644 index fdda0cd7b1..0000000000 --- a/_attic/modules/docs/key-management.rst +++ /dev/null @@ -1,204 +0,0 @@ -Key Management -============== - -Here we explain a bit how to work with your keys, using the -``basecli keys`` subcommand. - -**Note:** This keys tooling is not considered production ready and is -for dev only. - -We'll look at what you can do using the six sub-commands of -``basecli keys``: - -:: - - new - list - get - delete - recover - update - -Create keys ------------ - -``basecli keys new`` has two inputs (name, password) and two outputs -(address, seed). - -First, we name our key: - -.. code:: shelldown - - basecli keys new alice - -This will prompt (10 character minimum) password entry which must be -re-typed. You'll see: - -:: - - Enter a passphrase: - Repeat the passphrase: - alice A159C96AE911F68913E715ED889D211C02EC7D70 - **Important** write this seed phrase in a safe place. - It is the only way to recover your account if you ever forget your password. - - pelican amateur empower assist awkward claim brave process cliff save album pigeon intact asset - -which shows the address of your key named ``alice``, and its recovery -seed. We'll use these shortly. - -Adding the ``--output json`` flag to the above command would give this -output: - -:: - - Enter a passphrase: - Repeat the passphrase: - { - "key": { - "name": "alice", - "address": "A159C96AE911F68913E715ED889D211C02EC7D70", - "pubkey": { - "type": "ed25519", - "data": "4BF22554B0F0BF2181187E5E5456E3BF3D96DB4C416A91F07F03A9C36F712B77" - } - }, - "seed": "pelican amateur empower assist awkward claim brave process cliff save album pigeon intact asset" - } - -To avoid the prompt, it's possible to pipe the password into the -command, e.g.: - -:: - - echo 1234567890 | basecli keys new fred --output json - -After trying each of the three ways to create a key, look at them, use: - -:: - - basecli keys list - -to list all the keys: - -:: - - All keys: - alice 6FEA9C99E2565B44FCC3C539A293A1378CDA7609 - bob A159C96AE911F68913E715ED889D211C02EC7D70 - charlie 784D623E0C15DE79043C126FA6449B68311339E5 - -Again, we can use the ``--output json`` flag: - -:: - - [ - { - "name": "alice", - "address": "6FEA9C99E2565B44FCC3C539A293A1378CDA7609", - "pubkey": { - "type": "ed25519", - "data": "878B297F1E863CC30CAD71E04A8B3C23DB71C18F449F39E35B954EDB2276D32D" - } - }, - { - "name": "bob", - "address": "A159C96AE911F68913E715ED889D211C02EC7D70", - "pubkey": { - "type": "ed25519", - "data": "2127CAAB96C08E3042C5B33C8B5A820079AAE8DD50642DCFCC1E8B74821B2BB9" - } - }, - { - "name": "charlie", - "address": "784D623E0C15DE79043C126FA6449B68311339E5", - "pubkey": { - "type": "ed25519", - "data": "4BF22554B0F0BF2181187E5E5456E3BF3D96DB4C416A91F07F03A9C36F712B77" - } - }, - ] - -to get machine readable output. - -If we want information about one specific key, then: - -:: - - basecli keys get charlie --output json - -will, for example, return the info for only the "charlie" key returned -from the previous ``basecoin keys list`` command. - -The keys tooling can support different types of keys with a flag: - -:: - - basecli keys new bit --type secp256k1 - -and you'll see the difference in the ``"type": field from``\ basecli -keys get\` - -Before moving on, let's set an enviroment variable to make -``--output json`` the default. - -Either run or put in your ``~/.bash_profile`` the following line: - -:: - - export BC_OUTPUT=json - -Recover a key -------------- - -Let's say, for whatever reason, you lose a key or forget the password. -On creation, you were given a seed. We'll use it to recover a lost key. - -First, let's simulate the loss by deleting a key: - -:: - - basecli keys delete alice - -which prompts for your current password, now rendered obsolete, and -gives a warning message. The only way you can recover your key now is -using the 12 word seed given on initial creation of the key. Let's try -it: - -:: - - basecli keys recover alice-again - -which prompts for a new password then the seed: - -:: - - Enter the new passphrase: - Enter your recovery seed phrase: - strike alien praise vendor term left market practice junior better deputy divert front calm - alice-again CBF5D9CE6DDCC32806162979495D07B851C53451 - -and voila! You've recovered your key. Note that the seed can be typed -our, pasted in, or piped into the command alongside the password. - -To change the password of a key, we can: - -:: - - basecli keys update alice-again - -and follow the prompts. - -That covers most features of the keys sub command. - -.. raw:: html - - diff --git a/_attic/modules/docs/make.bat b/_attic/modules/docs/make.bat deleted file mode 100644 index 916e57ee79..0000000000 --- a/_attic/modules/docs/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=python -msphinx -) -set SOURCEDIR=. -set BUILDDIR=_build -set SPHINXPROJ=Cosmos-SDK - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The Sphinx module was not found. Make sure you have Sphinx installed, - echo.then set the SPHINXBUILD environment variable to point to the full - echo.path of the 'sphinx-build' executable. Alternatively you may add the - echo.Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/_attic/modules/docs/overview.rst b/_attic/modules/docs/overview.rst deleted file mode 100644 index 22d26c5f80..0000000000 --- a/_attic/modules/docs/overview.rst +++ /dev/null @@ -1,88 +0,0 @@ -SDK Overview -============== - -The SDK middleware design optimizes flexibility and security. The -framework is designed around a modular execution stack which allows -applications to mix and match modular elements as desired. Along side, -all modules are permissioned and sandboxed to isolate modules for -greater application security. - -Framework Overview ------------------- - -Transactions -~~~~~~~~~~~~ - -Each transaction passes through the middleware stack which can be -defined uniquely by each application. From the multiple layers of -transaction, each middleware may strip off one level, like an onion. As -such, the transaction must be constructed to mirror the execution stack, -and each middleware module should allow an arbitrary transaction to be -embedded for the next layer in the stack. - -Execution Stack -~~~~~~~~~~~~~~~ - -Middleware components allow for code reusability and integrability. A -standard set of middleware are provided and can be mix-and-matched with -custom middleware. Some of the `standard library <./stdlib.html>`__ -middlewares provided in this package include: - Logging - Recovery - -Signatures - Chain - Nonce - Fees - Roles - -Inter-Blockchain-Communication (IBC) - -As a part of stack execution the state space provided to each middleware -is isolated ``Data Store`` below. When -executing the stack, state-recovery checkpoints can be assigned for -stack execution of ``CheckTx`` or ``DeliverTx``. This means, that all -state changes will be reverted to the checkpoint state on failure when -either being run as a part of ``CheckTx`` or ``DeliverTx``. Example -usage of the checkpoints is when we may want to deduct a fee even if the -end business logic fails; under this situation we would add the -``DeliverTx`` checkpoint after the fee middleware but before the -business logic. This diagram displays a typical process flow through an -execution stack. - -Dispatcher -~~~~~~~~~~ - -The dispatcher handler aims to allow for reusable business logic. As a -transaction is passed to the end handler, the dispatcher routes the -logic to the correct module. To use the dispatcher tool, all transaction -types must first be registered with the dispatcher. Once registered the -middleware stack or any other handler can call the dispatcher to execute -a transaction. Similarly to the execution stack, when executing a -transaction the dispatcher isolates the state space available to the -designated module (see ``Data Store`` below). - -Security Overview ------------------ - -Permission -~~~~~~~~~~ - -Each application is run in a sandbox to isolate security risks. When -interfacing between applications, if one of those applications is -compromised the entire network should still be secure. This is achieved -through actor permissioning whereby each chain, account, or application -can provided a designated permission for the transaction context to -perform a specific action. - -Context is passed through the middleware and dispatcher, allowing one to -add permissions on this app-space, and check current permissions. - -Data Store -~~~~~~~~~~ - -The entire merkle tree can access all data. When we call a module (or -middleware), we give them access to a subtree corresponding to their -app. This is achieved through the use of unique prefix assigned to each -module. From the module's perspective it is no different, the module -need-not have regard for the prefix as it is assigned outside of the -modules scope. For example, if a module named ``foo`` wanted to write to -the store it could save records under the key ``bar``, however, the -dispatcher would register that record in the persistent state under -``foo/bar``. Next time the ``foo`` app was called that record would be -accessible to it under the assigned key ``bar``. This effectively makes -app prefixing invisible to each module while preventing each module from -affecting each other module. Under this model no two registered modules -are permitted to have the same namespace. diff --git a/_attic/modules/docs/roles-and-multi-sig.rst b/_attic/modules/docs/roles-and-multi-sig.rst deleted file mode 100644 index 1681d76531..0000000000 --- a/_attic/modules/docs/roles-and-multi-sig.rst +++ /dev/null @@ -1,322 +0,0 @@ -This guide uses the roles functionality provided by ``basecli`` to -create a multi-sig wallet. It builds upon the basecoin basics and key -management guides. You should have ``basecoin`` started with blocks -streaming in, and three accounts: ``rich, poor, igor`` where ``rich`` -was the account used on ``basecoin init``, *and* run ``basecli init`` -with the appropriate flags. Review the intro guides for more -information. - -In this example, ``rich`` will create the role and send it some coins -(i.e., fill the multi-sig wallet). Then, ``poor`` will prepare a -transaction to withdraw coins, which will be approved by ``igor``. Let's -look at our keys: - -:: - - basecli keys list - -:: - - All keys: - igor 5E4CB7A4E729BA0A8B18DE99E21409B6D706D0F1 - poor 65D406E028319289A0706E294F3B764F44EBA3CF - rich CB76F4092D1B13475272B36585EBD15D22A2848D - -Using the ``basecli query account`` command, you'll see that ``rich`` -has plenty of coins: - -:: - - { - "height": 81, - "data": { - "coins": [ - { - "denom": "mycoin", - "amount": 9007199254740992 - } - ], - "credit": [] - } - } - -whereas ``poor`` and ``igor`` have no coins (in fact, the chain doesn't -know about them yet): - -:: - - ERROR: Account bytes are empty for address 65D406E028319289A0706E294F3B764F44EBA3CF - -Create Role ------------ - -This first step defines the parameters of a new role, which will have -control of any coins sent to it, and only release them if correct -conditions are met. In this example, we are going to make a 2/3 -multi-sig wallet. Let's look a the command and dissect it below: - -:: - - basecli tx create-role --role=10CAFE4E --min-sigs=2 --members=5E4CB7A4E729BA0A8B18DE99E21409B6D706D0F1,65D406E028319289A0706E294F3B764F44EBA3CF,CB76F4092D1B13475272B36585EBD15D22A2848D --sequence=1 --name=rich - -In the first part we are sending a transaction that creates a role, -rather than transfering coins. The ``--role`` flag is the name of the -role (in hex only) and must be in double quotes. The ``--min-sigs`` and -``--members`` define your multi-sig parameters. Here, we require a -minimum of 2 signatures out of 3 members but we could easily say 3 of 5 -or 9 of 10, or whatever your application requires. The ``--members`` -flag requires a comma-seperated list of addresses that will be -signatories on the role. Then we set the ``--sequence`` number for the -transaction, which will start at 1 and must be incremented by 1 for -every transaction from an account. Finally, we use the name of the -key/account that will be used to create the role, in this case the -account ``rich``. - -Remember that ``rich``'s address was used on ``basecoin init`` and is -included in the ``--members`` list. The command above will prompt for a -password (which can also be piped into the command if desired) then - if -executed correctly - return some data: - -:: - - { - "check_tx": { - "code": 0, - "data": "", - "log": "" - }, - "deliver_tx": { - "code": 0, - "data": "", - "log": "" - }, - "hash": "4849DA762E19CE599460B9882DD42C7F19655DC1", - "height": 321 - } - -showing the block height at which the transaction was committed and its -hash. A quick review of what we did: 1) created a role, essentially an -account, that requires a minimum of two (2) signatures from three (3) -accounts (members). And since it was the account named ``rich``'s first -transaction, the sequence was set to 1. - -Let's look at the balance of the role that we've created: - -:: - - basecli query account role:10CAFE4E - -and it should be empty: - -:: - - ERROR: Account bytes are empty for address role:10CAFE4E - -Next, we want to send coins *to* that role. Notice that because this is -the second transaction being sent by rich, we need to increase -``--sequence`` to ``2``: - -:: - - basecli tx send --fee=90mycoin --amount=10000mycoin --to=role:10CAFE4E --sequence=2 --name=rich - -We need to pay a transaction fee to the validators, in this case 90 -``mycoin`` to send 10000 ``mycoin`` Notice that for the ``--to`` flag, -to specify that we are sending to a role instead of an account, the -``role:`` prefix is added before the role. Because it's ``rich``'s -second transaction, we've incremented the sequence. The output will be -nearly identical to the output from ``create-role`` above. - -Now the role has coins (think of it like a bank). - -Double check with: - -:: - - basecli query account role:10CAFE4E - -and this time you'll see the coins in the role's account: - -:: - - { - "height": 2453, - "data": { - "coins": [ - { - "denom": "mycoin", - "amount": 10000 - } - ], - "credit": [] - } - } - -``Poor`` decides to initiate a multi-sig transaction to himself from the -role's account. First, it must be prepared like so: - -:: - - basecli tx send --amount=6000mycoin --from=role:10CAFE4E --to=65D406E028319289A0706E294F3B764F44EBA3CF --sequence=1 --assume-role=10CAFE4E --name=poor --multi --prepare=tx.json - -you'll be prompted for ``poor``'s password and there won't be any -``stdout`` to the terminal. Note that the address in the ``--to`` flag -matches the address of ``poor``'s account from the beginning of the -tutorial. The main output is the ``tx.json`` file that has just been -created. In the above command, the ``--assume-role`` flag is used to -evaluate account permissions on the transaction, while the ``--multi`` -flag is used in combination with ``--prepare``, to specify the file that -is prepared for a multi-sig transaction. - -The ``tx.json`` file will look like this: - -:: - - { - "type": "sigs/multi", - "data": { - "tx": { - "type": "chain/tx", - "data": { - "chain_id": "test_chain_id", - "expires_at": 0, - "tx": { - "type": "nonce", - "data": { - "sequence": 1, - "signers": [ - { - "chain": "", - "app": "sigs", - "addr": "65D406E028319289A0706E294F3B764F44EBA3CF" - } - ], - "tx": { - "type": "role/assume", - "data": { - "role": "10CAFE4E", - "tx": { - "type": "coin/send", - "data": { - "inputs": [ - { - "address": { - "chain": "", - "app": "role", - "addr": "10CAFE4E" - }, - "coins": [ - { - "denom": "mycoin", - "amount": 6000 - } - ] - } - ], - "outputs": [ - { - "address": { - "chain": "", - "app": "sigs", - "addr": "65D406E028319289A0706E294F3B764F44EBA3CF" - }, - "coins": [ - { - "denom": "mycoin", - "amount": 6000 - } - ] - } - ] - } - } - } - } - } - } - } - }, - "signatures": [ - { - "Sig": { - "type": "ed25519", - "data": "A38F73BF2D109015E4B0B6782C84875292D5FAA75F0E3362C9BD29B16CB15D57FDF0553205E7A33C740319397A434B7C31CBB10BE7F8270C9984C5567D2DC002" - }, - "Pubkey": { - "type": "ed25519", - "data": "6ED38C7453148DD90DFC41D9339CE45BEFA5EB505FD7E93D85E71DFFDAFD9B8F" - } - } - ] - } - } - -and it is loaded by the next command. - -With the transaction prepared, but not sent, we'll have ``igor`` sign -and send the prepared transaction: - -:: - - basecli tx --in=tx.json --name=igor - -which will give output similar to: - -:: - - { - "check_tx": { - "code": 0, - "data": "", - "log": "" - }, - "deliver_tx": { - "code": 0, - "data": "", - "log": "" - }, - "hash": "E345BDDED9517EB2CAAF5E30AFF3AB38A1172833", - "height": 2673 - } - -and voila! That's the basics for creating roles and sending multi-sig -transactions. For 3 of 3, you'd add an intermediate transactions like: - -:: - - basecli tx --in=tx.json --name=igor --prepare=tx2.json - -before having rich sign and send the transaction. The ``--prepare`` flag -writes files to disk rather than sending the transaction and can be used -to chain together multiple transactions. - -We can check the balance of the role: - -:: - - basecli query account role:10CAFE4E - -and get the result: - -:: - - { - "height": 2683, - "data": { - "coins": [ - { - "denom": "mycoin", - "amount": 4000 - } - ], - "credit": [] - } - } - -and see that ``poor`` now has 6000 ``mycoin``: - -:: - - basecli query account 65D406E028319289A0706E294F3B764F44EBA3CF - -to confirm that everything worked as expected. diff --git a/_attic/modules/docs/stdlib.rst b/_attic/modules/docs/stdlib.rst deleted file mode 100644 index f6373cf703..0000000000 --- a/_attic/modules/docs/stdlib.rst +++ /dev/null @@ -1,150 +0,0 @@ -Standard Library -================ - -The Cosmos-SDK comes bundled with a number of standard modules that -provide common functionality useful across a wide variety of -applications. See examples below. It is recommended to investigate if -desired functionality is already provided before developing new modules. - -Basic Middleware ----------------- - -Logging -~~~~~~~ - -``modules.base.Logger`` is a middleware that records basic info on -``CheckTx``, ``DeliverTx``, and ``SetOption``, along with timing in -microseconds. It can be installed standard at the top of all middleware -stacks, or replaced with your own middleware if you want to record -custom information with each request. - -Recovery -~~~~~~~~ - -To avoid accidental panics (e.g. bad go-wire decoding) killing the ABCI -app, wrap the stack with ``stack.Recovery``, which catches all panics -and returns them as errors, so they can be handled normally. - -Signatures -~~~~~~~~~~ - -The first layer of the transaction contains the signatures to authorize -it. This is then verified by ``modules.auth.Signatures``. All -transactions may have one or multiple signatures which are then -processed and verified by this middleware and then passed down the -stack. - -Chain -~~~~~ - -The next layer of a transaction (in the standard stack) binds the -transaction to a specific chain with a block height that has an optional -expiration. This keeps the transactions from being replayed on a fork or -other such chain, as well as a partially signed multi-sig being delayed -months before being committed to the chain. This functionality is -provided in ``modules.base.Chain`` - -Nonce -~~~~~ - -To avoid replay attacks, a nonce can be associated with each actor. A -separate nonce is used for each distinct group signers required for a -transaction as well as for each separate application and chain-id. This -creates replay protection cross-IBC and cross-plugins and also allows -signing parties to not be bound to waiting for a particular transaction -to be completed before being able to sign a separate transaction. - -Rather than force each module to implement its own replay protection, a -transaction stack may contain a nonce wrap and the account it belongs -to. The nonce must contain a signed sequence number which is incremented -one higher than the last request or the request is rejected. This is -implemented in ``modules.nonce.ReplayCheck``. - -If you're interested checkout this `design -discussion `__. - -Fees -~~~~ - -An optional - but useful - feature on many chains, is charging -transaction fees. A simple implementation of this is provided in -``modules.fee.SimpleFeeMiddleware``. A fee currency and minimum amount -are defined in the constructor (eg. in code). If the minimum amount is -0, then the fee is optional. If it is above 0, then every transaction -with insufficient fee is rejected. This fee is deducted from the payers -account before executing any other transaction. - -This module is dependent on the ``coin`` module. - -Other Apps ----------- - -Coin -~~~~ - -What would a crypto-currency be without tokens? The ``SendTx`` logic -from earlier implementations of basecoin was extracted into one module, -which is now optional, meaning most of the other functionality will also -work in a system with no built-in tokens, such as a private network that -provides other access control mechanisms. - -``modules.coin.Handler`` defines a Handler that maintains a number of -accounts along with a set of various tokens, supporting multiple token -denominations. The main access is ``SendTx``, which can support any type -of actor (other apps as well as public key addresses) and is a building -block for any other app that requires some payment solution, like fees -or trader. - -Roles -~~~~~ - -Roles encapsulate what are typically called N-of-M multi-signatures -accounts in the crypto world. However, I view this as a type of role or -group, which can be the basis for building a permission system. For -example, a set of people could be called registrars, which can authorize -a new IBC chain, and need eg. 2 out of 7 signatures to approve it. - -Currently, one can create a role with ``modules.roles.Handler``, and -assume one of those roles by wrapping another transaction with -``AssumeRoleTx``, which is processed by ``modules.roles.Middleware``. -Updating the set of actors in a role is planned in the near future. - -Inter-Blockchain Communication (IBC) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -IBC, is the cornerstone of The Cosmos Network, and is built into the -Cosmos-SDK framework as a basic primitive. To fully grasp these concepts -requires a much longer explanation, but in short, the chain works as a -light-client to another chain and maintains input and output queue to -send packets with that chain. This mechanism allows blockchains to prove -the state of their respective blockchains to each other ultimately -invoke inter-blockchain transactions. - -Most functionality is implemented in ``modules.ibc.Handler``. -Registering a chain is a seed of trust that requires verification of the -proper seed (or genesis block), and this generally requires approval of -an authorized registrar (which may be a multi-sig role). Updating a -registered chain can be done by anyone, as the new header can be -completely verified by the existing knowledge of the chain. Also, -modules can initiate an outgoing IBC message to another chain by calling -``CreatePacketTx`` over IPC (inter-plugin communication) with a -transaction that belongs to their module. (This must be explicitly -authorized by the same module, so only the eg. coin module can authorize -a ``SendTx`` to another chain). - -``PostPacketTx`` can post a transaction that was created on another -chain along with the merkle proof, which must match an already -registered header. If this chain can verify the authenticity, it will -accept the packet, along with all the permissions from the other chain, -and execute it on this stack. This is the only way to get permissions -that belong to another chain. - -These various pieces can be combined in a relay, which polls for new -packets on one chain, and then posts the packets along with the new -headers on the other chain. - -Example Apps ------------- - -See the `Cosmos Academy `__ -for example applications. diff --git a/_attic/modules/ibc/commands/query.go b/_attic/modules/ibc/commands/query.go deleted file mode 100644 index fb1da65067..0000000000 --- a/_attic/modules/ibc/commands/query.go +++ /dev/null @@ -1,230 +0,0 @@ -package commands - -import ( - "fmt" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/query" - "github.com/cosmos/cosmos-sdk/modules/ibc" - "github.com/cosmos/cosmos-sdk/stack" - wire "github.com/tendermint/go-wire" - "github.com/tendermint/go-wire/data" - "github.com/tendermint/iavl" -) - -// TODO: query seeds (register/update) - -// IBCQueryCmd - parent command to query ibc info -var IBCQueryCmd = &cobra.Command{ - Use: "ibc", - Short: "Get information about IBC", - RunE: commands.RequireInit(ibcQueryCmd), - // HandlerInfo -} - -// ChainsQueryCmd - get a list of all registered chains -var ChainsQueryCmd = &cobra.Command{ - Use: "chains", - Short: "Get a list of all registered chains", - RunE: commands.RequireInit(chainsQueryCmd), - // ChainSet ([]string) -} - -// ChainQueryCmd - get details on one registered chain -var ChainQueryCmd = &cobra.Command{ - Use: "chain [id]", - Short: "Get details on one registered chain", - RunE: commands.RequireInit(chainQueryCmd), - // ChainInfo -} - -// PacketsQueryCmd - get latest packet in a queue -var PacketsQueryCmd = &cobra.Command{ - Use: "packets", - Short: "Get latest packet in a queue", - RunE: commands.RequireInit(packetsQueryCmd), - // uint64 -} - -// PacketQueryCmd - get the names packet (by queue and sequence) -var PacketQueryCmd = &cobra.Command{ - Use: "packet", - Short: "Get packet with given sequence from the named queue", - RunE: commands.RequireInit(packetQueryCmd), - // Packet -} - -//nolint -const ( - FlagFromChain = "from" - FlagToChain = "to" - FlagSequence = "sequence" -) - -func init() { - IBCQueryCmd.AddCommand( - ChainQueryCmd, - ChainsQueryCmd, - PacketQueryCmd, - PacketsQueryCmd, - ) - - fs1 := PacketsQueryCmd.Flags() - fs1.String(FlagFromChain, "", "Name of the input chain (where packets came from)") - fs1.String(FlagToChain, "", "Name of the output chain (where packets go to)") - - fs2 := PacketQueryCmd.Flags() - fs2.String(FlagFromChain, "", "Name of the input chain (where packets came from)") - fs2.String(FlagToChain, "", "Name of the output chain (where packets go to)") - fs2.Int(FlagSequence, -1, "Index of the packet in the queue (starts with 0)") -} - -func ibcQueryCmd(cmd *cobra.Command, args []string) error { - var res ibc.HandlerInfo - key := stack.PrefixedKey(ibc.NameIBC, ibc.HandlerKey()) - prove := !viper.GetBool(commands.FlagTrustNode) - h, err := query.GetParsed(key, &res, query.GetHeight(), prove) - if err != nil { - return err - } - return query.OutputProof(res, h) -} - -func chainsQueryCmd(cmd *cobra.Command, args []string) error { - list := [][]byte{} - key := stack.PrefixedKey(ibc.NameIBC, ibc.ChainsKey()) - prove := !viper.GetBool(commands.FlagTrustNode) - h, err := query.GetParsed(key, &list, query.GetHeight(), prove) - if err != nil { - return err - } - - // convert these names to strings for better output - res := make([]string, len(list)) - for i := range list { - res[i] = string(list[i]) - } - - return query.OutputProof(res, h) -} - -func chainQueryCmd(cmd *cobra.Command, args []string) error { - arg, err := commands.GetOneArg(args, "id") - if err != nil { - return err - } - - var res ibc.ChainInfo - key := stack.PrefixedKey(ibc.NameIBC, ibc.ChainKey(arg)) - prove := !viper.GetBool(commands.FlagTrustNode) - h, err := query.GetParsed(key, &res, query.GetHeight(), prove) - if err != nil { - return err - } - - return query.OutputProof(res, h) -} - -func assertOne(from, to string) error { - if from == "" && to == "" { - return errors.Errorf("You must specify either --%s or --%s", - FlagFromChain, FlagToChain) - } - if from != "" && to != "" { - return errors.Errorf("You can only specify one of --%s or --%s", - FlagFromChain, FlagToChain) - } - return nil -} - -func packetsQueryCmd(cmd *cobra.Command, args []string) error { - from := viper.GetString(FlagFromChain) - to := viper.GetString(FlagToChain) - err := assertOne(from, to) - if err != nil { - return err - } - - var key []byte - if from != "" { - key = stack.PrefixedKey(ibc.NameIBC, ibc.QueueInKey(from)) - } else { - key = stack.PrefixedKey(ibc.NameIBC, ibc.QueueOutKey(to)) - } - - var res uint64 - prove := !viper.GetBool(commands.FlagTrustNode) - h, err := query.GetParsed(key, &res, query.GetHeight(), prove) - if err != nil { - return err - } - - return query.OutputProof(res, h) -} - -func packetQueryCmd(cmd *cobra.Command, args []string) error { - from := viper.GetString(FlagFromChain) - to := viper.GetString(FlagToChain) - err := assertOne(from, to) - if err != nil { - return err - } - - seq := viper.GetInt(FlagSequence) - if seq < 0 { - return errors.Errorf("--%s must be a non-negative number", FlagSequence) - } - prove := !viper.GetBool(commands.FlagTrustNode) - - var key []byte - if from != "" { - key = stack.PrefixedKey(ibc.NameIBC, ibc.QueueInPacketKey(from, uint64(seq))) - } else { - key = stack.PrefixedKey(ibc.NameIBC, ibc.QueueOutPacketKey(to, uint64(seq))) - } - - // Input queue just display the results - var packet ibc.Packet - if from != "" { - h, err := query.GetParsed(key, &packet, query.GetHeight(), prove) - if err != nil { - return err - } - return query.OutputProof(packet, h) - } - - // output queue, create a post packet - bs, height, proof, err := query.GetWithProof(key, query.GetHeight()) - if err != nil { - return err - } - if len(bs) == 0 { - // TODO: what info here? - return errors.New("no such packet") - } - - err = wire.ReadBinaryBytes(bs, &packet) - if err != nil { - return err - } - // create the post packet here. - post := ibc.PostPacketTx{ - FromChainID: commands.GetChainID(), - FromChainHeight: height, - Key: key, - Packet: packet, - Proof: proof.(*iavl.KeyExistsProof), - } - - // print json direct, as we don't need to wrap with the height - res, err := data.ToJSON(post) - if err != nil { - return err - } - fmt.Println(string(res)) - return nil -} diff --git a/_attic/modules/ibc/commands/tx.go b/_attic/modules/ibc/commands/tx.go deleted file mode 100644 index 292658721c..0000000000 --- a/_attic/modules/ibc/commands/tx.go +++ /dev/null @@ -1,115 +0,0 @@ -package commands - -import ( - "encoding/json" - "os" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - "github.com/cosmos/cosmos-sdk/modules/ibc" - "github.com/tendermint/light-client/certifiers" -) - -// RegisterChainTxCmd is CLI command to register a new chain for ibc -var RegisterChainTxCmd = &cobra.Command{ - Use: "ibc-register", - Short: "Register a new chain", - RunE: commands.RequireInit(registerChainTxCmd), -} - -// UpdateChainTxCmd is CLI command to update the header for an ibc chain -var UpdateChainTxCmd = &cobra.Command{ - Use: "ibc-update", - Short: "Add new header to an existing chain", - RunE: commands.RequireInit(updateChainTxCmd), -} - -// PostPacketTxCmd is CLI command to post ibc packet on the destination chain -var PostPacketTxCmd = &cobra.Command{ - Use: "ibc-post", - Short: "Post an ibc packet on the destination chain", - RunE: commands.RequireInit(postPacketTxCmd), -} - -// TODO: relay! - -//nolint -const ( - FlagCommit = "commit" - FlagPacket = "packet" -) - -func init() { - fs1 := RegisterChainTxCmd.Flags() - fs1.String(FlagCommit, "", "Filename with a commit file") - - fs2 := UpdateChainTxCmd.Flags() - fs2.String(FlagCommit, "", "Filename with a commit file") - - fs3 := PostPacketTxCmd.Flags() - fs3.String(FlagPacket, "", "Filename with a packet to post") -} - -func registerChainTxCmd(cmd *cobra.Command, args []string) error { - fc, err := readCommit() - if err != nil { - return err - } - tx := ibc.RegisterChainTx{fc}.Wrap() - return txcmd.DoTx(tx) -} - -func updateChainTxCmd(cmd *cobra.Command, args []string) error { - fc, err := readCommit() - if err != nil { - return err - } - tx := ibc.UpdateChainTx{fc}.Wrap() - return txcmd.DoTx(tx) -} - -func postPacketTxCmd(cmd *cobra.Command, args []string) error { - post, err := readPostPacket() - if err != nil { - return err - } - return txcmd.DoTx(post.Wrap()) -} - -func readCommit() (fc certifiers.FullCommit, err error) { - name := viper.GetString(FlagCommit) - if name == "" { - return fc, errors.New("You must specify a commit file") - } - - err = readFile(name, &fc) - return -} - -func readPostPacket() (post ibc.PostPacketTx, err error) { - name := viper.GetString(FlagPacket) - if name == "" { - return post, errors.New("You must specify a packet file") - } - - err = readFile(name, &post) - return -} - -func readFile(name string, input interface{}) (err error) { - var f *os.File - f, err = os.Open(name) - if err != nil { - return errors.WithStack(err) - } - defer f.Close() - - // read the file as json into a seed - j := json.NewDecoder(f) - err = j.Decode(input) - return errors.Wrap(err, "Invalid file") -} diff --git a/_attic/modules/ibc/errors.go b/_attic/modules/ibc/errors.go deleted file mode 100644 index 8c3c99a611..0000000000 --- a/_attic/modules/ibc/errors.go +++ /dev/null @@ -1,109 +0,0 @@ -package ibc - -import ( - "fmt" - - abci "github.com/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/errors" -) - -// nolint -var ( - errChainNotRegistered = fmt.Errorf("Chain not registered") - errChainAlreadyExists = fmt.Errorf("Chain already exists") - errWrongDestChain = fmt.Errorf("This is not the destination") - errNeedsIBCPermission = fmt.Errorf("Needs app-permission to send IBC") - errCannotSetPermission = fmt.Errorf("Requesting invalid permission on IBC") - errHeaderNotFound = fmt.Errorf("Header not found") - errPacketAlreadyExists = fmt.Errorf("Packet already handled") - errPacketOutOfOrder = fmt.Errorf("Packet out of order") - errInvalidProof = fmt.Errorf("Invalid merkle proof") - msgInvalidCommit = "Invalid header and commit" - - IBCCodeChainNotRegistered = abci.CodeType(1001) - IBCCodeChainAlreadyExists = abci.CodeType(1002) - IBCCodeUnknownChain = abci.CodeType(1003) - IBCCodeInvalidPacketSequence = abci.CodeType(1004) - IBCCodeUnknownHeight = abci.CodeType(1005) - IBCCodeInvalidCommit = abci.CodeType(1006) - IBCCodeInvalidProof = abci.CodeType(1007) - IBCCodeInvalidCall = abci.CodeType(1008) -) - -func ErrNotRegistered(chainID string) error { - return errors.WithMessage(chainID, errChainNotRegistered, IBCCodeChainNotRegistered) -} -func IsNotRegisteredErr(err error) bool { - return errors.IsSameError(errChainNotRegistered, err) -} - -func ErrAlreadyRegistered(chainID string) error { - return errors.WithMessage(chainID, errChainAlreadyExists, IBCCodeChainAlreadyExists) -} -func IsAlreadyRegisteredErr(err error) bool { - return errors.IsSameError(errChainAlreadyExists, err) -} - -func ErrWrongDestChain(chainID string) error { - return errors.WithMessage(chainID, errWrongDestChain, IBCCodeUnknownChain) -} -func IsWrongDestChainErr(err error) bool { - return errors.IsSameError(errWrongDestChain, err) -} - -func ErrNeedsIBCPermission() error { - return errors.WithCode(errNeedsIBCPermission, IBCCodeInvalidCall) -} -func IsNeedsIBCPermissionErr(err error) bool { - return errors.IsSameError(errNeedsIBCPermission, err) -} - -func ErrCannotSetPermission() error { - return errors.WithCode(errCannotSetPermission, IBCCodeInvalidCall) -} -func IsCannotSetPermissionErr(err error) bool { - return errors.IsSameError(errCannotSetPermission, err) -} - -func ErrHeaderNotFound(h int) error { - msg := fmt.Sprintf("height %d", h) - return errors.WithMessage(msg, errHeaderNotFound, IBCCodeUnknownHeight) -} -func IsHeaderNotFoundErr(err error) bool { - return errors.IsSameError(errHeaderNotFound, err) -} - -func ErrPacketAlreadyExists() error { - return errors.WithCode(errPacketAlreadyExists, IBCCodeInvalidPacketSequence) -} -func IsPacketAlreadyExistsErr(err error) bool { - return errors.IsSameError(errPacketAlreadyExists, err) -} - -func ErrPacketOutOfOrder(seq uint64) error { - msg := fmt.Sprintf("expected %d", seq) - return errors.WithMessage(msg, errPacketOutOfOrder, IBCCodeInvalidPacketSequence) -} -func IsPacketOutOfOrderErr(err error) bool { - return errors.IsSameError(errPacketOutOfOrder, err) -} - -func ErrInvalidProof() error { - return errors.WithCode(errInvalidProof, IBCCodeInvalidProof) -} -func ErrInvalidProofWithReason(err error) error { - return errors.WithCode(err, IBCCodeInvalidProof) -} -func IsInvalidProofErr(err error) bool { - return errors.HasErrorCode(err, IBCCodeInvalidProof) -} - -func ErrInvalidCommit(err error) error { - if err == nil { - return nil - } - return errors.WithMessage(msgInvalidCommit, err, IBCCodeInvalidCommit) -} -func IsInvalidCommitErr(err error) bool { - return errors.HasErrorCode(err, IBCCodeInvalidCommit) -} diff --git a/_attic/modules/ibc/handler.go b/_attic/modules/ibc/handler.go deleted file mode 100644 index 47b8c56975..0000000000 --- a/_attic/modules/ibc/handler.go +++ /dev/null @@ -1,211 +0,0 @@ -package ibc - -import ( - "fmt" - - "github.com/tendermint/go-wire/data" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -const ( - // NameIBC is the name of this module - NameIBC = "ibc" - // OptionRegistrar is the option name to set the actor - // to handle ibc chain registration - OptionRegistrar = "registrar" -) - -var ( - // Semi-random bytes that shouldn't conflict with keys (20 bytes) - // or any strings (non-ascii). - // TODO: consider how to make this more collision-proof.... - allowIBC = []byte{0x42, 0xbe, 0xef, 0x1} -) - -// AllowIBC returns a specially crafted Actor that -// enables sending IBC packets for this app type -func AllowIBC(app string) sdk.Actor { - return sdk.Actor{App: app, Address: allowIBC} -} - -// Handler updates the chain state or creates an ibc packet -type Handler struct { - sdk.NopInitValidate -} - -var _ sdk.Handler = Handler{} - -// NewHandler returns a Handler that allows all chains to connect via IBC. -// Set a Registrar via InitState to restrict it. -func NewHandler() Handler { - return Handler{} -} - -// Name returns name space -func (Handler) Name() string { - return NameIBC -} - -// InitState sets the registrar for IBC -func (h Handler) InitState(l log.Logger, store state.SimpleDB, module, key, value string) (log string, err error) { - if module != NameIBC { - return "", errors.ErrUnknownModule(module) - } - if key == OptionRegistrar { - var act sdk.Actor - err = data.FromJSON([]byte(value), &act) - if err != nil { - return "", err - } - // Save the data - info := HandlerInfo{act} - info.Save(store) - return "Success", nil - } - return "", errors.ErrUnknownKey(key) -} - -// CheckTx verifies the packet is formated correctly, and has the proper sequence -// for a registered chain -func (h Handler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - err = tx.ValidateBasic() - if err != nil { - return res, err - } - - // TODO: better fee calculation (don't do complex crypto) - switch tx.Unwrap().(type) { - case RegisterChainTx: - return res, nil - case UpdateChainTx: - return res, nil - case CreatePacketTx: - return res, nil - } - return res, errors.ErrUnknownTxType(tx.Unwrap()) -} - -// DeliverTx verifies all signatures on the tx and updates the chain state -// apropriately -func (h Handler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - err = tx.ValidateBasic() - if err != nil { - return res, err - } - - switch t := tx.Unwrap().(type) { - case RegisterChainTx: - return h.registerChain(ctx, store, t) - case UpdateChainTx: - return h.updateChain(ctx, store, t) - case CreatePacketTx: - return h.createPacket(ctx, store, t) - } - return res, errors.ErrUnknownTxType(tx.Unwrap()) -} - -// registerChain imports the first seed for this chain and -// accepts it as the root of trust. -// -// only the registrar, if set, is allowed to do this -func (h Handler) registerChain(ctx sdk.Context, store state.SimpleDB, - t RegisterChainTx) (res sdk.DeliverResult, err error) { - - info := LoadInfo(store) - if !info.Registrar.Empty() && !ctx.HasPermission(info.Registrar) { - return res, errors.ErrUnauthorized() - } - - // verify that the header looks reasonable - chainID := t.ChainID() - s := NewChainSet(store) - err = s.Register(chainID, ctx.BlockHeight(), t.Commit.Height()) - if err != nil { - return res, err - } - - space := stack.PrefixedStore(chainID, store) - provider := newDBProvider(space) - err = provider.StoreCommit(t.Commit) - return res, err -} - -// updateChain checks the seed against the existing chain data and rejects it if it -// doesn't fit (or no chain data) -func (h Handler) updateChain(ctx sdk.Context, store state.SimpleDB, - t UpdateChainTx) (res sdk.DeliverResult, err error) { - - chainID := t.ChainID() - s := NewChainSet(store) - if !s.Exists([]byte(chainID)) { - return res, ErrNotRegistered(chainID) - } - - // load the certifier for this chain - fc := t.Commit - space := stack.PrefixedStore(chainID, store) - cert, err := newCertifier(space, chainID, fc.Height()) - if err != nil { - return res, err - } - - // this will import the commit if it is valid in the current context - err = cert.Update(fc) - if err != nil { - return res, ErrInvalidCommit(err) - } - - // update the tracked height in chain info - err = s.Update(chainID, fc.Height()) - return res, err -} - -// createPacket makes sure all permissions are good and the destination -// chain is registed. If so, it appends it to the outgoing queue -func (h Handler) createPacket(ctx sdk.Context, store state.SimpleDB, - t CreatePacketTx) (res sdk.DeliverResult, err error) { - - // make sure the chain is registed - dest := t.DestChain - if !NewChainSet(store).Exists([]byte(dest)) { - return res, ErrNotRegistered(dest) - } - - // make sure we have the special IBC permission - mod, err := t.Tx.GetMod() - if err != nil { - return res, err - } - if !ctx.HasPermission(AllowIBC(mod)) { - return res, ErrNeedsIBCPermission() - } - - // start making the packet to send - packet := Packet{ - DestChain: dest, - Tx: t.Tx, - Permissions: make([]sdk.Actor, len(t.Permissions)), - } - - // make sure we have all the permissions we want to send - for i, p := range t.Permissions { - if !ctx.HasPermission(p) { - return res, ErrCannotSetPermission() - } - // add the permission with the current ChainID - packet.Permissions[i] = p.WithChain(ctx.ChainID()) - } - - // now add it to the output queue.... - q := OutputQueue(store, dest) - packet.Sequence = q.Tail() - q.Push(packet.Bytes()) - - res = sdk.DeliverResult{Log: fmt.Sprintf("Packet %s %d", dest, packet.Sequence)} - return -} diff --git a/_attic/modules/ibc/ibc_test.go b/_attic/modules/ibc/ibc_test.go deleted file mode 100644 index ceb92237fd..0000000000 --- a/_attic/modules/ibc/ibc_test.go +++ /dev/null @@ -1,413 +0,0 @@ -package ibc - -import ( - "encoding/json" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - wire "github.com/tendermint/go-wire" - "github.com/tendermint/light-client/certifiers" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -// this tests registration without registrar permissions -func TestIBCRegister(t *testing.T) { - assert := assert.New(t) - - // the validators we use to make seeds - keys := certifiers.GenValKeys(5) - keys2 := certifiers.GenValKeys(7) - appHash := []byte{0, 4, 7, 23} - appHash2 := []byte{12, 34, 56, 78} - - // badCommit doesn't validate - badCommit := genEmptyCommit(keys2, "chain-2", 123, appHash, len(keys2)) - badCommit.Header.AppHash = appHash2 - - cases := []struct { - fc certifiers.FullCommit - checker errors.CheckErr - }{ - { - genEmptyCommit(keys, "chain-1", 100, appHash, len(keys)), - errors.NoErr, - }, - { - genEmptyCommit(keys, "chain-1", 200, appHash, len(keys)), - IsAlreadyRegisteredErr, - }, - { - badCommit, - IsInvalidCommitErr, - }, - { - genEmptyCommit(keys2, "chain-2", 123, appHash2, 5), - errors.NoErr, - }, - } - - ctx := stack.MockContext("hub", 50) - store := state.NewMemKVStore() - app := stack.New().Dispatch(stack.WrapHandler(NewHandler())) - - for i, tc := range cases { - tx := RegisterChainTx{tc.fc}.Wrap() - _, err := app.DeliverTx(ctx, store, tx) - assert.True(tc.checker(err), "%d: %+v", i, err) - } -} - -// this tests permission controls on ibc registration -func TestIBCRegisterPermissions(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // the validators we use to make seeds - keys := certifiers.GenValKeys(4) - appHash := []byte{0x17, 0x21, 0x5, 0x1e} - - foobar := sdk.Actor{App: "foo", Address: []byte("bar")} - baz := sdk.Actor{App: "baz", Address: []byte("bar")} - foobaz := sdk.Actor{App: "foo", Address: []byte("baz")} - - cases := []struct { - seed certifiers.FullCommit - registrar sdk.Actor - signer sdk.Actor - checker errors.CheckErr - }{ - // no sig, no registrar - { - seed: genEmptyCommit(keys, "chain-1", 100, appHash, len(keys)), - checker: errors.NoErr, - }, - // sig, no registrar - { - seed: genEmptyCommit(keys, "chain-2", 100, appHash, len(keys)), - signer: foobaz, - checker: errors.NoErr, - }, - // registrar, no sig - { - seed: genEmptyCommit(keys, "chain-3", 100, appHash, len(keys)), - registrar: foobar, - checker: errors.IsUnauthorizedErr, - }, - // registrar, wrong sig - { - seed: genEmptyCommit(keys, "chain-4", 100, appHash, len(keys)), - signer: foobaz, - registrar: foobar, - checker: errors.IsUnauthorizedErr, - }, - // registrar, wrong sig - { - seed: genEmptyCommit(keys, "chain-5", 100, appHash, len(keys)), - signer: baz, - registrar: foobar, - checker: errors.IsUnauthorizedErr, - }, - // registrar, proper sig - { - seed: genEmptyCommit(keys, "chain-6", 100, appHash, len(keys)), - signer: foobar, - registrar: foobar, - checker: errors.NoErr, - }, - } - - store := state.NewMemKVStore() - app := stack.New().Dispatch(stack.WrapHandler(NewHandler())) - - for i, tc := range cases { - // set option specifies the registrar - msg, err := json.Marshal(tc.registrar) - require.Nil(err, "%+v", err) - _, err = app.InitState(log.NewNopLogger(), store, - NameIBC, OptionRegistrar, string(msg)) - require.Nil(err, "%+v", err) - - // add permissions to the context - ctx := stack.MockContext("hub", 50).WithPermissions(tc.signer) - tx := RegisterChainTx{tc.seed}.Wrap() - _, err = app.DeliverTx(ctx, store, tx) - assert.True(tc.checker(err), "%d: %+v", i, err) - } -} - -// this verifies that we can properly update the headers on the chain -func TestIBCUpdate(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // this is the root seed, that others are evaluated against - keys := certifiers.GenValKeys(7) - appHash := []byte{0, 4, 7, 23} - start := 100 // initial height - root := genEmptyCommit(keys, "chain-1", 100, appHash, len(keys)) - - keys2 := keys.Extend(2) - keys3 := keys2.Extend(2) - - // create the app and register the root of trust (for chain-1) - ctx := stack.MockContext("hub", 50) - store := state.NewMemKVStore() - app := stack.New().Dispatch(stack.WrapHandler(NewHandler())) - tx := RegisterChainTx{root}.Wrap() - _, err := app.DeliverTx(ctx, store, tx) - require.Nil(err, "%+v", err) - - cases := []struct { - fc certifiers.FullCommit - checker errors.CheckErr - }{ - // same validator, higher up - { - genEmptyCommit(keys, "chain-1", start+50, []byte{22}, len(keys)), - errors.NoErr, - }, - // same validator, between existing (not most recent) - { - genEmptyCommit(keys, "chain-1", start+5, []byte{15, 43}, len(keys)), - errors.NoErr, - }, - // same validators, before root of trust - { - genEmptyCommit(keys, "chain-1", start-8, []byte{11, 77}, len(keys)), - IsHeaderNotFoundErr, - }, - // insufficient signatures - { - genEmptyCommit(keys, "chain-1", start+60, []byte{24}, len(keys)/2), - IsInvalidCommitErr, - }, - // unregistered chain - { - genEmptyCommit(keys, "chain-2", start+60, []byte{24}, len(keys)/2), - IsNotRegisteredErr, - }, - // too much change (keys -> keys3) - { - genEmptyCommit(keys3, "chain-1", start+100, []byte{22}, len(keys3)), - IsInvalidCommitErr, - }, - // legit update to validator set (keys -> keys2) - { - genEmptyCommit(keys2, "chain-1", start+90, []byte{33}, len(keys2)), - errors.NoErr, - }, - // now impossible jump works (keys -> keys2 -> keys3) - { - genEmptyCommit(keys3, "chain-1", start+100, []byte{44}, len(keys3)), - errors.NoErr, - }, - } - - for i, tc := range cases { - tx := UpdateChainTx{tc.fc}.Wrap() - _, err := app.DeliverTx(ctx, store, tx) - assert.True(tc.checker(err), "%d: %+v", i, err) - } -} - -// try to create an ibc packet and verify the number we get back -func TestIBCCreatePacket(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // this is the root seed, that others are evaluated against - keys := certifiers.GenValKeys(7) - appHash := []byte{1, 2, 3, 4} - start := 100 // initial height - chainID := "cosmos-hub" - root := genEmptyCommit(keys, chainID, start, appHash, len(keys)) - - // create the app and register the root of trust (for chain-1) - ctx := stack.MockContext("hub", 50) - store := state.NewMemKVStore() - app := stack.New().Dispatch(stack.WrapHandler(NewHandler())) - tx := RegisterChainTx{root}.Wrap() - _, err := app.DeliverTx(ctx, store, tx) - require.Nil(err, "%+v", err) - - // this is the tx we send, and the needed permission to send it - raw := stack.NewRawTx([]byte{0xbe, 0xef}) - ibcPerm := AllowIBC(stack.NameOK) - somePerm := sdk.Actor{App: "some", Address: []byte("perm")} - - cases := []struct { - dest string - ibcPerms sdk.Actors - ctxPerms sdk.Actors - checker errors.CheckErr - }{ - // wrong chain -> error - { - dest: "some-other-chain", - ctxPerms: sdk.Actors{ibcPerm}, - checker: IsNotRegisteredErr, - }, - - // no ibc permission -> error - { - dest: chainID, - checker: IsNeedsIBCPermissionErr, - }, - - // correct -> nice sequence - { - dest: chainID, - ctxPerms: sdk.Actors{ibcPerm}, - checker: errors.NoErr, - }, - - // requesting invalid permissions -> error - { - dest: chainID, - ibcPerms: sdk.Actors{somePerm}, - ctxPerms: sdk.Actors{ibcPerm}, - checker: IsCannotSetPermissionErr, - }, - - // requesting extra permissions when present - { - dest: chainID, - ibcPerms: sdk.Actors{somePerm}, - ctxPerms: sdk.Actors{ibcPerm, somePerm}, - checker: errors.NoErr, - }, - } - - for i, tc := range cases { - tx := CreatePacketTx{ - DestChain: tc.dest, - Permissions: tc.ibcPerms, - Tx: raw, - }.Wrap() - - myCtx := ctx.WithPermissions(tc.ctxPerms...) - _, err = app.DeliverTx(myCtx, store, tx) - assert.True(tc.checker(err), "%d: %+v", i, err) - } - - // query packet state - make sure both packets are properly writen - p := stack.PrefixedStore(NameIBC, store) - q := OutputQueue(p, chainID) - if assert.Equal(2, q.Size()) { - expected := []struct { - seq uint64 - perm sdk.Actors - }{ - {0, nil}, - {1, sdk.Actors{somePerm}}, - } - - for _, tc := range expected { - var packet Packet - err = wire.ReadBinaryBytes(q.Pop(), &packet) - require.Nil(err, "%+v", err) - assert.Equal(chainID, packet.DestChain) - assert.EqualValues(tc.seq, packet.Sequence) - assert.Equal(raw, packet.Tx) - assert.Equal(len(tc.perm), len(packet.Permissions)) - } - } -} - -func TestIBCPostPacket(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - otherID := "chain-1" - ourID := "hub" - start := 200 - msg := "it's okay" - - // create the app and our chain - app := stack.New(). - IBC(NewMiddleware()). - Dispatch( - stack.WrapHandler(NewHandler()), - stack.WrapHandler(stack.OKHandler{Log: msg}), - ) - ourChain := NewAppChain(app, ourID) - - // set up the other chain and register it with us - otherChain := NewMockChain(otherID, 7) - registerTx := otherChain.GetRegistrationTx(start).Wrap() - _, err := ourChain.DeliverTx(registerTx) - require.Nil(err, "%+v", err) - - // make a random tx that is to be passed - rawTx := stack.NewRawTx([]byte{17, 24, 3, 8}) - - randomChain := NewMockChain("something-else", 4) - pbad := NewPacket(rawTx, "something-else", 0) - packetBad, _ := randomChain.MakePostPacket(pbad, 123) - - p0 := NewPacket(rawTx, ourID, 0) - packet0, update0 := otherChain.MakePostPacket(p0, start+5) - require.Nil(ourChain.Update(update0)) - - packet0badHeight := packet0 - packet0badHeight.FromChainHeight -= 2 - - theirActor := sdk.Actor{ChainID: otherID, App: "foo", Address: []byte{1}} - p1 := NewPacket(rawTx, ourID, 1, theirActor) - packet1, update1 := otherChain.MakePostPacket(p1, start+25) - require.Nil(ourChain.Update(update1)) - - packet1badProof := packet1 - packet1badProof.Key = []byte("random-data") - - ourActor := sdk.Actor{ChainID: ourID, App: "bar", Address: []byte{2}} - p2 := NewPacket(rawTx, ourID, 2, ourActor) - packet2, update2 := otherChain.MakePostPacket(p2, start+50) - require.Nil(ourChain.Update(update2)) - - ibcPerm := sdk.Actors{AllowIBC(stack.NameOK)} - cases := []struct { - packet PostPacketTx - permissions sdk.Actors - checker errors.CheckErr - }{ - // bad chain -> error - {packetBad, ibcPerm, IsNotRegisteredErr}, - - // no matching header -> error - {packet0badHeight, nil, IsHeaderNotFoundErr}, - - // out of order -> error - {packet1, ibcPerm, IsPacketOutOfOrderErr}, - - // all good -> execute tx - {packet0, ibcPerm, errors.NoErr}, - - // bad proof -> error - {packet1badProof, ibcPerm, IsInvalidProofErr}, - - // all good -> execute tx (no special permission needed) - {packet1, nil, errors.NoErr}, - - // repeat -> error - {packet0, nil, IsPacketAlreadyExistsErr}, - - // packet2 contains invalid permissions - {packet2, nil, IsCannotSetPermissionErr}, - } - - for i, tc := range cases { - res, err := ourChain.DeliverTx(tc.packet.Wrap(), tc.permissions...) - assert.True(tc.checker(err), "%d: %+v", i, err) - if err == nil { - assert.Equal(msg, res.Log) - } - } -} diff --git a/_attic/modules/ibc/keys.go b/_attic/modules/ibc/keys.go deleted file mode 100644 index 4b5a53f980..0000000000 --- a/_attic/modules/ibc/keys.go +++ /dev/null @@ -1,60 +0,0 @@ -package ibc - -import ( - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -const ( - // this is the prefix for the list of chains - // we otherwise use the chainid as prefix, so this must not be an - // alpha-numeric byte - prefixChains = "**" - - prefixInput = "i" - prefixOutput = "o" -) - -// HandlerKey is used for the global permission info -func HandlerKey() []byte { - return []byte{0x2} -} - -// ChainsKey is the key to get info on all chains -func ChainsKey() []byte { - return stack.PrefixedKey(prefixChains, state.SetKey()) -} - -// ChainKey is the key to get info on one chain -func ChainKey(chainID string) []byte { - bkey := state.MakeBKey([]byte(chainID)) - return stack.PrefixedKey(prefixChains, bkey) -} - -// QueueInKey is the key to get newest of the input queue from this chain -func QueueInKey(chainID string) []byte { - return stack.PrefixedKey(chainID, - stack.PrefixedKey(prefixInput, - state.QueueTailKey())) -} - -// QueueOutKey is the key to get v of the output queue from this chain -func QueueOutKey(chainID string) []byte { - return stack.PrefixedKey(chainID, - stack.PrefixedKey(prefixOutput, - state.QueueTailKey())) -} - -// QueueInPacketKey is the key to get given packet from this chain's input queue -func QueueInPacketKey(chainID string, seq uint64) []byte { - return stack.PrefixedKey(chainID, - stack.PrefixedKey(prefixInput, - state.QueueItemKey(seq))) -} - -// QueueOutPacketKey is the key to get given packet from this chain's output queue -func QueueOutPacketKey(chainID string, seq uint64) []byte { - return stack.PrefixedKey(chainID, - stack.PrefixedKey(prefixOutput, - state.QueueItemKey(seq))) -} diff --git a/_attic/modules/ibc/middleware.go b/_attic/modules/ibc/middleware.go deleted file mode 100644 index 09ffabb142..0000000000 --- a/_attic/modules/ibc/middleware.go +++ /dev/null @@ -1,120 +0,0 @@ -package ibc - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -// Middleware allows us to verify the IBC proof on a packet and -// and if valid, attach this permission to the wrapped packet -type Middleware struct { - stack.PassInitState - stack.PassInitValidate -} - -var _ stack.Middleware = Middleware{} - -// NewMiddleware creates a role-checking middleware -func NewMiddleware() Middleware { - return Middleware{} -} - -// Name - return name space -func (Middleware) Name() string { - return NameIBC -} - -// CheckTx verifies the named chain and height is present, and verifies -// the merkle proof in the packet -func (m Middleware) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - // if it is not a PostPacket, just let it go through - post, ok := tx.Unwrap().(PostPacketTx) - if !ok { - return next.CheckTx(ctx, store, tx) - } - - // parse this packet and get the ibc-enhanced tx and context - ictx, itx, err := m.verifyPost(ctx, store, post) - if err != nil { - return res, err - } - return next.CheckTx(ictx, store, itx) -} - -// DeliverTx verifies the named chain and height is present, and verifies -// the merkle proof in the packet -func (m Middleware) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - // if it is not a PostPacket, just let it go through - post, ok := tx.Unwrap().(PostPacketTx) - if !ok { - return next.DeliverTx(ctx, store, tx) - } - - // parse this packet and get the ibc-enhanced tx and context - ictx, itx, err := m.verifyPost(ctx, store, post) - if err != nil { - return res, err - } - return next.DeliverTx(ictx, store, itx) -} - -// verifyPost accepts a message bound for this chain... -// TODO: think about relay -func (m Middleware) verifyPost(ctx sdk.Context, store state.SimpleDB, - tx PostPacketTx) (ictx sdk.Context, itx sdk.Tx, err error) { - - // make sure the chain is registered - from := tx.FromChainID - if !NewChainSet(store).Exists([]byte(from)) { - return ictx, itx, ErrNotRegistered(from) - } - - // TODO: how to deal with routing/relaying??? - packet := tx.Packet - if packet.DestChain != ctx.ChainID() { - return ictx, itx, ErrWrongDestChain(packet.DestChain) - } - - // verify packet.Permissions all come from the other chain - if !packet.Permissions.AllHaveChain(tx.FromChainID) { - return ictx, itx, ErrCannotSetPermission() - } - - // make sure this sequence number is the next in the list - q := InputQueue(store, from) - tail := q.Tail() - if packet.Sequence < tail { - return ictx, itx, ErrPacketAlreadyExists() - } - if packet.Sequence > tail { - return ictx, itx, ErrPacketOutOfOrder(tail) - } - - // look up the referenced header - space := stack.PrefixedStore(from, store) - provider := newDBProvider(space) - - // if the query was on height H, the proof is in header H+1 - proofHeight := int(tx.FromChainHeight + 1) - seed, err := provider.GetExactHeight(proofHeight) - if err != nil { - return ictx, itx, err - } - - // verify the merkle hash.... - root := seed.Header.AppHash - pBytes := packet.Bytes() - err = tx.Proof.Verify(tx.Key, pBytes, root) - if err != nil { - return ictx, itx, ErrInvalidProofWithReason(err) - } - - // add to input queue - q.Push(pBytes) - - // return the wrapped tx along with the extra permissions - ictx = ctx.WithPermissions(packet.Permissions...) - itx = packet.Tx - return -} diff --git a/_attic/modules/ibc/provider.go b/_attic/modules/ibc/provider.go deleted file mode 100644 index 712b6ee81d..0000000000 --- a/_attic/modules/ibc/provider.go +++ /dev/null @@ -1,105 +0,0 @@ -package ibc - -import ( - wire "github.com/tendermint/go-wire" - "github.com/tendermint/light-client/certifiers" - certerr "github.com/tendermint/light-client/certifiers/errors" - - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -const ( - prefixHash = "v" - prefixHeight = "h" - prefixPacket = "p" -) - -// newCertifier loads up the current state of this chain to make a proper certifier -// it will load the most recent height before block h if h is positive -// if h < 0, it will load the latest height -func newCertifier(store state.SimpleDB, chainID string, h int) (*certifiers.Inquiring, error) { - // each chain has their own prefixed subspace - p := newDBProvider(store) - - var fc certifiers.FullCommit - var err error - if h > 0 { - // this gets the most recent verified commit below the specified height - fc, err = p.GetByHeight(h) - } else { - // 0 or negative means start at latest commit - fc, err = p.LatestCommit() - } - if err != nil { - return nil, ErrHeaderNotFound(h) - } - - // we have no source for untrusted keys, but use the db to load trusted history - cert := certifiers.NewInquiring(chainID, fc, p, - certifiers.NewMissingProvider()) - return cert, nil -} - -// dbProvider wraps our kv store so it integrates with light-client verification -type dbProvider struct { - byHash state.SimpleDB - byHeight *state.Span -} - -func newDBProvider(store state.SimpleDB) *dbProvider { - return &dbProvider{ - byHash: stack.PrefixedStore(prefixHash, store), - byHeight: state.NewSpan(stack.PrefixedStore(prefixHeight, store)), - } -} - -var _ certifiers.Provider = &dbProvider{} - -func (d *dbProvider) StoreCommit(fc certifiers.FullCommit) error { - // TODO: don't duplicate data.... - b := wire.BinaryBytes(fc) - d.byHash.Set(fc.ValidatorsHash(), b) - d.byHeight.Set(uint64(fc.Height()), b) - return nil -} - -func (d *dbProvider) LatestCommit() (fc certifiers.FullCommit, err error) { - b, _ := d.byHeight.Top() - if b == nil { - return fc, certerr.ErrCommitNotFound() - } - err = wire.ReadBinaryBytes(b, &fc) - return -} - -func (d *dbProvider) GetByHeight(h int) (fc certifiers.FullCommit, err error) { - b, _ := d.byHeight.LTE(uint64(h)) - if b == nil { - return fc, certerr.ErrCommitNotFound() - } - err = wire.ReadBinaryBytes(b, &fc) - return -} - -func (d *dbProvider) GetByHash(hash []byte) (fc certifiers.FullCommit, err error) { - b := d.byHash.Get(hash) - if b == nil { - return fc, certerr.ErrCommitNotFound() - } - err = wire.ReadBinaryBytes(b, &fc) - return -} - -// GetExactHeight is like GetByHeight, but returns an error instead of -// closest match if there is no exact match -func (d *dbProvider) GetExactHeight(h int) (fc certifiers.FullCommit, err error) { - fc, err = d.GetByHeight(h) - if err != nil { - return - } - if fc.Height() != h { - err = ErrHeaderNotFound(h) - } - return -} diff --git a/_attic/modules/ibc/provider_test.go b/_attic/modules/ibc/provider_test.go deleted file mode 100644 index 2318f97965..0000000000 --- a/_attic/modules/ibc/provider_test.go +++ /dev/null @@ -1,136 +0,0 @@ -package ibc - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/cosmos/cosmos-sdk/state" - "github.com/tendermint/light-client/certifiers" - certerr "github.com/tendermint/light-client/certifiers/errors" -) - -func assertCommitsEqual(t *testing.T, fc, fc2 certifiers.FullCommit) { - assert := assert.New(t) - assert.Equal(fc.Height(), fc2.Height()) - assert.Equal(fc.ValidatorsHash(), fc2.ValidatorsHash()) - // TODO: more -} - -func TestProviderStore(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - // make a few commits - keys := certifiers.GenValKeys(2) - commits := makeCommits(keys, 4, "some-chain", "demo-store") - - // make a provider - store := state.NewMemKVStore() - p := newDBProvider(store) - - // check it... - _, err := p.GetByHeight(20) - require.NotNil(err) - assert.True(certerr.IsCommitNotFoundErr(err)) - - // add commits - for _, fc := range commits { - err = p.StoreCommit(fc) - require.Nil(err) - } - - // make sure we get it... - fc := commits[0] - val, err := p.GetByHeight(fc.Height()) - if assert.Nil(err) { - assertCommitsEqual(t, fc, val) - } - - // make sure we get higher - val, err = p.GetByHeight(fc.Height() + 2) - if assert.Nil(err) { - assertCommitsEqual(t, fc, val) - } - - // below is nothing - _, err = p.GetByHeight(fc.Height() - 2) - assert.True(certerr.IsCommitNotFoundErr(err)) - - // make sure we get highest - val, err = p.LatestCommit() - if assert.Nil(err) { - assertCommitsEqual(t, commits[3], val) - } - - // make sure by hash also (note all have same hash, so overwritten) - val, err = p.GetByHash(commits[1].ValidatorsHash()) - if assert.Nil(err) { - assertCommitsEqual(t, commits[3], val) - } -} - -func TestDBProvider(t *testing.T) { - store := state.NewMemKVStore() - p := newDBProvider(store) - checkProvider(t, p, "test-db", "bling") -} - -func makeCommits(keys certifiers.ValKeys, count int, chainID, app string) []certifiers.FullCommit { - appHash := []byte(app) - commits := make([]certifiers.FullCommit, count) - for i := 0; i < count; i++ { - // two commits for each validator, to check how we handle dups - // (10, 0), (10, 1), (10, 1), (10, 2), (10, 2), ... - vals := keys.ToValidators(10, int64(count/2)) - h := 20 + 10*i - commits[i] = keys.GenFullCommit(chainID, h, nil, vals, appHash, 0, len(keys)) - } - return commits -} - -func checkProvider(t *testing.T, p certifiers.Provider, chainID, app string) { - assert, require := assert.New(t), require.New(t) - keys := certifiers.GenValKeys(5) - count := 10 - - // make a bunch of commits... - commits := makeCommits(keys, count, chainID, app) - - // check provider is empty - fc, err := p.GetByHeight(20) - require.NotNil(err) - assert.True(certerr.IsCommitNotFoundErr(err)) - - fc, err = p.GetByHash(commits[3].ValidatorsHash()) - require.NotNil(err) - assert.True(certerr.IsCommitNotFoundErr(err)) - - // now add them all to the provider - for _, fc := range commits { - err = p.StoreCommit(fc) - require.Nil(err) - // and make sure we can get it back - fc2, err := p.GetByHash(fc.ValidatorsHash()) - assert.Nil(err) - assertCommitsEqual(t, fc, fc2) - // by height as well - fc2, err = p.GetByHeight(fc.Height()) - assert.Nil(err) - assertCommitsEqual(t, fc, fc2) - } - - // make sure we get the last hash if we overstep - fc, err = p.GetByHeight(5000) - if assert.Nil(err) { - assertCommitsEqual(t, commits[count-1], fc) - } - - // and middle ones as well - fc, err = p.GetByHeight(47) - if assert.Nil(err) { - // we only step by 10, so 40 must be the one below this - assert.Equal(40, fc.Height()) - } - -} diff --git a/_attic/modules/ibc/store.go b/_attic/modules/ibc/store.go deleted file mode 100644 index 6da04f004b..0000000000 --- a/_attic/modules/ibc/store.go +++ /dev/null @@ -1,122 +0,0 @@ -package ibc - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" - wire "github.com/tendermint/go-wire" -) - -// HandlerInfo is the global state of the ibc.Handler -type HandlerInfo struct { - Registrar sdk.Actor `json:"registrar"` -} - -// Save the HandlerInfo to the store -func (h HandlerInfo) Save(store state.SimpleDB) { - b := wire.BinaryBytes(h) - store.Set(HandlerKey(), b) -} - -// LoadInfo loads the HandlerInfo from the data store -func LoadInfo(store state.SimpleDB) (h HandlerInfo) { - b := store.Get(HandlerKey()) - if len(b) > 0 { - wire.ReadBinaryBytes(b, &h) - } - return -} - -// ChainInfo is the global info we store for each registered chain, -// besides the headers, proofs, and packets -type ChainInfo struct { - RegisteredAt uint64 `json:"registered_at"` - RemoteBlock int `json:"remote_block"` -} - -// ChainSet is the set of all registered chains -type ChainSet struct { - *state.Set -} - -// NewChainSet loads or initialized the ChainSet -func NewChainSet(store state.SimpleDB) ChainSet { - space := stack.PrefixedStore(prefixChains, store) - return ChainSet{ - Set: state.NewSet(space), - } -} - -// Register adds the named chain with some info -// returns error if already present -func (c ChainSet) Register(chainID string, ourHeight uint64, theirHeight int) error { - if c.Exists([]byte(chainID)) { - return ErrAlreadyRegistered(chainID) - } - info := ChainInfo{ - RegisteredAt: ourHeight, - RemoteBlock: theirHeight, - } - data := wire.BinaryBytes(info) - c.Set.Set([]byte(chainID), data) - return nil -} - -// Update sets the new tracked height on this chain -// returns error if not present -func (c ChainSet) Update(chainID string, theirHeight int) error { - d := c.Set.Get([]byte(chainID)) - if len(d) == 0 { - return ErrNotRegistered(chainID) - } - // load the data - var info ChainInfo - err := wire.ReadBinaryBytes(d, &info) - if err != nil { - return err - } - - // change the remote block and save it - info.RemoteBlock = theirHeight - d = wire.BinaryBytes(info) - c.Set.Set([]byte(chainID), d) - return nil -} - -// Packet is a wrapped transaction and permission that we want to -// send off to another chain. -type Packet struct { - DestChain string `json:"dest_chain"` - Sequence uint64 `json:"sequence"` - Permissions sdk.Actors `json:"permissions"` - Tx sdk.Tx `json:"tx"` -} - -// NewPacket creates a new outgoing packet -func NewPacket(tx sdk.Tx, dest string, seq uint64, perm ...sdk.Actor) Packet { - return Packet{ - DestChain: dest, - Sequence: seq, - Permissions: perm, - Tx: tx, - } -} - -// Bytes returns a serialization of the Packet -func (p Packet) Bytes() []byte { - return wire.BinaryBytes(p) -} - -// InputQueue returns the queue of input packets from this chain -func InputQueue(store state.SimpleDB, chainID string) *state.Queue { - ch := stack.PrefixedStore(chainID, store) - space := stack.PrefixedStore(prefixInput, ch) - return state.NewQueue(space) -} - -// OutputQueue returns the queue of output packets destined for this chain -func OutputQueue(store state.SimpleDB, chainID string) *state.Queue { - ch := stack.PrefixedStore(chainID, store) - space := stack.PrefixedStore(prefixOutput, ch) - return state.NewQueue(space) -} diff --git a/_attic/modules/ibc/test_helpers.go b/_attic/modules/ibc/test_helpers.go deleted file mode 100644 index 79960dadfb..0000000000 --- a/_attic/modules/ibc/test_helpers.go +++ /dev/null @@ -1,131 +0,0 @@ -package ibc - -import ( - "fmt" - - "github.com/tendermint/iavl" - "github.com/tendermint/light-client/certifiers" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -// MockChain is used to simulate a chain for ibc tests. -// It is able to produce ibc packets and all verification for -// them, but cannot respond to any responses. -type MockChain struct { - keys certifiers.ValKeys - chainID string - tree *iavl.Tree -} - -// NewMockChain initializes a teststore and test validators -func NewMockChain(chainID string, numKeys int) MockChain { - return MockChain{ - keys: certifiers.GenValKeys(numKeys), - chainID: chainID, - tree: iavl.NewTree(0, nil), - } -} - -// GetRegistrationTx returns a valid tx to register this chain -func (m MockChain) GetRegistrationTx(h int) RegisterChainTx { - fc := genEmptyCommit(m.keys, m.chainID, h, m.tree.Hash(), len(m.keys)) - return RegisterChainTx{fc} -} - -// MakePostPacket commits the packet locally and returns the proof, -// in the form of two packets to update the header and prove this packet. -func (m MockChain) MakePostPacket(packet Packet, h int) ( - PostPacketTx, UpdateChainTx) { - - post := makePostPacket(m.tree, packet, m.chainID, h) - fc := genEmptyCommit(m.keys, m.chainID, h+1, m.tree.Hash(), len(m.keys)) - update := UpdateChainTx{fc} - - return post, update -} - -func genEmptyCommit(keys certifiers.ValKeys, chain string, h int, - appHash []byte, count int) certifiers.FullCommit { - - vals := keys.ToValidators(10, 0) - return keys.GenFullCommit(chain, h, nil, vals, appHash, 0, count) -} - -func makePostPacket(tree *iavl.Tree, packet Packet, fromID string, fromHeight int) PostPacketTx { - key := []byte(fmt.Sprintf("some-long-prefix-%06d", packet.Sequence)) - tree.Set(key, packet.Bytes()) - _, proof, err := tree.GetWithProof(key) - if err != nil { - panic(err) - } - if proof == nil { - panic("wtf?") - } - - return PostPacketTx{ - FromChainID: fromID, - FromChainHeight: uint64(fromHeight), - Proof: proof.(*iavl.KeyExistsProof), - Key: key, - Packet: packet, - } -} - -// AppChain is ready to handle tx -type AppChain struct { - chainID string - app sdk.Handler - store state.SimpleDB - height int -} - -// NewAppChain returns a chain that is ready to respond to tx -func NewAppChain(app sdk.Handler, chainID string) *AppChain { - return &AppChain{ - chainID: chainID, - app: app, - store: state.NewMemKVStore(), - height: 123, - } -} - -// IncrementHeight allows us to jump heights, more than the auto-step -// of 1. It returns the new height we are at. -func (a *AppChain) IncrementHeight(delta int) int { - a.height += delta - return a.height -} - -// DeliverTx runs the tx and commits the new tree, incrementing height -// by one. -func (a *AppChain) DeliverTx(tx sdk.Tx, perms ...sdk.Actor) (sdk.DeliverResult, error) { - ctx := stack.MockContext(a.chainID, uint64(a.height)).WithPermissions(perms...) - store := a.store.Checkpoint() - res, err := a.app.DeliverTx(ctx, store, tx) - if err == nil { - // commit data on success - a.store.Commit(store) - } - return res, err -} - -// Update is a shortcut to DeliverTx with this. Also one return value -// to test inline -func (a *AppChain) Update(tx UpdateChainTx) error { - _, err := a.DeliverTx(tx.Wrap()) - return err -} - -// InitState sets the option on our app -func (a *AppChain) InitState(mod, key, value string) (string, error) { - return a.app.InitState(log.NewNopLogger(), a.store, mod, key, value) -} - -// GetStore is used to get the app-specific sub-store -func (a *AppChain) GetStore(app string) state.SimpleDB { - return stack.PrefixedStore(app, a.store) -} diff --git a/_attic/modules/ibc/tx.go b/_attic/modules/ibc/tx.go deleted file mode 100644 index eae5a38f94..0000000000 --- a/_attic/modules/ibc/tx.go +++ /dev/null @@ -1,133 +0,0 @@ -package ibc - -import ( - "github.com/tendermint/go-wire/data" - "github.com/tendermint/iavl" - "github.com/tendermint/light-client/certifiers" - - sdk "github.com/cosmos/cosmos-sdk" -) - -// nolint -const ( - // 0x3? series for ibc - ByteRegisterChain = byte(0x30) - ByteUpdateChain = byte(0x31) - ByteCreatePacket = byte(0x32) - BytePostPacket = byte(0x33) - - TypeRegisterChain = NameIBC + "/register" - TypeUpdateChain = NameIBC + "/update" - TypeCreatePacket = NameIBC + "/create" - TypePostPacket = NameIBC + "/post" -) - -func init() { - sdk.TxMapper. - RegisterImplementation(RegisterChainTx{}, TypeRegisterChain, ByteRegisterChain). - RegisterImplementation(UpdateChainTx{}, TypeUpdateChain, ByteUpdateChain). - RegisterImplementation(CreatePacketTx{}, TypeCreatePacket, ByteCreatePacket). - RegisterImplementation(PostPacketTx{}, TypePostPacket, BytePostPacket) -} - -// RegisterChainTx allows you to register a new chain on this blockchain -type RegisterChainTx struct { - Commit certifiers.FullCommit `json:"seed"` -} - -// ChainID helps get the chain this tx refers to -func (r RegisterChainTx) ChainID() string { - return r.Commit.Header.ChainID -} - -// ValidateBasic makes sure this is consistent, without checking the sigs -func (r RegisterChainTx) ValidateBasic() error { - err := r.Commit.ValidateBasic(r.ChainID()) - if err != nil { - err = ErrInvalidCommit(err) - } - return err -} - -// Wrap - used to satisfy TxInner -func (r RegisterChainTx) Wrap() sdk.Tx { - return sdk.Tx{r} -} - -// UpdateChainTx updates the state of this chain -type UpdateChainTx struct { - Commit certifiers.FullCommit `json:"seed"` -} - -// ChainID helps get the chain this tx refers to -func (u UpdateChainTx) ChainID() string { - return u.Commit.Header.ChainID -} - -// ValidateBasic makes sure this is consistent, without checking the sigs -func (u UpdateChainTx) ValidateBasic() error { - err := u.Commit.ValidateBasic(u.ChainID()) - if err != nil { - err = ErrInvalidCommit(err) - } - return err -} - -// Wrap - used to satisfy TxInner -func (u UpdateChainTx) Wrap() sdk.Tx { - return sdk.Tx{u} -} - -// CreatePacketTx is meant to be called by IPC, another module... -// -// this is the tx that will be sent to another app and the permissions it -// comes with (which must be a subset of the permissions on the current tx) -// -// If must have the special `AllowIBC` permission from the app -// that can send this packet (so only coins can request SendTx packet) -type CreatePacketTx struct { - DestChain string `json:"dest_chain"` - Permissions sdk.Actors `json:"permissions"` - Tx sdk.Tx `json:"tx"` -} - -// ValidateBasic makes sure this is consistent - used to satisfy TxInner -func (p CreatePacketTx) ValidateBasic() error { - if p.DestChain == "" { - return ErrWrongDestChain(p.DestChain) - } - return nil -} - -// Wrap - used to satisfy TxInner -func (p CreatePacketTx) Wrap() sdk.Tx { - return sdk.Tx{p} -} - -// PostPacketTx takes a wrapped packet from another chain and -// TODO!!! -// also think... which chains can relay packets??? -// right now, enforce that these packets are only sent directly, -// not routed over the hub. add routing later. -type PostPacketTx struct { - // The immediate source of the packet, not always Packet.SrcChainID - FromChainID string `json:"src_chain"` - // The block height in which Packet was committed, to check Proof - // AppHash for the proof in header for FromChainHeight+1 - FromChainHeight uint64 `json:"src_height"` - // this proof must match the header and the packet.Bytes() - Proof *iavl.KeyExistsProof `json:"proof"` - Key data.Bytes `json:"key"` - Packet Packet `json:"packet"` -} - -// ValidateBasic makes sure this is consistent - used to satisfy TxInner -func (p PostPacketTx) ValidateBasic() error { - // TODO - return nil -} - -// Wrap - used to satisfy TxInner -func (p PostPacketTx) Wrap() sdk.Tx { - return sdk.Tx{p} -} diff --git a/_attic/modules/roles/commands/query.go b/_attic/modules/roles/commands/query.go deleted file mode 100644 index 5fbc22405d..0000000000 --- a/_attic/modules/roles/commands/query.go +++ /dev/null @@ -1,39 +0,0 @@ -package commands - -import ( - "github.com/spf13/cobra" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/client/commands/query" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/cosmos/cosmos-sdk/stack" -) - -// RoleQueryCmd - command to query a role -var RoleQueryCmd = &cobra.Command{ - Use: "role [name]", - Short: "Get details of a role, with proof", - RunE: commands.RequireInit(roleQueryCmd), -} - -func roleQueryCmd(cmd *cobra.Command, args []string) error { - arg, err := commands.GetOneArg(args, "name") - if err != nil { - return err - } - role, err := parseRole(arg) - if err != nil { - return err - } - - var res roles.Role - key := stack.PrefixedKey(roles.NameRole, role) - prove := !viper.GetBool(commands.FlagTrustNode) - height, err := query.GetParsed(key, &res, query.GetHeight(), prove) - if err != nil { - return err - } - - return query.OutputProof(res, height) -} diff --git a/_attic/modules/roles/commands/tx.go b/_attic/modules/roles/commands/tx.go deleted file mode 100644 index 2b018f1a8c..0000000000 --- a/_attic/modules/roles/commands/tx.go +++ /dev/null @@ -1,65 +0,0 @@ -package commands - -import ( - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/client/commands" - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - "github.com/cosmos/cosmos-sdk/modules/roles" -) - -// CreateRoleTxCmd is CLI command to create a new role -var CreateRoleTxCmd = &cobra.Command{ - Use: "create-role", - Short: "Create a new role", - RunE: commands.RequireInit(createRoleTxCmd), -} - -//nolint -const ( - FlagRole = "role" - FlagMembers = "members" - FlagMinSigs = "min-sigs" -) - -func init() { - flags := CreateRoleTxCmd.Flags() - flags.String(FlagRole, "", "Name of the role to create") - flags.String(FlagMembers, "", "Set of comma-separated addresses for this role") - flags.Int(FlagMinSigs, 0, "Minimum number of signatures needed to assume this role") -} - -// createRoleTxCmd creates a basic role tx and then wraps, signs, and posts it -func createRoleTxCmd(cmd *cobra.Command, args []string) error { - tx, err := readCreateRoleTxFlags() - if err != nil { - return err - } - return txcmd.DoTx(tx) -} - -func readCreateRoleTxFlags() (tx sdk.Tx, err error) { - role, err := parseRole(viper.GetString(FlagRole)) - if err != nil { - return tx, err - } - - sigs := viper.GetInt(FlagMinSigs) - if sigs < 1 { - return tx, errors.Errorf("--%s must be at least 1", FlagMinSigs) - } - - signers, err := commands.ParseActors(viper.GetString(FlagMembers)) - if err != nil { - return tx, err - } - if len(signers) == 0 { - return tx, errors.New("must specify at least one member") - } - - tx = roles.NewCreateRoleTx(role, uint32(sigs), signers) - return tx, nil -} diff --git a/_attic/modules/roles/commands/wrap.go b/_attic/modules/roles/commands/wrap.go deleted file mode 100644 index 9ea855e9e4..0000000000 --- a/_attic/modules/roles/commands/wrap.go +++ /dev/null @@ -1,59 +0,0 @@ -package commands - -import ( - "encoding/hex" - - "github.com/spf13/pflag" - "github.com/spf13/viper" - - abci "github.com/tendermint/abci/types" - cmn "github.com/tendermint/tmlibs/common" - - sdk "github.com/cosmos/cosmos-sdk" - txcmd "github.com/cosmos/cosmos-sdk/client/commands/txs" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/modules/roles" -) - -// nolint -const ( - FlagAssumeRole = "assume-role" -) - -// RoleWrapper wraps a tx with 0, 1, or more roles -type RoleWrapper struct{} - -var _ txcmd.Wrapper = RoleWrapper{} - -// Wrap grabs the sequence number from the flag and wraps -// the tx with this nonce. Grabs the permission from the signer, -// as we still only support single sig on the cli -func (RoleWrapper) Wrap(tx sdk.Tx) (sdk.Tx, error) { - assume := viper.GetStringSlice(FlagAssumeRole) - - // we wrap from inside-out, so we must wrap them in the reverse order, - // so they are applied in the order the user intended - for i := len(assume) - 1; i >= 0; i-- { - r, err := parseRole(assume[i]) - if err != nil { - return tx, err - } - tx = roles.NewAssumeRoleTx(r, tx) - } - return tx, nil -} - -// Register adds the sequence flags to the cli -func (RoleWrapper) Register(fs *pflag.FlagSet) { - fs.StringSlice(FlagAssumeRole, nil, "Roles to assume (can use multiple times)") -} - -// parse role turns the string->byte... todo: support hex? -func parseRole(role string) ([]byte, error) { - res, err := hex.DecodeString(cmn.StripHex(role)) - if err != nil { - err = errors.WithMessage("Address is invalid hex", err, - abci.CodeType_EncodingError) - } - return res, err -} diff --git a/_attic/modules/roles/error.go b/_attic/modules/roles/error.go deleted file mode 100644 index 4abdbf8956..0000000000 --- a/_attic/modules/roles/error.go +++ /dev/null @@ -1,73 +0,0 @@ -//nolint -package roles - -import ( - "fmt" - - abci "github.com/tendermint/abci/types" - - "github.com/cosmos/cosmos-sdk/errors" -) - -var ( - errNoRole = fmt.Errorf("No such role") - errRoleExists = fmt.Errorf("Role already exists") - errNotMember = fmt.Errorf("Not a member") - errInsufficientSigs = fmt.Errorf("Not enough signatures") - errNoMembers = fmt.Errorf("No members specified") - errTooManyMembers = fmt.Errorf("Too many members specified") - errNotEnoughMembers = fmt.Errorf("Not enough members specified") - - unauthorized = abci.CodeType_Unauthorized -) - -// TODO: codegen? -// ex: err-gen NoRole,"No such role",CodeType_Unauthorized -func ErrNoRole() errors.TMError { - return errors.WithCode(errNoRole, unauthorized) -} -func IsNoRoleErr(err error) bool { - return errors.IsSameError(errNoRole, err) -} - -func ErrRoleExists() errors.TMError { - return errors.WithCode(errRoleExists, unauthorized) -} -func IsRoleExistsErr(err error) bool { - return errors.IsSameError(errRoleExists, err) -} - -func ErrNotMember() errors.TMError { - return errors.WithCode(errNotMember, unauthorized) -} -func IsNotMemberErr(err error) bool { - return errors.IsSameError(errNotMember, err) -} - -func ErrInsufficientSigs() errors.TMError { - return errors.WithCode(errInsufficientSigs, unauthorized) -} -func IsInsufficientSigsErr(err error) bool { - return errors.IsSameError(errInsufficientSigs, err) -} - -func ErrNoMembers() errors.TMError { - return errors.WithCode(errNoMembers, unauthorized) -} -func IsNoMembersErr(err error) bool { - return errors.IsSameError(errNoMembers, err) -} - -func ErrTooManyMembers() errors.TMError { - return errors.WithCode(errTooManyMembers, unauthorized) -} -func IsTooManyMembersErr(err error) bool { - return errors.IsSameError(errTooManyMembers, err) -} - -func ErrNotEnoughMembers() errors.TMError { - return errors.WithCode(errNotEnoughMembers, unauthorized) -} -func IsNotEnoughMembersErr(err error) bool { - return errors.IsSameError(errNotEnoughMembers, err) -} diff --git a/_attic/modules/roles/handler.go b/_attic/modules/roles/handler.go deleted file mode 100644 index f70091e89c..0000000000 --- a/_attic/modules/roles/handler.go +++ /dev/null @@ -1,71 +0,0 @@ -package roles - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -const ( - //NameRole - name space of the roles module - NameRole = "role" - // CostCreate is the cost to create a new role - CostCreate = uint64(40) - // CostAssume is the cost to assume a role as part of a tx - CostAssume = uint64(5) -) - -// Handler allows us to create new roles -type Handler struct { - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = Handler{} - -// NewHandler makes a role handler to create roles -func NewHandler() Handler { - return Handler{} -} - -// Name - return name space -func (Handler) Name() string { - return NameRole -} - -// CheckTx verifies if the transaction is properly formated -func (h Handler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - var cr CreateRoleTx - cr, err = checkTx(ctx, tx) - if err != nil { - return - } - res = sdk.NewCheck(CostCreate, "") - err = checkNoRole(store, cr.Role) - return -} - -// DeliverTx tries to create a new role. -// -// Returns an error if the role already exists -func (h Handler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - create, err := checkTx(ctx, tx) - if err != nil { - return res, err - } - - // lets try... - role := NewRole(create.MinSigs, create.Signers) - err = createRole(store, create.Role, role) - return res, err -} - -func checkTx(ctx sdk.Context, tx sdk.Tx) (create CreateRoleTx, err error) { - // check if the tx is proper type and valid - create, ok := tx.Unwrap().(CreateRoleTx) - if !ok { - return create, errors.ErrInvalidFormat(TypeCreateRoleTx, tx) - } - err = create.ValidateBasic() - return create, err -} diff --git a/_attic/modules/roles/handler_test.go b/_attic/modules/roles/handler_test.go deleted file mode 100644 index f654f5acee..0000000000 --- a/_attic/modules/roles/handler_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package roles_test - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -func TestCreateRole(t *testing.T) { - assert := assert.New(t) - - a := sdk.Actor{App: "foo", Address: []byte("bar")} - b := sdk.Actor{ChainID: "eth", App: "foo", Address: []byte("bar")} - c := sdk.Actor{App: "foo", Address: []byte("baz")} - d := sdk.Actor{App: "si-ly", Address: []byte("bar")} - - cases := []struct { - valid bool - role string - min uint32 - sigs []sdk.Actor - }{ - {true, "awesome", 1, []sdk.Actor{a}}, - {true, "cool", 2, []sdk.Actor{b, c, d}}, - {false, "oops", 3, []sdk.Actor{a, d}}, // too many - {false, "ugh", 0, []sdk.Actor{a, d}}, // too few - {false, "phew", 1, []sdk.Actor{}}, // none - {false, "cool", 1, []sdk.Actor{c, d}}, // duplicate of existing one - } - - h := roles.NewHandler() - ctx := stack.MockContext("role-chain", 123) - store := state.NewMemKVStore() - for i, tc := range cases { - tx := roles.NewCreateRoleTx([]byte(tc.role), tc.min, tc.sigs) - cres, err := h.CheckTx(ctx, store, tx) - _, err2 := h.DeliverTx(ctx, store, tx) - if tc.valid { - assert.Nil(err, "%d/%s: %+v", i, tc.role, err) - assert.Nil(err2, "%d/%s: %+v", i, tc.role, err2) - assert.Equal(roles.CostCreate, cres.GasAllocated) - assert.Equal(uint64(0), cres.GasPayment) - } else { - assert.NotNil(err, "%d/%s", i, tc.role) - assert.NotNil(err2, "%d/%s", i, tc.role) - } - } -} diff --git a/_attic/modules/roles/middleware.go b/_attic/modules/roles/middleware.go deleted file mode 100644 index 73d9255c8b..0000000000 --- a/_attic/modules/roles/middleware.go +++ /dev/null @@ -1,85 +0,0 @@ -package roles - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -// Middleware allows us to add a requested role as a permission -// if the tx requests it and has sufficient authority -type Middleware struct { - stack.PassInitState - stack.PassInitValidate -} - -var _ stack.Middleware = Middleware{} - -// NewMiddleware creates a role-checking middleware -func NewMiddleware() Middleware { - return Middleware{} -} - -// Name - return name space -func (Middleware) Name() string { - return NameRole -} - -// CheckTx tries to assume the named role if requested. -// If no role is requested, do nothing. -// If insufficient authority to assume the role, return error. -func (m Middleware) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - // if this is not an AssumeRoleTx, then continue - assume, ok := tx.Unwrap().(AssumeRoleTx) - if !ok { // this also breaks the recursion below - return next.CheckTx(ctx, store, tx) - } - - ctx, err = assumeRole(ctx, store, assume) - if err != nil { - return res, err - } - - // one could add multiple role statements, repeat as needed - // charging for each level - res, err = m.CheckTx(ctx, store, assume.Tx, next) - res.GasAllocated += CostAssume - return -} - -// DeliverTx tries to assume the named role if requested. -// If no role is requested, do nothing. -// If insufficient authority to assume the role, return error. -func (m Middleware) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - // if this is not an AssumeRoleTx, then continue - assume, ok := tx.Unwrap().(AssumeRoleTx) - if !ok { // this also breaks the recursion below - return next.DeliverTx(ctx, store, tx) - } - - ctx, err = assumeRole(ctx, store, assume) - if err != nil { - return res, err - } - - // one could add multiple role statements, repeat as needed - return m.DeliverTx(ctx, store, assume.Tx, next) -} - -func assumeRole(ctx sdk.Context, store state.SimpleDB, assume AssumeRoleTx) (sdk.Context, error) { - err := assume.ValidateBasic() - if err != nil { - return nil, err - } - - role, err := loadRole(store, assume.Role) - if err != nil { - return nil, err - } - - if !role.IsAuthorized(ctx) { - return nil, ErrInsufficientSigs() - } - ctx = ctx.WithPermissions(NewPerm(assume.Role)) - return ctx, nil -} diff --git a/_attic/modules/roles/middleware_test.go b/_attic/modules/roles/middleware_test.go deleted file mode 100644 index 459405cf9c..0000000000 --- a/_attic/modules/roles/middleware_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package roles_test - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/tendermint/go-wire/data" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/cosmos/cosmos-sdk/stack" - "github.com/cosmos/cosmos-sdk/state" -) - -// shortcut for the lazy -type ba []sdk.Actor - -func createRole(app sdk.Handler, store state.SimpleDB, - name []byte, min uint32, sigs ...sdk.Actor) (sdk.Actor, error) { - tx := roles.NewCreateRoleTx(name, min, sigs) - ctx := stack.MockContext("foo", 1) - _, err := app.DeliverTx(ctx, store, tx) - return roles.NewPerm(name), err -} - -func TestAssumeRole(t *testing.T) { - assert := assert.New(t) - require := require.New(t) - - // one handle to add a role, another to check permissions - disp := stack.NewDispatcher( - stack.WrapHandler(roles.NewHandler()), - stack.WrapHandler(stack.CheckHandler{}), - ) - // and wrap with the roles middleware - app := stack.New(roles.NewMiddleware()).Use(disp) - - // basic state for the app - ctx := stack.MockContext("role-chain", 123) - store := state.NewMemKVStore() - - // potential actors - a := sdk.Actor{App: "sig", Address: []byte("jae")} - b := sdk.Actor{App: "sig", Address: []byte("bucky")} - c := sdk.Actor{App: "sig", Address: []byte("ethan")} - d := sdk.Actor{App: "tracko", Address: []byte("rigel")} - - // devs is a 2-of-3 multisig - devs := data.Bytes{0, 1, 0, 1} - pdev, err := createRole(app, store, devs, 2, b, c, d) - require.Nil(err) - - // deploy requires a dev role, or supreme authority - // shows how we can build larger constructs, eg. (A and B) OR C - deploy := data.Bytes("deploy") - pdeploy, err := createRole(app, store, deploy, 1, a, pdev) - require.Nil(err) - - // now, let's test the roles are set properly - cases := []struct { - valid bool - // which roles we try to assume (can be multiple!) - // note: that wrapping is FILO, so tries to assume last role first - roles []data.Bytes - signers []sdk.Actor // which people sign the tx - required []sdk.Actor // which permission we require to succeed - }{ - // basic checks to see logic works - {true, nil, nil, nil}, - {true, nil, ba{b, c}, ba{b}}, - {false, nil, ba{b}, ba{b, c}}, - - // simple role check - {false, []data.Bytes{devs}, ba{a, b}, ba{pdev}}, // not enough sigs - {false, nil, ba{b, c}, ba{pdev}}, // must explicitly request group status - {true, []data.Bytes{devs}, ba{b, c}, ba{pdev}}, // ahh... better - {true, []data.Bytes{deploy}, ba{a, b}, ba{b, pdeploy}}, // deploy also works - - // multiple levels of roles - must be in correct order - assume dev, then deploy - {false, []data.Bytes{devs, deploy}, ba{c, d}, ba{pdeploy}}, - {true, []data.Bytes{deploy, devs}, ba{c, d}, ba{pdev, pdeploy}}, - } - - for i, tc := range cases { - // set the signers, the required check - myCtx := ctx.WithPermissions(tc.signers...) - tx := stack.NewCheckTx(tc.required) - // and the roles we attempt to assume - for _, r := range tc.roles { - tx = roles.NewAssumeRoleTx(r, tx) - } - - // try CheckTx and DeliverTx and make sure they both assert permissions - cres, err := app.CheckTx(myCtx, store, tx) - _, err2 := app.DeliverTx(myCtx, store, tx) - if tc.valid { - assert.Nil(err, "%d: %+v", i, err) - assert.Nil(err2, "%d: %+v", i, err2) - // make sure we charge for each role - assert.Equal(roles.CostAssume*uint64(len(tc.roles)), cres.GasAllocated) - assert.Equal(uint64(0), cres.GasPayment) - } else { - assert.NotNil(err, "%d", i) - assert.NotNil(err2, "%d", i) - } - } -} diff --git a/_attic/modules/roles/rest/handlers.go b/_attic/modules/roles/rest/handlers.go deleted file mode 100644 index 1943634a34..0000000000 --- a/_attic/modules/roles/rest/handlers.go +++ /dev/null @@ -1,82 +0,0 @@ -package rest - -import ( - "encoding/hex" - "net/http" - - "github.com/gorilla/mux" - - abci "github.com/tendermint/abci/types" - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/client/commands" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/modules/base" - "github.com/cosmos/cosmos-sdk/modules/nonce" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/tendermint/tmlibs/common" -) - -// RoleInput encapsulates the fields needed to create a role -type RoleInput struct { - // Role is a hex encoded string of the role name - // for example, instead of "role" as the name, its - // hex encoded version "726f6c65". - Role string `json:"role" validate:"required,min=2"` - - MinimumSigners uint32 `json:"min_sigs" validate:"required,min=1"` - - Signers []sdk.Actor `json:"signers" validate:"required,min=1"` - - // Sequence is the user defined field whose purpose is to - // prevent replay attacks when creating a role, since it - // ensures that for a successful role creation, the previous - // sequence number should have been looked up by the caller. - Sequence uint32 `json:"seq" validate:"required,min=1"` -} - -func decodeRoleHex(roleInHex string) ([]byte, error) { - parsedRole, err := hex.DecodeString(common.StripHex(roleInHex)) - if err != nil { - err = errors.WithMessage("invalid hex", err, abci.CodeType_EncodingError) - return nil, err - } - return parsedRole, nil -} - -// mux.Router registrars - -// RegisterCreateRole is a mux.Router handler that exposes POST -// method access on route /build/create_role to create a role. -func RegisterCreateRole(r *mux.Router) error { - r.HandleFunc("/build/create_role", doCreateRole).Methods("POST") - return nil -} - -func doCreateRole(w http.ResponseWriter, r *http.Request) { - ri := new(RoleInput) - if err := common.ParseRequestAndValidateJSON(r, ri); err != nil { - common.WriteError(w, err) - return - } - - parsedRole, err := decodeRoleHex(ri.Role) - if err != nil { - common.WriteError(w, err) - return - } - - // Note the ordering of Tx wrapping matters: - // 1. NonceTx - tx := (nonce.Tx{}).Wrap() - tx = nonce.NewTx(ri.Sequence, ri.Signers, tx) - - // 2. CreateRoleTx - tx = roles.NewCreateRoleTx(parsedRole, ri.MinimumSigners, ri.Signers) - - // 3. ChainTx - tx = base.NewChainTx(commands.GetChainID(), 0, tx) - - common.WriteSuccess(w, tx) -} - -// End of mux.Router registrars diff --git a/_attic/modules/roles/store.go b/_attic/modules/roles/store.go deleted file mode 100644 index 6268d40971..0000000000 --- a/_attic/modules/roles/store.go +++ /dev/null @@ -1,87 +0,0 @@ -package roles - -import ( - "fmt" - - wire "github.com/tendermint/go-wire" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -// NewPerm creates a role permission with the given label -func NewPerm(role []byte) sdk.Actor { - return sdk.Actor{ - App: NameRole, - Address: role, - } -} - -// Role - structure to hold permissioning -type Role struct { - MinSigs uint32 `json:"min_sigs"` - Signers []sdk.Actor `json:"signers"` -} - -// NewRole creates a Role structure to store the permissioning -func NewRole(min uint32, signers []sdk.Actor) Role { - return Role{ - MinSigs: min, - Signers: signers, - } -} - -// IsSigner checks if the given Actor is allowed to sign this role -func (r Role) IsSigner(a sdk.Actor) bool { - for _, s := range r.Signers { - if a.Equals(s) { - return true - } - } - return false -} - -// IsAuthorized checks if the context has permission to assume the role -func (r Role) IsAuthorized(ctx sdk.Context) bool { - needed := r.MinSigs - for _, s := range r.Signers { - if ctx.HasPermission(s) { - needed-- - if needed <= 0 { - return true - } - } - } - return false -} - -func loadRole(store state.SimpleDB, key []byte) (role Role, err error) { - data := store.Get(key) - if len(data) == 0 { - return role, ErrNoRole() - } - err = wire.ReadBinaryBytes(data, &role) - if err != nil { - msg := fmt.Sprintf("Error reading role %X", key) - return role, errors.ErrInternal(msg) - } - return role, nil -} - -func checkNoRole(store state.SimpleDB, key []byte) error { - if _, err := loadRole(store, key); !IsNoRoleErr(err) { - return ErrRoleExists() - } - return nil -} - -// we only have create here, no update, since we don't allow update yet -func createRole(store state.SimpleDB, key []byte, role Role) error { - if err := checkNoRole(store, key); err != nil { - return err - } - bin := wire.BinaryBytes(role) - store.Set(key, bin) - return nil // real stores can return error... -} diff --git a/_attic/modules/roles/store_test.go b/_attic/modules/roles/store_test.go deleted file mode 100644 index 445a93c726..0000000000 --- a/_attic/modules/roles/store_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package roles_test - -import ( - "strconv" - "testing" - - "github.com/stretchr/testify/assert" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/modules/roles" - "github.com/cosmos/cosmos-sdk/stack" -) - -func TestRole(t *testing.T) { - assert := assert.New(t) - - // prepare some actors... - a := sdk.Actor{App: "foo", Address: []byte("bar")} - b := sdk.Actor{ChainID: "eth", App: "foo", Address: []byte("bar")} - c := sdk.Actor{App: "foo", Address: []byte("baz")} - d := sdk.Actor{App: "si-ly", Address: []byte("bar")} - e := sdk.Actor{App: "si-ly", Address: []byte("big")} - f := sdk.Actor{App: "sig", Address: []byte{1}} - g := sdk.Actor{App: "sig", Address: []byte{2, 3, 4}} - - cases := []struct { - sigs uint32 - allowed []sdk.Actor - signers []sdk.Actor - valid bool - }{ - // make sure simple compare is correct - {1, []sdk.Actor{a}, []sdk.Actor{a}, true}, - {1, []sdk.Actor{a}, []sdk.Actor{b}, false}, - {1, []sdk.Actor{a}, []sdk.Actor{c}, false}, - {1, []sdk.Actor{a}, []sdk.Actor{d}, false}, - // make sure multi-sig counts to 1 - {1, []sdk.Actor{a, b, c}, []sdk.Actor{d, e, a, f}, true}, - {1, []sdk.Actor{a, b, c}, []sdk.Actor{a, b, c, d}, true}, - {1, []sdk.Actor{a, b, c}, []sdk.Actor{d, e, f}, false}, - // make sure multi-sig counts higher - {2, []sdk.Actor{b, e, g}, []sdk.Actor{g, c, a, d, b}, true}, - {2, []sdk.Actor{b, e, g}, []sdk.Actor{c, a, d, b}, false}, - {3, []sdk.Actor{a, b, c}, []sdk.Actor{g}, false}, - } - - for idx, tc := range cases { - i := strconv.Itoa(idx) - // make sure IsSigner works - role := roles.NewRole(tc.sigs, tc.allowed) - for _, a := range tc.allowed { - assert.True(role.IsSigner(a), i) - } - // make sure IsAuthorized works - ctx := stack.MockContext("chain-id", 100).WithPermissions(tc.signers...) - allowed := role.IsAuthorized(ctx) - assert.Equal(tc.valid, allowed, i) - } - -} diff --git a/_attic/modules/roles/tx.go b/_attic/modules/roles/tx.go deleted file mode 100644 index c059478834..0000000000 --- a/_attic/modules/roles/tx.go +++ /dev/null @@ -1,98 +0,0 @@ -package roles - -import ( - "github.com/tendermint/go-wire/data" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" -) - -var ( - // MaxMembers it the maximum number of members in a Role. Used to avoid - // extremely large roles. - // Value is arbitrary, please adjust as needed - MaxMembers = 20 -) - -//nolint -const ( - ByteAssumeRoleTx = 0x23 - ByteCreateRoleTx = 0x24 - - TypeAssumeRoleTx = NameRole + "/assume" // no prefix needed as it is middleware - TypeCreateRoleTx = NameRole + "/create" // prefix needed for dispatcher -) - -func init() { - sdk.TxMapper. - RegisterImplementation(AssumeRoleTx{}, TypeAssumeRoleTx, ByteAssumeRoleTx). - RegisterImplementation(CreateRoleTx{}, TypeCreateRoleTx, ByteCreateRoleTx) -} - -// AssumeRoleTx is a layered tx that can wrap your normal tx to give it -// the authority to use a given role. -type AssumeRoleTx struct { - Role data.Bytes `json:"role"` - Tx sdk.Tx `json:"tx"` -} - -// NewAssumeRoleTx creates a new wrapper to add a role to a tx execution -func NewAssumeRoleTx(role []byte, tx sdk.Tx) sdk.Tx { - return AssumeRoleTx{Role: role, Tx: tx}.Wrap() -} - -// ValidateBasic - validate nothing is empty -func (tx AssumeRoleTx) ValidateBasic() error { - if len(tx.Role) == 0 { - return ErrNoRole() - } - if tx.Tx.Empty() { - return errors.ErrUnknownTxType(tx.Tx) - } - return nil -} - -// Wrap - used to satisfy TxInner -func (tx AssumeRoleTx) Wrap() sdk.Tx { - return sdk.Tx{tx} -} - -// CreateRoleTx is used to construct a new role -// -// TODO: add ability to update signers on a role... but that adds a lot -// more complexity to the permissions -type CreateRoleTx struct { - Role data.Bytes `json:"role"` - MinSigs uint32 `json:"min_sigs"` - Signers []sdk.Actor `json:"signers"` -} - -// NewCreateRoleTx creates a new role, which we can later use -func NewCreateRoleTx(role []byte, minSigs uint32, signers []sdk.Actor) sdk.Tx { - return CreateRoleTx{Role: role, MinSigs: minSigs, Signers: signers}.Wrap() -} - -// ValidateBasic - validate nothing is empty -func (tx CreateRoleTx) ValidateBasic() error { - if len(tx.Role) == 0 { - return ErrNoRole() - } - if tx.MinSigs == 0 { - return ErrNoMembers() - } - if len(tx.Signers) == 0 { - return ErrNoMembers() - } - if len(tx.Signers) < int(tx.MinSigs) { - return ErrNotEnoughMembers() - } - if len(tx.Signers) > MaxMembers { - return ErrTooManyMembers() - } - return nil -} - -// Wrap - used to satisfy TxInner -func (tx CreateRoleTx) Wrap() sdk.Tx { - return sdk.Tx{tx} -} diff --git a/_attic/modules/stack/checkpoint.go b/_attic/modules/stack/checkpoint.go deleted file mode 100644 index 53c32b88bb..0000000000 --- a/_attic/modules/stack/checkpoint.go +++ /dev/null @@ -1,52 +0,0 @@ -package stack - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -//nolint -const ( - NameCheckpoint = "check" -) - -// Checkpoint isolates all data store below this -type Checkpoint struct { - OnCheck bool - OnDeliver bool - PassInitState - PassInitValidate -} - -// Name of the module - fulfills Middleware interface -func (Checkpoint) Name() string { - return NameCheckpoint -} - -var _ Middleware = Checkpoint{} - -// CheckTx reverts all data changes if there was an error -func (c Checkpoint) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - if !c.OnCheck { - return next.CheckTx(ctx, store, tx) - } - ps := store.Checkpoint() - res, err = next.CheckTx(ctx, ps, tx) - if err == nil { - err = store.Commit(ps) - } - return res, err -} - -// DeliverTx reverts all data changes if there was an error -func (c Checkpoint) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - if !c.OnDeliver { - return next.DeliverTx(ctx, store, tx) - } - ps := store.Checkpoint() - res, err = next.DeliverTx(ctx, ps, tx) - if err == nil { - err = store.Commit(ps) - } - return res, err -} diff --git a/_attic/modules/stack/checkpoint_test.go b/_attic/modules/stack/checkpoint_test.go deleted file mode 100644 index 1cad0121e4..0000000000 --- a/_attic/modules/stack/checkpoint_test.go +++ /dev/null @@ -1,114 +0,0 @@ -package stack - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/tendermint/iavl" - db "github.com/tendermint/tmlibs/db" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -func makeState() state.SimpleDB { - // return state.NewMemKVStore() - - return state.NewBonsai(iavl.NewVersionedTree(0, db.NewMemDB())) - - // tree with persistence.... - // tmpDir, err := ioutil.TempDir("", "state-tests") - // if err != nil { - // panic(err) - // } - // db := dbm.NewDB("test-get-dbs", dbm.LevelDBBackendStr, tmpDir) - // persist := iavl.NewIAVLTree(500, db) - // return state.NewBonsai(persist) -} - -func TestCheckpointer(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - good := writerHand{name: "foo", key: []byte{1, 2}, value: []byte("bar")} - bad := FailHandler{Err: errors.New("no go")} - - app := New( - Checkpoint{OnCheck: true}, - writerMid{name: "bing", key: []byte{1, 2}, value: []byte("bang")}, - Checkpoint{OnDeliver: true}, - ).Use( - NewDispatcher( - WrapHandler(good), - WrapHandler(bad), - )) - - sdk.TxMapper.RegisterImplementation(RawTx{}, good.Name(), byte(80)) - - mid := state.Model{ - Key: []byte{'b', 'i', 'n', 'g', 0, 1, 2}, - Value: []byte("bang"), - } - end := state.Model{ - Key: []byte{'f', 'o', 'o', 0, 1, 2}, - Value: []byte("bar"), - } - - cases := []struct { - // tx to send down the line - tx sdk.Tx - // expect no error? - valid bool - // models to check afterwards - toGetCheck []state.Model - // models to check afterwards - toGetDeliver []state.Model - }{ - // everything writen on success - { - tx: NewRawTx([]byte{45, 67}), - valid: true, - toGetCheck: []state.Model{mid, end}, - toGetDeliver: []state.Model{mid, end}, - }, - // mostly reverted on failure - { - tx: NewFailTx(), - valid: false, - toGetCheck: []state.Model{}, - toGetDeliver: []state.Model{mid}, - }, - } - - for i, tc := range cases { - ctx := NewContext("foo", 100, log.NewNopLogger()) - - store := makeState() - _, err := app.CheckTx(ctx, store, tc.tx) - if tc.valid { - require.Nil(err, "%+v", err) - } else { - require.NotNil(err) - } - for _, m := range tc.toGetCheck { - val := store.Get(m.Key) - assert.EqualValues(m.Value, val, "%d: %#v", i, m) - } - - store = makeState() - _, err = app.DeliverTx(ctx, store, tc.tx) - if tc.valid { - require.Nil(err, "%+v", err) - } else { - require.NotNil(err) - } - for _, m := range tc.toGetDeliver { - val := store.Get(m.Key) - assert.EqualValues(m.Value, val, "%d: %#v", i, m) - } - - } -} diff --git a/_attic/modules/stack/context.go b/_attic/modules/stack/context.go deleted file mode 100644 index f923e89ad9..0000000000 --- a/_attic/modules/stack/context.go +++ /dev/null @@ -1,124 +0,0 @@ -package stack - -import ( - "github.com/pkg/errors" - - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -// store nonce as it's own type so no one can even try to fake it -type nonce int64 - -type secureContext struct { - app string - ibc bool - // this exposes the log.Logger and all other methods we don't override - naiveContext -} - -// NewContext - create a new secureContext -func NewContext(chain string, height uint64, logger log.Logger) sdk.Context { - mock := MockContext(chain, height).(naiveContext) - mock.Logger = logger - return secureContext{ - naiveContext: mock, - } -} - -var _ sdk.Context = secureContext{} - -// WithPermissions will panic if they try to set permission without the proper app -func (c secureContext) WithPermissions(perms ...sdk.Actor) sdk.Context { - // the guard makes sure you only set permissions for the app you are inside - for _, p := range perms { - if !c.validPermission(p) { - err := errors.Errorf("Cannot set permission for %s/%s on (app=%s, ibc=%b)", - p.ChainID, p.App, c.app, c.ibc) - panic(err) - } - } - - return secureContext{ - app: c.app, - ibc: c.ibc, - naiveContext: c.naiveContext.WithPermissions(perms...).(naiveContext), - } -} - -func (c secureContext) validPermission(p sdk.Actor) bool { - // if app is set, then it must match - if c.app != "" && c.app != p.App { - return false - } - // if ibc, chain must be set, otherwise it must not - return c.ibc == (p.ChainID != "") -} - -// Reset should clear out all permissions, -// but carry on knowledge that this is a child -func (c secureContext) Reset() sdk.Context { - return secureContext{ - app: c.app, - ibc: c.ibc, - naiveContext: c.naiveContext.Reset().(naiveContext), - } -} - -// IsParent ensures that this is derived from the given secureClient -func (c secureContext) IsParent(other sdk.Context) bool { - so, ok := other.(secureContext) - if !ok { - return false - } - return c.naiveContext.IsParent(so.naiveContext) -} - -// withApp is a private method that we can use to properly set the -// app controls in the middleware -func withApp(ctx sdk.Context, app string) sdk.Context { - sc, ok := ctx.(secureContext) - if !ok { - return ctx - } - return secureContext{ - app: app, - ibc: false, - naiveContext: sc.naiveContext, - } -} - -// withIBC is a private method so we can securely allow IBC permissioning -func withIBC(ctx sdk.Context) sdk.Context { - sc, ok := ctx.(secureContext) - if !ok { - return ctx - } - return secureContext{ - app: "", - ibc: true, - naiveContext: sc.naiveContext, - } -} - -func secureCheck(h sdk.Checker, parent sdk.Context) sdk.Checker { - next := func(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - if !parent.IsParent(ctx) { - return res, errors.New("Passing in non-child Context") - } - return h.CheckTx(ctx, store, tx) - } - return sdk.CheckerFunc(next) -} - -func secureDeliver(h sdk.Deliver, parent sdk.Context) sdk.Deliver { - next := func(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - if !parent.IsParent(ctx) { - return res, errors.New("Passing in non-child Context") - } - return h.DeliverTx(ctx, store, tx) - } - return sdk.DeliverFunc(next) -} diff --git a/_attic/modules/stack/dispatcher.go b/_attic/modules/stack/dispatcher.go deleted file mode 100644 index 89c489696d..0000000000 --- a/_attic/modules/stack/dispatcher.go +++ /dev/null @@ -1,170 +0,0 @@ -package stack - -import ( - "fmt" - "sort" - "strings" - - abci "github.com/tendermint/abci/types" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -// nolint -const ( - NameDispatcher = "disp" -) - -// Dispatcher grabs a bunch of Dispatchables and groups them into one Handler. -// -// It will route tx to the proper locations and also allows them to call each -// other synchronously through the same tx methods. -// -// Please note that iterating through a map is a non-deteministic operation -// and, as such, should never be done in the context of an ABCI app. Only -// use this map to look up an exact route by name. -type Dispatcher struct { - routes map[string]Dispatchable -} - -// NewDispatcher creates a dispatcher and adds the given routes. -// You can also add routes later with .AddRoutes() -func NewDispatcher(routes ...Dispatchable) *Dispatcher { - d := &Dispatcher{ - routes: map[string]Dispatchable{}, - } - d.AddRoutes(routes...) - return d -} - -var _ sdk.Handler = new(Dispatcher) - -// AddRoutes registers all these dispatchable choices under their subdomains -// -// Panics on attempt to double-register a route name, as this is a configuration error. -// Should I retrun an error instead? -func (d *Dispatcher) AddRoutes(routes ...Dispatchable) { - for _, r := range routes { - name := r.Name() - if _, ok := d.routes[name]; ok { - panic(fmt.Sprintf("%s already registered with dispatcher", name)) - } - d.routes[name] = r - } -} - -// Name - defines the name of this module -func (d *Dispatcher) Name() string { - return NameDispatcher -} - -// CheckTx - implements Handler interface -// -// Tries to find a registered module (Dispatchable) based on the name of the tx. -// The tx name (as registered with go-data) should be in the form `/XXXX`, -// where `module name` must match the name of a dispatchable and XXX can be any string. -func (d *Dispatcher) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - r, err := d.lookupTx(tx) - if err != nil { - return res, err - } - - // make sure no monkey business with the context - cb := secureCheck(d, ctx) - - // and isolate the permissions and the data store for this app - ctx = withApp(ctx, r.Name()) - store = stateSpace(store, r.Name()) - - return r.CheckTx(ctx, store, tx, cb) -} - -// DeliverTx - implements Handler interface -// -// Tries to find a registered module (Dispatchable) based on the name of the tx. -// The tx name (as registered with go-data) should be in the form `/XXXX`, -// where `module name` must match the name of a dispatchable and XXX can be any string. -func (d *Dispatcher) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - r, err := d.lookupTx(tx) - if err != nil { - return res, err - } - - // make sure no monkey business with the context - cb := secureDeliver(d, ctx) - - // and isolate the permissions and the data store for this app - ctx = withApp(ctx, r.Name()) - store = stateSpace(store, r.Name()) - - return r.DeliverTx(ctx, store, tx, cb) -} - -// InitState - implements Handler interface -// -// Tries to find a registered module (Dispatchable) based on the -// module name from InitState of the tx. -func (d *Dispatcher) InitState(l log.Logger, store state.SimpleDB, module, key, value string) (string, error) { - r, err := d.lookupModule(module) - if err != nil { - return "", err - } - - // no ctx, so secureCheck not needed - cb := d - // but isolate data space - store = stateSpace(store, r.Name()) - - return r.InitState(l, store, module, key, value, cb) -} - -// InitValidate makes sure all modules are informed -func (d *Dispatcher) InitValidate(log log.Logger, store state.SimpleDB, vals []*abci.Validator) { - for _, mod := range d.sortedModules() { - // no ctx, so secureCheck not needed - cb := d - space := stateSpace(store, mod.Name()) - mod.InitValidate(log, space, vals, cb) - } -} - -func (d *Dispatcher) lookupTx(tx sdk.Tx) (Dispatchable, error) { - kind, err := tx.GetKind() - if err != nil { - return nil, err - } - // grab everything before the / - name := strings.SplitN(kind, "/", 2)[0] - r, ok := d.routes[name] - if !ok { - return nil, errors.ErrUnknownTxType(tx) - } - return r, nil -} - -func (d *Dispatcher) lookupModule(name string) (Dispatchable, error) { - r, ok := d.routes[name] - if !ok { - return nil, errors.ErrUnknownModule(name) - } - return r, nil -} - -func (d *Dispatcher) sortedModules() []Dispatchable { - // order all routes names - size := len(d.routes) - names := make([]string, 0, size) - for k := range d.routes { - names = append(names, k) - } - sort.Strings(names) - - res := make([]Dispatchable, size) - for i, k := range names { - res[i] = d.routes[k] - } - return res -} diff --git a/_attic/modules/stack/helpers.go b/_attic/modules/stack/helpers.go deleted file mode 100644 index 000b82fcfc..0000000000 --- a/_attic/modules/stack/helpers.go +++ /dev/null @@ -1,239 +0,0 @@ -package stack - -import ( - "github.com/tendermint/go-wire/data" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -//nolint -const ( - NameOK = "ok" - NameFail = "fail" - NamePanic = "panic" - NameEcho = "echo" -) - -//nolint -const ( - ByteRawTx = 0xF0 - ByteCheckTx = 0xF1 - ByteFailTx = 0xF2 - - TypeRawTx = NameOK + "/raw" // this will just say a-ok to RawTx - TypeCheckTx = NameCheck + "/tx" - TypeFailTx = NameFail + "/tx" - - rawMaxSize = 2000 * 1000 -) - -func init() { - sdk.TxMapper. - RegisterImplementation(RawTx{}, TypeRawTx, ByteRawTx). - RegisterImplementation(CheckTx{}, TypeCheckTx, ByteCheckTx). - RegisterImplementation(FailTx{}, TypeFailTx, ByteFailTx) -} - -// RawTx just contains bytes that can be hex-ified -type RawTx struct { - data.Bytes -} - -var _ sdk.TxInner = RawTx{} - -// nolint -func NewRawTx(d []byte) sdk.Tx { - return RawTx{data.Bytes(d)}.Wrap() -} -func (r RawTx) Wrap() sdk.Tx { - return sdk.Tx{r} -} -func (r RawTx) ValidateBasic() error { - if len(r.Bytes) > rawMaxSize { - return errors.ErrTooLarge() - } - return nil -} - -// CheckTx contains a list of permissions to be tested -type CheckTx struct { - Required []sdk.Actor -} - -var _ sdk.TxInner = CheckTx{} - -// nolint -func NewCheckTx(req []sdk.Actor) sdk.Tx { - return CheckTx{req}.Wrap() -} -func (c CheckTx) Wrap() sdk.Tx { - return sdk.Tx{c} -} -func (CheckTx) ValidateBasic() error { - return nil -} - -// FailTx just gets routed to filaure -type FailTx struct{} - -var _ sdk.TxInner = FailTx{} - -func NewFailTx() sdk.Tx { - return FailTx{}.Wrap() -} - -func (f FailTx) Wrap() sdk.Tx { - return sdk.Tx{f} -} -func (r FailTx) ValidateBasic() error { - return nil -} - -// OKHandler just used to return okay to everything -type OKHandler struct { - Log string - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = OKHandler{} - -// Name - return handler's name -func (OKHandler) Name() string { - return NameOK -} - -// CheckTx always returns an empty success tx -func (ok OKHandler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - return sdk.CheckResult{Log: ok.Log}, nil -} - -// DeliverTx always returns an empty success tx -func (ok OKHandler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - return sdk.DeliverResult{Log: ok.Log}, nil -} - -// EchoHandler returns success, echoing res.Data = tx bytes -type EchoHandler struct { - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = EchoHandler{} - -// Name - return handler's name -func (EchoHandler) Name() string { - return NameEcho -} - -// CheckTx always returns an empty success tx -func (EchoHandler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - data, err := data.ToWire(tx) - return sdk.CheckResult{Data: data}, err -} - -// DeliverTx always returns an empty success tx -func (EchoHandler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - data, err := data.ToWire(tx) - return sdk.DeliverResult{Data: data}, err -} - -// FailHandler always returns an error -type FailHandler struct { - Err error - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = FailHandler{} - -// Name - return handler's name -func (FailHandler) Name() string { - return NameFail -} - -// CheckTx always returns the given error -func (f FailHandler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - return res, errors.Wrap(f.Err) -} - -// DeliverTx always returns the given error -func (f FailHandler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - return res, errors.Wrap(f.Err) -} - -// PanicHandler always panics, using the given error (first choice) or msg (fallback) -type PanicHandler struct { - Msg string - Err error - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = PanicHandler{} - -// Name - return handler's name -func (PanicHandler) Name() string { - return NamePanic -} - -// CheckTx always panics -func (p PanicHandler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - if p.Err != nil { - panic(p.Err) - } - panic(p.Msg) -} - -// DeliverTx always panics -func (p PanicHandler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - if p.Err != nil { - panic(p.Err) - } - panic(p.Msg) -} - -// CheckHandler accepts CheckTx and verifies the permissions -type CheckHandler struct { - sdk.NopInitState - sdk.NopInitValidate -} - -var _ sdk.Handler = CheckHandler{} - -// Name - return handler's name -func (CheckHandler) Name() string { - return NameCheck -} - -// CheckTx verifies the permissions -func (c CheckHandler) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.CheckResult, err error) { - check, ok := tx.Unwrap().(CheckTx) - if !ok { - return res, errors.ErrUnknownTxType(tx) - } - - for _, perm := range check.Required { - if !ctx.HasPermission(perm) { - return res, errors.ErrUnauthorized() - } - } - return res, nil -} - -// DeliverTx verifies the permissions -func (c CheckHandler) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - check, ok := tx.Unwrap().(CheckTx) - if !ok { - return res, errors.ErrUnknownTxType(tx) - } - - for _, perm := range check.Required { - if !ctx.HasPermission(perm) { - return res, errors.ErrUnauthorized() - } - } - return res, nil -} diff --git a/_attic/modules/stack/helpers_test.go b/_attic/modules/stack/helpers_test.go deleted file mode 100644 index d28c0ce21d..0000000000 --- a/_attic/modules/stack/helpers_test.go +++ /dev/null @@ -1,100 +0,0 @@ -package stack - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -func TestOK(t *testing.T) { - assert := assert.New(t) - - ctx := NewContext("test-chain", 20, log.NewNopLogger()) - store := state.NewMemKVStore() - data := "this looks okay" - tx := sdk.Tx{} - - ok := OKHandler{Log: data} - res, err := ok.CheckTx(ctx, store, tx) - assert.Nil(err, "%+v", err) - assert.Equal(data, res.Log) - - dres, err := ok.DeliverTx(ctx, store, tx) - assert.Nil(err, "%+v", err) - assert.Equal(data, dres.Log) -} - -func TestFail(t *testing.T) { - assert := assert.New(t) - - ctx := NewContext("test-chain", 20, log.NewNopLogger()) - store := state.NewMemKVStore() - msg := "big problem" - tx := sdk.Tx{} - - fail := FailHandler{Err: errors.New(msg)} - _, err := fail.CheckTx(ctx, store, tx) - if assert.NotNil(err) { - assert.Equal(msg, err.Error()) - } - - _, err = fail.DeliverTx(ctx, store, tx) - if assert.NotNil(err) { - assert.Equal(msg, err.Error()) - } -} - -func TestPanic(t *testing.T) { - assert := assert.New(t) - - ctx := NewContext("test-chain", 20, log.NewNopLogger()) - store := state.NewMemKVStore() - msg := "system crash!" - tx := sdk.Tx{} - - fail := PanicHandler{Msg: msg} - assert.Panics(func() { fail.CheckTx(ctx, store, tx) }) - assert.Panics(func() { fail.DeliverTx(ctx, store, tx) }) -} - -func TestCheck(t *testing.T) { - assert := assert.New(t) - - ctx := MockContext("check-chain", 123) - store := state.NewMemKVStore() - h := CheckHandler{} - - a := sdk.Actor{App: "foo", Address: []byte("baz")} - b := sdk.Actor{App: "si-ly", Address: []byte("bar")} - - cases := []struct { - valid bool - signers, required []sdk.Actor - }{ - {true, nil, nil}, - {true, []sdk.Actor{a}, []sdk.Actor{a}}, - {true, []sdk.Actor{a, b}, []sdk.Actor{a}}, - {false, []sdk.Actor{a}, []sdk.Actor{a, b}}, - {false, []sdk.Actor{a}, []sdk.Actor{b}}, - } - - for i, tc := range cases { - tx := CheckTx{tc.required}.Wrap() - myCtx := ctx.WithPermissions(tc.signers...) - _, err := h.CheckTx(myCtx, store, tx) - _, err2 := h.DeliverTx(myCtx, store, tx) - if tc.valid { - assert.Nil(err, "%d: %+v", i, err) - assert.Nil(err2, "%d: %+v", i, err2) - } else { - assert.NotNil(err, "%d", i) - assert.NotNil(err2, "%d", i) - } - } -} diff --git a/_attic/modules/stack/helperware.go b/_attic/modules/stack/helperware.go deleted file mode 100644 index 65e40842cc..0000000000 --- a/_attic/modules/stack/helperware.go +++ /dev/null @@ -1,64 +0,0 @@ -//nolint -package stack - -import ( - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -const ( - NameCheck = "check" - NameGrant = "grant" -) - -// CheckMiddleware returns an error if the tx doesn't have auth of this -// Required Actor, otherwise passes along the call untouched -type CheckMiddleware struct { - Required sdk.Actor - PassInitState - PassInitValidate -} - -var _ Middleware = CheckMiddleware{} - -func (_ CheckMiddleware) Name() string { - return NameCheck -} - -func (p CheckMiddleware) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - if !ctx.HasPermission(p.Required) { - return res, errors.ErrUnauthorized() - } - return next.CheckTx(ctx, store, tx) -} - -func (p CheckMiddleware) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - if !ctx.HasPermission(p.Required) { - return res, errors.ErrUnauthorized() - } - return next.DeliverTx(ctx, store, tx) -} - -// GrantMiddleware tries to set the permission to this Actor, which may be prohibited -type GrantMiddleware struct { - Auth sdk.Actor - PassInitState - PassInitValidate -} - -var _ Middleware = GrantMiddleware{} - -func (_ GrantMiddleware) Name() string { - return NameGrant -} - -func (g GrantMiddleware) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - ctx = ctx.WithPermissions(g.Auth) - return next.CheckTx(ctx, store, tx) -} - -func (g GrantMiddleware) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - ctx = ctx.WithPermissions(g.Auth) - return next.DeliverTx(ctx, store, tx) -} diff --git a/_attic/modules/stack/interface.go b/_attic/modules/stack/interface.go deleted file mode 100644 index db2542797f..0000000000 --- a/_attic/modules/stack/interface.go +++ /dev/null @@ -1,147 +0,0 @@ -//nolint -package stack - -import ( - abci "github.com/tendermint/abci/types" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -// Middleware is anything that wraps another handler to enhance functionality. -// -// You can use utilities in handlers to construct them, the interfaces -// are exposed in the top-level package to avoid import loops. -type Middleware interface { - CheckerMiddle - DeliverMiddle - InitStaterMiddle - InitValidaterMiddle - sdk.Named -} - -type CheckerMiddle interface { - CheckTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, next sdk.Checker) (sdk.CheckResult, error) -} - -type CheckerMiddleFunc func(sdk.Context, state.SimpleDB, - sdk.Tx, sdk.Checker) (sdk.CheckResult, error) - -func (c CheckerMiddleFunc) CheckTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, next sdk.Checker) (sdk.CheckResult, error) { - return c(ctx, store, tx, next) -} - -type DeliverMiddle interface { - DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, - next sdk.Deliver) (sdk.DeliverResult, error) -} - -type DeliverMiddleFunc func(sdk.Context, state.SimpleDB, - sdk.Tx, sdk.Deliver) (sdk.DeliverResult, error) - -func (d DeliverMiddleFunc) DeliverTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, next sdk.Deliver) (sdk.DeliverResult, error) { - return d(ctx, store, tx, next) -} - -type InitStaterMiddle interface { - InitState(l log.Logger, store state.SimpleDB, module, - key, value string, next sdk.InitStater) (string, error) -} - -type InitStaterMiddleFunc func(log.Logger, state.SimpleDB, - string, string, string, sdk.InitStater) (string, error) - -func (c InitStaterMiddleFunc) InitState(l log.Logger, store state.SimpleDB, - module, key, value string, next sdk.InitStater) (string, error) { - return c(l, store, module, key, value, next) -} - -type InitValidaterMiddle interface { - InitValidate(l log.Logger, store state.SimpleDB, vals []*abci.Validator, next sdk.InitValidater) -} - -type InitValidaterMiddleFunc func(log.Logger, state.SimpleDB, - []*abci.Validator, sdk.InitValidater) - -func (c InitValidaterMiddleFunc) InitValidate(l log.Logger, store state.SimpleDB, - vals []*abci.Validator, next sdk.InitValidater) { - c(l, store, vals, next) -} - -// holders -type PassCheck struct{} - -func (_ PassCheck) CheckTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, next sdk.Checker) (sdk.CheckResult, error) { - return next.CheckTx(ctx, store, tx) -} - -type PassDeliver struct{} - -func (_ PassDeliver) DeliverTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, next sdk.Deliver) (sdk.DeliverResult, error) { - return next.DeliverTx(ctx, store, tx) -} - -type PassInitState struct{} - -func (_ PassInitState) InitState(l log.Logger, store state.SimpleDB, module, - key, value string, next sdk.InitStater) (string, error) { - return next.InitState(l, store, module, key, value) -} - -type PassInitValidate struct{} - -func (_ PassInitValidate) InitValidate(l log.Logger, store state.SimpleDB, - vals []*abci.Validator, next sdk.InitValidater) { - next.InitValidate(l, store, vals) -} - -// Dispatchable is like middleware, except the meaning of "next" is different. -// Whereas in the middleware, it is the next handler that we should pass the same tx into, -// for dispatchers, it is a dispatcher, which it can use to -type Dispatchable interface { - Middleware - AssertDispatcher() -} - -// WrapHandler turns a sdk.Handler into a Dispatchable interface -func WrapHandler(h sdk.Handler) Dispatchable { - return wrapped{h} -} - -type wrapped struct { - h sdk.Handler -} - -var _ Dispatchable = wrapped{} - -func (w wrapped) AssertDispatcher() {} - -func (w wrapped) Name() string { - return w.h.Name() -} - -func (w wrapped) CheckTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, _ sdk.Checker) (sdk.CheckResult, error) { - return w.h.CheckTx(ctx, store, tx) -} - -func (w wrapped) DeliverTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, _ sdk.Deliver) (sdk.DeliverResult, error) { - return w.h.DeliverTx(ctx, store, tx) -} - -func (w wrapped) InitState(l log.Logger, store state.SimpleDB, - module, key, value string, _ sdk.InitStater) (string, error) { - return w.h.InitState(l, store, module, key, value) -} - -func (w wrapped) InitValidate(l log.Logger, store state.SimpleDB, - vals []*abci.Validator, next sdk.InitValidater) { - w.h.InitValidate(l, store, vals) -} diff --git a/_attic/modules/stack/middleware.go b/_attic/modules/stack/middleware.go deleted file mode 100644 index 4c55f7f0af..0000000000 --- a/_attic/modules/stack/middleware.go +++ /dev/null @@ -1,152 +0,0 @@ -package stack - -import ( - abci "github.com/tendermint/abci/types" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -// middleware lets us wrap a whole stack up into one Handler -// -// heavily inspired by negroni's design -type middleware struct { - middleware Middleware - space string - allowIBC bool - next sdk.Handler -} - -var _ sdk.Handler = &middleware{} - -func (m *middleware) Name() string { - return m.middleware.Name() -} - -func (m *middleware) wrapCtx(ctx sdk.Context) sdk.Context { - if m.allowIBC { - return withIBC(ctx) - } - return withApp(ctx, m.space) -} - -// CheckTx always returns an empty success tx -func (m *middleware) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (sdk.CheckResult, error) { - // make sure we pass in proper context to child - next := secureCheck(m.next, ctx) - // set the permissions for this app - ctx = m.wrapCtx(ctx) - store = stateSpace(store, m.space) - - return m.middleware.CheckTx(ctx, store, tx, next) -} - -// DeliverTx always returns an empty success tx -func (m *middleware) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx) (res sdk.DeliverResult, err error) { - // make sure we pass in proper context to child - next := secureDeliver(m.next, ctx) - // set the permissions for this app - ctx = m.wrapCtx(ctx) - store = stateSpace(store, m.space) - - return m.middleware.DeliverTx(ctx, store, tx, next) -} - -func (m *middleware) InitState(l log.Logger, store state.SimpleDB, module, key, value string) (string, error) { - // set the namespace for the app - store = stateSpace(store, m.space) - - return m.middleware.InitState(l, store, module, key, value, m.next) -} - -func (m *middleware) InitValidate(l log.Logger, store state.SimpleDB, vals []*abci.Validator) { - // set the namespace for the app - store = stateSpace(store, m.space) - m.middleware.InitValidate(l, store, vals, m.next) -} - -// builder is used to associate info with the middleware, so we can build -// it properly -type builder struct { - middleware Middleware - stateSpace string - allowIBC bool -} - -func prep(m Middleware, ibc bool) builder { - return builder{ - middleware: m, - stateSpace: m.Name(), - allowIBC: ibc, - } -} - -// wrap sets up the middleware with the proper options -func (b builder) wrap(next sdk.Handler) sdk.Handler { - return &middleware{ - middleware: b.middleware, - space: b.stateSpace, - allowIBC: b.allowIBC, - next: next, - } -} - -// Stack is the entire application stack -type Stack struct { - middles []builder - handler sdk.Handler - sdk.Handler // the compiled version, which we expose -} - -var _ sdk.Handler = &Stack{} - -// New prepares a middleware stack, you must `.Use()` a Handler -// before you can execute it. -func New(middlewares ...Middleware) *Stack { - stack := new(Stack) - return stack.Apps(middlewares...) -} - -// Apps adds the following Middlewares as typical application -// middleware to the stack (limit permission to one app) -func (s *Stack) Apps(middlewares ...Middleware) *Stack { - // TODO: some wrapper... - for _, m := range middlewares { - s.middles = append(s.middles, prep(m, false)) - } - return s -} - -// IBC add the following middleware with permission to add cross-chain -// permissions -func (s *Stack) IBC(m Middleware) *Stack { - // TODO: some wrapper... - s.middles = append(s.middles, prep(m, true)) - return s -} - -// Use sets the final handler for the stack and prepares it for use -func (s *Stack) Use(handler sdk.Handler) *Stack { - if handler == nil { - panic("Cannot have a Stack without an end handler") - } - s.handler = handler - s.Handler = build(s.middles, s.handler) - return s -} - -// Dispatch is like Use, but a convenience method to construct a -// dispatcher with a set of modules to route. -func (s *Stack) Dispatch(routes ...Dispatchable) *Stack { - d := NewDispatcher(routes...) - return s.Use(d) -} - -func build(mid []builder, end sdk.Handler) sdk.Handler { - if len(mid) == 0 { - return end - } - next := build(mid[1:], end) - return mid[0].wrap(next) -} diff --git a/_attic/modules/stack/middleware_test.go b/_attic/modules/stack/middleware_test.go deleted file mode 100644 index c09c28f524..0000000000 --- a/_attic/modules/stack/middleware_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package stack - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/tendermint/go-wire/data" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -const ( - nameSigner = "signer" -) - -func TestPermissionSandbox(t *testing.T) { - require := require.New(t) - - // generic args - ctx := NewContext("test-chain", 20, log.NewNopLogger()) - store := state.NewMemKVStore() - raw := NewRawTx([]byte{1, 2, 3, 4}) - rawBytes, err := data.ToWire(raw) - require.Nil(err) - - // test cases to make sure permissioning is solid - grantee := sdk.Actor{App: NameGrant, Address: []byte{1}} - grantee2 := sdk.Actor{App: NameGrant, Address: []byte{2}} - // ibc and grantee are the same, just different chains - ibc := sdk.Actor{ChainID: "other", App: NameGrant, Address: []byte{1}} - ibc2 := sdk.Actor{ChainID: "other", App: nameSigner, Address: []byte{21}} - signer := sdk.Actor{App: nameSigner, Address: []byte{21}} - cases := []struct { - asIBC bool - grant sdk.Actor - require sdk.Actor - expectedRes data.Bytes - expected func(error) bool - }{ - // grant as normal app middleware - {false, grantee, grantee, rawBytes, nil}, - {false, grantee, grantee2, nil, errors.IsUnauthorizedErr}, - {false, grantee2, grantee2, rawBytes, nil}, - {false, ibc, grantee, nil, errors.IsInternalErr}, - {false, grantee, ibc, nil, errors.IsUnauthorizedErr}, - {false, grantee, signer, nil, errors.IsUnauthorizedErr}, - {false, signer, signer, nil, errors.IsInternalErr}, - - // grant as ibc middleware - {true, ibc, ibc, rawBytes, nil}, // ibc can set permissions - {true, ibc2, ibc2, rawBytes, nil}, // for any app - // the must match, both app and chain - {true, ibc, ibc2, nil, errors.IsUnauthorizedErr}, - {true, ibc, grantee, nil, errors.IsUnauthorizedErr}, - // cannot set local apps from ibc middleware - {true, grantee, grantee, nil, errors.IsInternalErr}, - } - - for i, tc := range cases { - app := New(Recovery{}) - if tc.asIBC { - app = app.IBC(GrantMiddleware{Auth: tc.grant}) - } else { - app = app.Apps(GrantMiddleware{Auth: tc.grant}) - } - app = app. - Apps(CheckMiddleware{Required: tc.require}). - Use(EchoHandler{}) - - cres, err := app.CheckTx(ctx, store, raw) - checkPerm(t, i, tc.expectedRes, tc.expected, cres, err) - - dres, err := app.DeliverTx(ctx, store, raw) - checkPerm(t, i, tc.expectedRes, tc.expected, dres, err) - } -} - -func checkPerm(t *testing.T, idx int, data []byte, check func(error) bool, res sdk.Result, err error) { - assert := assert.New(t) - - if len(data) > 0 { - assert.Nil(err, "%d: %+v", idx, err) - assert.EqualValues(data, res.GetData()) - } else { - assert.NotNil(err, "%d", idx) - // check error code! - assert.True(check(err), "%d: %+v", idx, err) - } -} diff --git a/_attic/modules/stack/mock.go b/_attic/modules/stack/mock.go deleted file mode 100644 index 7327875f6a..0000000000 --- a/_attic/modules/stack/mock.go +++ /dev/null @@ -1,90 +0,0 @@ -package stack - -import ( - "math/rand" - - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" -) - -type naiveContext struct { - id nonce - chain string - height uint64 - perms []sdk.Actor - log.Logger -} - -// MockContext returns a simple, non-checking context for test cases. -// -// Always use NewContext() for production code to sandbox malicious code better -func MockContext(chain string, height uint64) sdk.Context { - return naiveContext{ - id: nonce(rand.Int63()), - chain: chain, - height: height, - Logger: log.NewNopLogger(), - } -} - -var _ sdk.Context = naiveContext{} - -func (c naiveContext) ChainID() string { - return c.chain -} - -func (c naiveContext) BlockHeight() uint64 { - return c.height -} - -// WithPermissions will panic if they try to set permission without the proper app -func (c naiveContext) WithPermissions(perms ...sdk.Actor) sdk.Context { - return naiveContext{ - id: c.id, - chain: c.chain, - height: c.height, - perms: append(c.perms, perms...), - Logger: c.Logger, - } -} - -func (c naiveContext) HasPermission(perm sdk.Actor) bool { - for _, p := range c.perms { - if p.Equals(perm) { - return true - } - } - return false -} - -func (c naiveContext) GetPermissions(chain, app string) (res []sdk.Actor) { - for _, p := range c.perms { - if chain == p.ChainID { - if app == "" || app == p.App { - res = append(res, p) - } - } - } - return res -} - -// IsParent ensures that this is derived from the given secureClient -func (c naiveContext) IsParent(other sdk.Context) bool { - nc, ok := other.(naiveContext) - if !ok { - return false - } - return c.id == nc.id -} - -// Reset should clear out all permissions, -// but carry on knowledge that this is a child -func (c naiveContext) Reset() sdk.Context { - return naiveContext{ - id: c.id, - chain: c.chain, - height: c.height, - Logger: c.Logger, - } -} diff --git a/_attic/modules/stack/prefixstore.go b/_attic/modules/stack/prefixstore.go deleted file mode 100644 index 86b58ad336..0000000000 --- a/_attic/modules/stack/prefixstore.go +++ /dev/null @@ -1,134 +0,0 @@ -package stack - -import ( - "bytes" - "errors" - - "github.com/cosmos/cosmos-sdk/state" -) - -type prefixStore struct { - prefix []byte - store state.SimpleDB -} - -var _ state.SimpleDB = prefixStore{} - -func (p prefixStore) Set(key, value []byte) { - key = append(p.prefix, key...) - p.store.Set(key, value) -} - -func (p prefixStore) Get(key []byte) (value []byte) { - key = append(p.prefix, key...) - return p.store.Get(key) -} - -func (p prefixStore) Has(key []byte) bool { - key = append(p.prefix, key...) - return p.store.Has(key) -} - -func (p prefixStore) Remove(key []byte) (value []byte) { - key = append(p.prefix, key...) - return p.store.Remove(key) -} - -func (p prefixStore) List(start, end []byte, limit int) []state.Model { - start = append(p.prefix, start...) - end = append(p.prefix, end...) - res := p.store.List(start, end, limit) - - trim := len(p.prefix) - for i := range res { - res[i].Key = res[i].Key[trim:] - } - return res -} - -func (p prefixStore) First(start, end []byte) state.Model { - start = append(p.prefix, start...) - end = append(p.prefix, end...) - res := p.store.First(start, end) - if len(res.Key) > 0 { - res.Key = res.Key[len(p.prefix):] - } - return res -} - -func (p prefixStore) Last(start, end []byte) state.Model { - start = append(p.prefix, start...) - end = append(p.prefix, end...) - res := p.store.Last(start, end) - if len(res.Key) > 0 { - res.Key = res.Key[len(p.prefix):] - } - return res -} - -func (p prefixStore) Checkpoint() state.SimpleDB { - return prefixStore{ - prefix: p.prefix, - store: p.store.Checkpoint(), - } -} - -func (p prefixStore) Commit(sub state.SimpleDB) error { - ps, ok := sub.(prefixStore) - if !ok { - return errors.New("Must commit prefixStore") - } - if !bytes.Equal(ps.prefix, p.prefix) { - return errors.New("Cannot commit sub-tx with different prefix") - } - - // commit the wrapped data, don't worry about the prefix here - p.store.Commit(ps.store) - return nil -} - -func (p prefixStore) Discard() { - p.store.Discard() -} - -// stateSpace will unwrap any prefixStore and then add the prefix -// -// this can be used by the middleware and dispatcher to isolate one space, -// then unwrap and isolate another space -func stateSpace(store state.SimpleDB, app string) state.SimpleDB { - // unwrap one-level if wrapped - if pstore, ok := store.(prefixStore); ok { - store = pstore.store - } - return PrefixedStore(app, store) -} - -func unwrap(store state.SimpleDB) state.SimpleDB { - // unwrap one-level if wrapped - if pstore, ok := store.(prefixStore); ok { - store = pstore.store - } - return store -} - -// PrefixedStore allows one to create an isolated state-space for a given -// app prefix, but it cannot easily be unwrapped -// -// This is useful for tests or utilities that have access to the global -// state to check individual app spaces. Individual apps should not be able -// to use this to read each other's space -func PrefixedStore(app string, store state.SimpleDB) state.SimpleDB { - prefix := append([]byte(app), byte(0)) - return prefixStore{prefix, store} -} - -// PrefixedKey returns the absolute path to a given key in a particular -// app's state-space -// -// This is useful for tests or utilities that have access to the global -// state to check individual app spaces. Individual apps should not be able -// to use this to read each other's space -func PrefixedKey(app string, key []byte) []byte { - prefix := append([]byte(app), byte(0)) - return append(prefix, key...) -} diff --git a/_attic/modules/stack/recovery.go b/_attic/modules/stack/recovery.go deleted file mode 100644 index bfa04b1898..0000000000 --- a/_attic/modules/stack/recovery.go +++ /dev/null @@ -1,81 +0,0 @@ -package stack - -import ( - "fmt" - - abci "github.com/tendermint/abci/types" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/errors" - "github.com/cosmos/cosmos-sdk/state" -) - -// nolint -const ( - NameRecovery = "rcvr" -) - -// Recovery catches any panics and returns them as errors instead -type Recovery struct{} - -// Name of the module - fulfills Middleware interface -func (Recovery) Name() string { - return NameRecovery -} - -var _ Middleware = Recovery{} - -// CheckTx catches any panic and converts to error - fulfills Middlware interface -func (Recovery) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) { - defer func() { - if r := recover(); r != nil { - err = normalizePanic(r) - } - }() - return next.CheckTx(ctx, store, tx) -} - -// DeliverTx catches any panic and converts to error - fulfills Middlware interface -func (Recovery) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) { - defer func() { - if r := recover(); r != nil { - err = normalizePanic(r) - } - }() - return next.DeliverTx(ctx, store, tx) -} - -// InitState catches any panic and converts to error - fulfills Middlware interface -func (Recovery) InitState(l log.Logger, store state.SimpleDB, module, key, value string, next sdk.InitStater) (log string, err error) { - defer func() { - if r := recover(); r != nil { - err = normalizePanic(r) - } - }() - return next.InitState(l, store, module, key, value) -} - -// InitValidate catches any panic and logs it -// TODO: return an error??? -func (Recovery) InitValidate(l log.Logger, store state.SimpleDB, - vals []*abci.Validator, next sdk.InitValidater) { - - defer func() { - if r := recover(); r != nil { - // TODO: return an error??? - err := normalizePanic(r) - l.With("err", err).Error(err.Error()) - } - }() - next.InitValidate(l, store, vals) -} - -// normalizePanic makes sure we can get a nice TMError (with stack) out of it -func normalizePanic(p interface{}) error { - if err, isErr := p.(error); isErr { - return errors.Wrap(err) - } - msg := fmt.Sprintf("%v", p) - return errors.ErrInternal(msg) -} diff --git a/_attic/modules/stack/recovery_test.go b/_attic/modules/stack/recovery_test.go deleted file mode 100644 index 292410ba46..0000000000 --- a/_attic/modules/stack/recovery_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package stack - -import ( - "errors" - "strconv" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -func TestRecovery(t *testing.T) { - assert := assert.New(t) - - // generic args here... - ctx := NewContext("test-chain", 20, log.NewNopLogger()) - store := state.NewMemKVStore() - tx := sdk.Tx{} - - cases := []struct { - msg string // what to send to panic - err error // what to send to panic - expected string // expected text in panic - }{ - {"buzz", nil, "buzz"}, - {"", errors.New("some text"), "some text"}, - {"text", errors.New("error"), "error"}, - } - - for idx, tc := range cases { - i := strconv.Itoa(idx) - fail := PanicHandler{Msg: tc.msg, Err: tc.err} - rec := Recovery{} - app := New(rec).Use(fail) - - // make sure check returns error, not a panic crash - _, err := app.CheckTx(ctx, store, tx) - if assert.NotNil(err, i) { - assert.Equal(tc.expected, err.Error(), i) - } - - // make sure deliver returns error, not a panic crash - _, err = app.DeliverTx(ctx, store, tx) - if assert.NotNil(err, i) { - assert.Equal(tc.expected, err.Error(), i) - } - - } -} diff --git a/_attic/modules/stack/state_space_test.go b/_attic/modules/stack/state_space_test.go deleted file mode 100644 index 9b471484c9..0000000000 --- a/_attic/modules/stack/state_space_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package stack - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/tendermint/go-wire/data" - "github.com/tendermint/tmlibs/log" - - sdk "github.com/cosmos/cosmos-sdk" - "github.com/cosmos/cosmos-sdk/state" -) - -// writerMid is a middleware that writes the given bytes on CheckTx and DeliverTx -type writerMid struct { - name string - key, value []byte - PassInitValidate -} - -var _ Middleware = writerMid{} - -func (w writerMid) Name() string { return w.name } - -func (w writerMid) CheckTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, next sdk.Checker) (sdk.CheckResult, error) { - store.Set(w.key, w.value) - return next.CheckTx(ctx, store, tx) -} - -func (w writerMid) DeliverTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx, next sdk.Deliver) (sdk.DeliverResult, error) { - store.Set(w.key, w.value) - return next.DeliverTx(ctx, store, tx) -} - -func (w writerMid) InitState(l log.Logger, store state.SimpleDB, module, - key, value string, next sdk.InitStater) (string, error) { - store.Set([]byte(key), []byte(value)) - return next.InitState(l, store, module, key, value) -} - -// writerHand is a handler that writes the given bytes on CheckTx and DeliverTx -type writerHand struct { - name string - key, value []byte - sdk.NopInitValidate -} - -var _ sdk.Handler = writerHand{} - -func (w writerHand) Name() string { return w.name } - -func (w writerHand) CheckTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx) (sdk.CheckResult, error) { - store.Set(w.key, w.value) - return sdk.CheckResult{}, nil -} - -func (w writerHand) DeliverTx(ctx sdk.Context, store state.SimpleDB, - tx sdk.Tx) (sdk.DeliverResult, error) { - store.Set(w.key, w.value) - return sdk.DeliverResult{}, nil -} - -func (w writerHand) InitState(l log.Logger, store state.SimpleDB, module, - key, value string) (string, error) { - store.Set([]byte(key), []byte(value)) - return "Success", nil -} - -func TestStateSpace(t *testing.T) { - cases := []struct { - h sdk.Handler - m []Middleware - expected []data.Bytes - }{ - { - writerHand{name: "foo", key: []byte{1, 2}, value: []byte("bar")}, - []Middleware{ - writerMid{name: "bing", key: []byte{1, 2}, value: []byte("bang")}, - }, - []data.Bytes{ - {'f', 'o', 'o', 0, 1, 2}, - {'b', 'i', 'n', 'g', 0, 1, 2}, - }, - }, - } - - for i, tc := range cases { - // make an app with this setup - d := NewDispatcher(WrapHandler(tc.h)) - app := New(tc.m...).Use(d) - - // register so RawTx is routed to this handler - sdk.TxMapper.RegisterImplementation(RawTx{}, tc.h.Name(), byte(50+i)) - - // run various tests on this setup - spaceCheck(t, i, app, tc.expected) - spaceDeliver(t, i, app, tc.expected) - // spaceOption(t, i, app, keys) - } -} - -func spaceCheck(t *testing.T, i int, app sdk.Handler, keys []data.Bytes) { - assert := assert.New(t) - require := require.New(t) - - ctx := MockContext("chain", 100) - store := state.NewMemKVStore() - - // run a tx - _, err := app.CheckTx(ctx, store, NewRawTx([]byte{77})) - require.Nil(err, "%d: %+v", i, err) - - // verify that the data was writen - for j, k := range keys { - v := store.Get(k) - assert.NotEmpty(v, "%d / %d", i, j) - } -} - -func spaceDeliver(t *testing.T, i int, app sdk.Handler, keys []data.Bytes) { - assert := assert.New(t) - require := require.New(t) - - ctx := MockContext("chain", 100) - store := state.NewMemKVStore() - - // run a tx - _, err := app.DeliverTx(ctx, store, NewRawTx([]byte{1, 56})) - require.Nil(err, "%d: %+v", i, err) - - // verify that the data was writen - for j, k := range keys { - v := store.Get(k) - assert.NotEmpty(v, "%d / %d", i, j) - } -} diff --git a/_attic/modules/store/queue.go b/_attic/modules/store/queue.go deleted file mode 100644 index eacd815ca4..0000000000 --- a/_attic/modules/store/queue.go +++ /dev/null @@ -1,106 +0,0 @@ -package store - -// import ( -// "encoding/binary" - -// sdk "github.com/cosmos/cosmos-sdk" -// ) - -// var ( -// headKey = []byte("h") -// tailKey = []byte("t") -// dataKey = []byte("d") -// ) - -// // QueueHeadKey gives us the key for the height at head of the queue -// func QueueHeadKey() []byte { -// return headKey -// } - -// // QueueTailKey gives us the key for the height at tail of the queue -// func QueueTailKey() []byte { -// return tailKey -// } - -// // QueueItemKey gives us the key to look up one item by sequence -// func QueueItemKey(i uint64) []byte { -// return makeKey(i) -// } - -// // Queue allows us to fill up a range of the db, and grab from either end -// type Queue struct { -// store sdk.KVStore -// head uint64 // if Size() > 0, the first element is here -// tail uint64 // this is the first empty slot to Push() to -// } - -// // NewQueue will load or initialize a queue in this state-space -// // -// // Generally, you will want to stack.PrefixStore() the space first -// func NewQueue(store sdk.KVStore) *Queue { -// q := &Queue{store: store} -// q.head = q.getCount(headKey) -// q.tail = q.getCount(tailKey) -// return q -// } - -// // Tail returns the next slot that Push() will use -// func (q *Queue) Tail() uint64 { -// return q.tail -// } - -// // Size returns how many elements are in the queue -// func (q *Queue) Size() int { -// return int(q.tail - q.head) -// } - -// // Push adds an element to the tail of the queue and returns it's location -// func (q *Queue) Push(value []byte) uint64 { -// key := makeKey(q.tail) -// q.store.Set(key, value) -// q.tail++ -// q.setCount(tailKey, q.tail) -// return q.tail - 1 -// } - -// // Pop gets an element from the end of the queue -// func (q *Queue) Pop() []byte { -// if q.Size() <= 0 { -// return nil -// } -// key := makeKey(q.head) -// value := q.store.Get(key) -// q.head++ -// q.setCount(headKey, q.head) -// return value -// } - -// // Item looks at any element in the queue, without modifying anything -// func (q *Queue) Item(seq uint64) []byte { -// if seq >= q.tail || seq < q.head { -// return nil -// } -// return q.store.Get(makeKey(seq)) -// } - -// func (q *Queue) setCount(key []byte, val uint64) { -// b := make([]byte, 8) -// binary.BigEndian.PutUint64(b, val) -// q.store.Set(key, b) -// } - -// func (q *Queue) getCount(key []byte) (val uint64) { -// b := q.store.Get(key) -// if b != nil { -// val = binary.BigEndian.Uint64(b) -// } -// return val -// } - -// // makeKey returns the key for a data point -// func makeKey(val uint64) []byte { -// b := make([]byte, 8+len(dataKey)) -// copy(b, dataKey) -// binary.BigEndian.PutUint64(b[len(dataKey):], val) -// return b -// } diff --git a/_attic/modules/store/queue_test.go b/_attic/modules/store/queue_test.go deleted file mode 100644 index b0320b32fa..0000000000 --- a/_attic/modules/store/queue_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package store - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestQueue(t *testing.T) { - assert := assert.New(t) - - lots := make([][]byte, 500) - for i := range lots { - lots[i] = []byte{1, 8, 7} - } - - cases := []struct { - pushes [][]byte - pops [][]byte - }{ - // fill it up and empty it all - { - [][]byte{{1, 2, 3}, {44}, {3, 0}}, - [][]byte{{1, 2, 3}, {44}, {3, 0}}, - }, - // don't empty everything - size is 1 at the end - { - [][]byte{{77, 22}, {11, 9}, {121}}, - [][]byte{{77, 22}, {11, 9}}, - }, - // empty too much, just get nil, no negative size - { - [][]byte{{1}, {2}, {4}}, - [][]byte{{1}, {2}, {4}, nil, nil, nil}, - }, - // let's play with lots.... - {lots, append(lots, nil)}, - } - - for i, tc := range cases { - store := NewMemKVStore() - - // initialize a queue and add items - q := NewQueue(store) - for j, in := range tc.pushes { - cnt := q.Push(in) - assert.Equal(uint64(j), cnt, "%d", i) - } - assert.EqualValues(len(tc.pushes), q.Size()) - - // load from disk and pop them - r := NewQueue(store) - for _, out := range tc.pops { - val := r.Pop() - assert.Equal(out, val, "%d", i) - } - - // it's empty in memory and on disk - expected := len(tc.pushes) - len(tc.pops) - if expected < 0 { - expected = 0 - } - assert.EqualValues(expected, r.Size()) - s := NewQueue(store) - assert.EqualValues(expected, s.Size()) - } -} diff --git a/_attic/server/commands/init.go b/_attic/server/commands/init.go deleted file mode 100644 index b5ffebf78e..0000000000 --- a/_attic/server/commands/init.go +++ /dev/null @@ -1,202 +0,0 @@ -package commands - -import ( - "encoding/hex" - "encoding/json" - "fmt" - "io/ioutil" - "os" - "strings" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "github.com/spf13/viper" - - tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" - "github.com/tendermint/tendermint/config" - "github.com/tendermint/tendermint/types" - cmn "github.com/tendermint/tmlibs/common" -) - -var ( - // InitCmd - node initialization command - InitCmd = GetInitCmd("mycoin", []string{}) - - //nolint - flags - FlagChainID = "chain-id" //TODO group with other flags or remove? is this already a flag here? - FlagDenom = "denom" //TODO group with other flags or remove? is this already a flag here? - FlagOption = "option" - FlagStatic = "static" -) - -// GetInitCmd - get the node initialization command, with a custom genesis account denom -func GetInitCmd(defaultDenom string, options []string) *cobra.Command { - initCmd := &cobra.Command{ - Use: "init [address]", - Short: "Initialize genesis files for a blockchain", - RunE: initCmd, - } - initCmd.Flags().String(FlagChainID, "test_chain_id", "Chain ID") - initCmd.Flags().String(FlagDenom, defaultDenom, "Coin denomination for genesis account") - initCmd.Flags().StringSliceP(FlagOption, "p", options, "Genesis option in the format /