From 7aa26d5dc38b8ba1a0f3c0a87db777871a129d10 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Wed, 14 Sep 2022 09:57:05 -0500 Subject: [PATCH 1/2] GH-118 Revert back to not automatically unpacking action data. Instead only unpack action data when explicitly aksed via --unpack-action-data option. --- programs/cleos/main.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/programs/cleos/main.cpp b/programs/cleos/main.cpp index 3d0cf920e5..53b127eabb 100644 --- a/programs/cleos/main.cpp +++ b/programs/cleos/main.cpp @@ -166,6 +166,7 @@ const fc::microseconds abi_serializer_max_time = fc::seconds(10); // No risk to string tx_ref_block_num_or_id; bool tx_force_unique = false; bool tx_dont_broadcast = false; +bool tx_unpack_data = false; bool tx_return_packed = false; bool tx_skip_sign = false; bool tx_print_json = false; @@ -226,6 +227,7 @@ void add_standard_transaction_options(CLI::App* cmd, string default_permission = cmd->add_flag("-j,--json", tx_print_json, localized("Print result as JSON")); cmd->add_option("--json-file", tx_json_save_file, localized("Save result in JSON format into a file")); cmd->add_flag("-d,--dont-broadcast", tx_dont_broadcast, localized("Don't broadcast transaction to the network (just print to stdout)")); + cmd->add_flag("-u,--unpack-action-data", tx_unpack_data, localized("Unpack all action data within transaction, needs interaction with ${n} unless --abi-file. Used in conjunction with --dont-broadcast.", ("n", node_executable_name))); cmd->add_flag("--return-packed", tx_return_packed, localized("Used in conjunction with --dont-broadcast to get the packed transaction")); cmd->add_option("-r,--ref-block", tx_ref_block_num_or_id, (localized("Set the reference block num or block id used for TAPOS (Transaction as Proof-of-Stake)"))); cmd->add_flag("--use-old-rpc", tx_use_old_rpc, localized("Use old RPC push_transaction, rather than new RPC send_transaction")); @@ -499,14 +501,15 @@ fc::variant push_transaction( signed_transaction& trx, const std::vector Date: Wed, 14 Sep 2022 09:57:59 -0500 Subject: [PATCH 2/2] GH-118 Update test case for unpacked-action-data option. Also add new test case expecting default of packed action data. --- tests/nodeos_run_test.py | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/tests/nodeos_run_test.py b/tests/nodeos_run_test.py index aa49eff704..e23fea2cd6 100755 --- a/tests/nodeos_run_test.py +++ b/tests/nodeos_run_test.py @@ -573,10 +573,11 @@ if actual != expected: errorExit("FAILURE - Wrong currency1111 balance (expected=%s, actual=%s)" % (str(expected), str(actual)), raw=True) - Print("push transfer action to currency1111 contract with sign skipping option enabled") + # Test skip sign with unpacked action data + Print("push transfer action to currency1111 contract with sign skipping and unpack action data options enabled") data="{\"from\":\"currency1111\",\"to\":\"defproducera\",\"quantity\":" data +="\"00.0001 CUR\",\"memo\":\"test\"}" - opts="-s -d --permission currency1111@active" + opts="-s -d -u --permission currency1111@active" trans=node.pushMessage(contract, action, data, opts, expectTrxTrace=False) try: @@ -603,6 +604,37 @@ if actual != expected: errorExit("FAILURE - Wrong currency1111 balance (expectedgma=%s, actual=%s)" % (str(expected), str(actual)), raw=True) + # Test skip sign with packed action data + Print("push transfer action to currency1111 contract with sign skipping option enabled") + data="{\"from\":\"currency1111\",\"to\":\"defproducera\",\"quantity\":" + data +="\"00.0002 CUR\",\"memo\":\"test packed\"}" + opts="-s -d --permission currency1111@active" + trans=node.pushMessage(contract, action, data, opts, expectTrxTrace=False) + + try: + assert(not trans[1]["signatures"]) + except (AssertionError, KeyError) as _: + Print("ERROR: Expected signatures array to be empty due to skipping option enabled.") + raise + + try: + data = trans[1]["actions"][0]["data"] + Print(f"Action data: {data}") + assert data == "1042081e4d75af4660ae423ad15b974a020000000000000004435552000000000b74657374207061636b6564" + except (AssertionError, KeyError) as _: + Print("ERROR: Expecting packed data on push transfer action json result.") + raise + + result=node.pushTransaction(trans[1], None) + + amountStr=node.getTableAccountBalance("currency1111", currencyAccount.name) + + expected="99999.9997 CUR" + actual=amountStr + if actual != expected: + errorExit("FAILURE - Wrong currency1111 balance (expectedgma=%s, actual=%s)" % (str(expected), str(actual)), raw=True) + + Print("---- Test for signing transaction ----") testeraAccountAmountBeforeTrx=node.getAccountEosBalanceStr(testeraAccount.name) currencyAccountAmountBeforeTrx=node.getAccountEosBalanceStr(currencyAccount.name)