From 0176314450aab375d7b4192ecbc57f1bbd3c66b0 Mon Sep 17 00:00:00 2001 From: ehildenb <everett.hildenbrandt@gmail.com> Date: Thu, 12 Dec 2019 02:06:13 -0600 Subject: [PATCH] ./kevm web3-send allows sending files as well (#617) * kevm: allow passing entire JSON files in as input to web3-send * tests/web3/runtest.sh: use ./kevm web3-send for testing * kevm: add -s to curl command * kevm: formatting * kevm: declare local variable web3_file * Makefile: better dependency management for proxygen --- Makefile | 15 ++++++------- kevm | 49 ++++++++++++++++++++++++------------------- tests/web3/runtest.sh | 4 ++-- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 50df0fa8e3..172a008f21 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ export LUA_PATH OPAM ?= opam .PHONY: all clean clean-submodules distclean install uninstall \ - deps all-deps llvm-deps haskell-deps repo-deps k-deps ocaml-deps plugin-deps libsecp256k1 libff \ + deps all-deps llvm-deps haskell-deps repo-deps k-deps ocaml-deps plugin-deps libsecp256k1 libff proxygen \ build build-all build-ocaml build-java build-node build-haskell build-llvm build-web3 \ defn java-defn ocaml-defn node-defn web3-defn haskell-defn llvm-defn \ split-tests \ @@ -72,11 +72,13 @@ clean-submodules: distclean # Non-K Dependencies # ------------------ -libsecp256k1_out:=$(LIBRARY_PATH)/pkgconfig/libsecp256k1.pc -libff_out:=$(LIBRARY_PATH)/libff.a +libsecp256k1_out := $(LIBRARY_PATH)/pkgconfig/libsecp256k1.pc +libff_out := $(LIBRARY_PATH)/libff.a +proxygen_out := $(DEPS_DIR)/proxygen/proxygen/_build/proxygen/lib/libproxygen.a libsecp256k1: $(libsecp256k1_out) -libff: $(libff_out) +libff: $(libff_out) +proxygen: $(proxygen_out) $(DEPS_DIR)/secp256k1/autogen.sh: git submodule update --init --recursive -- $(DEPS_DIR)/secp256k1 @@ -111,8 +113,7 @@ $(libff_out): $(DEPS_DIR)/libff/CMakeLists.txt && make -s -j4 \ && make install -.PHONY: proxygen -proxygen: +$(proxygen_out): git submodule update --init --recursive -- deps/proxygen cd deps/proxygen/proxygen && ./build.sh --no-jemalloc --no-install-dependencies cd deps/proxygen/proxygen/_build && make install @@ -337,7 +338,7 @@ $(web3_dir)/web3-kompiled/definition.kore: $(web3_files) $(KOMPILE_OPTS) .PHONY: $(web3_kompiled) -$(web3_kompiled): $(web3_dir)/web3-kompiled/definition.kore $(libff_out) proxygen +$(web3_kompiled): $(web3_dir)/web3-kompiled/definition.kore $(libff_out) $(proxygen_out) @mkdir -p $(web3_dir)/build cd $(web3_dir)/build && cmake $(CURDIR)/cmake/client -DCMAKE_BUILD_TYPE=${SEMANTICS_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} && $(MAKE) diff --git a/kevm b/kevm index 2d375a3403..bf85c8f1a7 100755 --- a/kevm +++ b/kevm @@ -99,17 +99,21 @@ run_web3() { } run_web3_send() { - local web3_port web3_method web3_params - web3_port="$1" ; shift - web3_method="$1" ; shift - - join_args() { - local IFS=',' - echo "$*" - } - web3_params="$(join_args "$@")" + local web3_port web3_method web3_params web3_file + web3_port="$1" ; shift - curl -X POST --data '{"jsonrpc": "2.0", "id": 1, "method": "'"$web3_method"'", "params": ['"$web3_params"']}' 127.0.0.1:"$web3_port" + if [[ -f "$1" ]]; then + web3_file="$1" ; shift + curl -s -X POST 127.0.0.1:$web3_port --data @$web3_file + else + web3_method="$1" ; shift + join_args() { + local IFS=',' + echo "$*" + } + web3_params="$(join_args "$@")" + curl -s -X POST --data '{"jsonrpc": "2.0", "id": 1, "method": "'"$web3_method"'", "params": ['"$web3_params"']}' 127.0.0.1:"$web3_port" + fi } run_web3_ganache() { @@ -120,16 +124,16 @@ run_web3_ganache() { $0 web3 "$web3_port" "$@" & while ! netcat -z 127.0.0.1 "$web3_port" ; do sleep 0.1; done notif 'Generating accounts' - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0xdc7e9a7c64933ab893160b79d099c254d274e1c40c6df6d5239e1a623e3d6de1", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0x6e2687f9732d970c6b1d5baa3dff26c4af36257552bc17df737afbc00ca70de2", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0xd34d8e873da77217abaef9424a7d87fce351b603920c7f5288d7701c5f148860", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0x976b5ec9253759d4a2746c37597841beba57527123dc3db2165b637adce58bcb", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0x23dff7ac7981167eb5386e51c3d6d2e3ca9dc219315749b2058d0a2d1e21625e", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0xe040e4bf96d8c9d3a8d1ffb22b30ed4b0a79a25342d656c5a8e2784b0fab752f", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0x13abddd7d94165fc46bed2cad6b0b14cd0267a85f70ad5c26cce82c609e0bf87", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0x0e29f7d6984bb47d60db479212ca56af516705b07d8753b474bd7f0db8bc1921", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0xea7fe1480e9ab71c261c5e1e727f36482f84dbdb07dbf8c8e9f767dcecf87568", "balance":"0x56BC75E2D63100000"'} - $0 web3-send "$web3_port" firefly_addAccount {'"key":"0x5f9addbbf41ae2e3d6cb7b07ffabf2c5ff6edc3a38c9dd64a9afd23df02ad7ee", "balance":"0x56BC75E2D63100000"'} + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0xdc7e9a7c64933ab893160b79d099c254d274e1c40c6df6d5239e1a623e3d6de1", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0x6e2687f9732d970c6b1d5baa3dff26c4af36257552bc17df737afbc00ca70de2", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0xd34d8e873da77217abaef9424a7d87fce351b603920c7f5288d7701c5f148860", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0x976b5ec9253759d4a2746c37597841beba57527123dc3db2165b637adce58bcb", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0x23dff7ac7981167eb5386e51c3d6d2e3ca9dc219315749b2058d0a2d1e21625e", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0xe040e4bf96d8c9d3a8d1ffb22b30ed4b0a79a25342d656c5a8e2784b0fab752f", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0x13abddd7d94165fc46bed2cad6b0b14cd0267a85f70ad5c26cce82c609e0bf87", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0x0e29f7d6984bb47d60db479212ca56af516705b07d8753b474bd7f0db8bc1921", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0xea7fe1480e9ab71c261c5e1e727f36482f84dbdb07dbf8c8e9f767dcecf87568", "balance":"0x56BC75E2D63100000"}' + $0 web3-send "$web3_port" firefly_addAccount '{"key":"0x5f9addbbf41ae2e3d6cb7b07ffabf2c5ff6edc3a38c9dd64a9afd23df02ad7ee", "balance":"0x56BC75E2D63100000"}' $0 web3-send "$web3_port" firefly_genesisBlock } @@ -241,7 +245,7 @@ if [[ "$run_command" == 'help' ]] || [[ "$run_command" == '--help' ]] ; then $0 search [--backend (java|haskell)] <pgm> <pattern> <K arg>* $0 web3 [--debug|--dump] <port> $0 web3-ganache [--debug|--dump] <port> - $0 web3-send <port> <web3 method> <web3 params> + $0 web3-send <port> [<web3_method> <web3_params>|<web3_file>] $0 klab-run <pgm> <K arg>* $0 klab-prove <spec> <K arg>* -m <def_module> $0 klab-view <spec> @@ -270,6 +274,9 @@ if [[ "$run_command" == 'help' ]] || [[ "$run_command" == '--help' ]] ; then <pattern> is the configuration pattern to search for. <port> is the port to listen on for Web3 JSON RPC requests. <def_module> is the module to take as axioms when doing verification. + <web3_method> is the specific web3 method to call. + <web3_params> is an optional list of parameters to pass to the <web3_method>. + <web3_file> specifies a JSON file to feed as input into the web3 server. klab-view: Make sure that the 'klab/bin' directory is on your PATH to use this option. " diff --git a/tests/web3/runtest.sh b/tests/web3/runtest.sh index 6149835b7f..9783ccee35 100755 --- a/tests/web3/runtest.sh +++ b/tests/web3/runtest.sh @@ -12,9 +12,9 @@ kevm_client_pid="$!" while (! netcat -z 127.0.0.1 "$PORT") ; do sleep 0.1; done # Feed input in, store output in supplied file -curl -s -X POST 127.0.0.1:"$PORT" --data @"$input_file" | jq . > "$output_file" - +./kevm web3-send "$PORT" "$input_file" | jq . > "$output_file" ./kevm web3-send "$PORT" 'firefly_shutdown' + echo timeout 8 tail --pid="$kevm_client_pid" -f /dev/null || true pkill -P "$kevm_client_pid" kevm-client || true