From 54a4f3f17f13e1f12b62232c8a6ca14df9c332c8 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 11 Oct 2018 08:27:28 -0700 Subject: [PATCH 01/55] Fix ExtendedJsonRpcApi (#662) * Update ExtendedJsonRpcApi.py - add fix provided by @localhuman so original methods are returned as well as extended methods --- CHANGELOG.rst | 1 + neo/api/JSONRPC/ExtendedJsonRpcApi.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 74d74cd9b..c30c7afd0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,7 @@ All notable changes to this project are documented in this file. - Fix return types of ``claimGas`` function. - Update compiler version ``v0.5.4`` - Adds ``sendmany`` feature to prompt.py, integrates with ``send`` feature, and adds provisions for sending with a negative fee and bad from_address +- Fix ``ExtendedJsonRpcApi`` [0.8.1] 2018-10-06 ------------------ diff --git a/neo/api/JSONRPC/ExtendedJsonRpcApi.py b/neo/api/JSONRPC/ExtendedJsonRpcApi.py index 6f5f8db08..123a15161 100644 --- a/neo/api/JSONRPC/ExtendedJsonRpcApi.py +++ b/neo/api/JSONRPC/ExtendedJsonRpcApi.py @@ -58,4 +58,4 @@ def json_rpc_method_handler(self, method, params): else: raise JsonRpcError(-400, "Access denied.") - super(ExtendedJsonRpcApi, self).json_rpc_method_handler(method, params) + return super(ExtendedJsonRpcApi, self).json_rpc_method_handler(method, params) From 0f96dc31b48f4f2d6db2157118f593e28266995a Mon Sep 17 00:00:00 2001 From: Erik van den Brink Date: Fri, 12 Oct 2018 20:16:27 +0200 Subject: [PATCH 02/55] Mute expected test stacktrace and clearly identify why an exception is thrown. (#663) --- .../Commands/tests/test_send_command.py | 40 ++++++------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/neo/Prompt/Commands/tests/test_send_command.py b/neo/Prompt/Commands/tests/test_send_command.py index 6c6bf0906..15ebddb69 100644 --- a/neo/Prompt/Commands/tests/test_send_command.py +++ b/neo/Prompt/Commands/tests/test_send_command.py @@ -8,13 +8,13 @@ from neo.Prompt.Utils import get_tx_attr_from_args from neo.Prompt.Commands import Send import shutil +from mock import MagicMock import json from mock import patch class UserWalletTestCase(WalletFixtureTestCase): - wallet_1_script_hash = UInt160(data=b'\x1c\xc9\xc0\\\xef\xff\xe6\xcd\xd7\xb1\x82\x81j\x91R\xec!\x8d.\xc0') wallet_1_addr = 'AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc3' @@ -41,7 +41,6 @@ def GetWallet1(cls, recreate=False): def test_send_neo(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ['neo', self.watch_addr_str, '50'] @@ -52,7 +51,6 @@ def test_send_neo(self): def test_send_gas_mimic_prompt(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ['gas', self.watch_addr_str, '5'] res = False @@ -65,7 +63,6 @@ def test_send_gas_mimic_prompt(self): def test_send_with_fee_and_from_addr(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ['neo', self.watch_addr_str, '1', '--from-addr=AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc3', '--fee=0.005'] @@ -120,7 +117,7 @@ def test_send_bad_address_from(self): wallet = self.GetWallet1(recreate=True) address_from = '--from-addr=AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc' # address_from is too short causing ToScriptHash to fail - args = ['neo', self.watch_addr_str, '12', address_from] + args = ['neo', self.watch_addr_str, '12', address_from] framework = construct_send_basic(wallet, args) @@ -195,7 +192,6 @@ def test_send_token_bad(self): def test_send_token_ok(self): with patch('neo.Prompt.Commands.Tokens.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) token_hash = '31730cc9a1844891a3bafd1aa929a4142860d8d3' @@ -219,7 +215,6 @@ def test_insufficient_funds(self): def test_bad_password(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=['blah']): - wallet = self.GetWallet1(recreate=True) args = ['neo', self.watch_addr_str, '50'] @@ -231,7 +226,6 @@ def test_bad_password(self): @patch.object(Send, 'gather_signatures') def test_owners(self, mock): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ['gas', self.wallet_1_addr, '2', "--owners=['AXjaFSP23Jkbe6Pk9pPGT6NBDs1HVdqaXK','APRgMZHZubii29UXF9uFa6sohrsYupNAvx']"] @@ -243,7 +237,6 @@ def test_owners(self, mock): def test_attributes(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ['gas', self.watch_addr_str, '2', '--tx-attr={"usage":241,"data":"This is a remark"}'] @@ -255,7 +248,6 @@ def test_attributes(self): def test_multiple_attributes(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ['gas', self.watch_addr_str, '2', '--tx-attr=[{"usage":241,"data":"This is a remark"},{"usage":242,"data":"This is a remark 2"}]'] @@ -267,7 +259,6 @@ def test_multiple_attributes(self): def test_bad_attributes(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ['gas', self.watch_addr_str, '2', '--tx-attr=[{"usa:241"data":his is a remark"}]'] @@ -293,7 +284,6 @@ def test_utilst_bad_type(self): args = ["--tx-attr=bytearray(b'\x00\x00')"] with self.assertRaises(Exception) as context: - args, txattr = get_tx_attr_from_args(args) self.assertTrue('could not convert object' in context.exception) self.assertEqual(len(args), 0) @@ -302,7 +292,6 @@ def test_utilst_bad_type(self): def test_fails_to_sign_tx(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): with patch('neo.Wallets.Wallet.Wallet.Sign', return_value=False): - wallet = self.GetWallet1(recreate=True) args = ['gas', self.watch_addr_str, '2'] @@ -314,7 +303,6 @@ def test_fails_to_sign_tx(self): def test_fails_to_relay_tx(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): with patch('neo.Prompt.Commands.Send.NodeLeader.Relay', return_value=False): - wallet = self.GetWallet1(recreate=True) args = ['gas', self.watch_addr_str, '2'] @@ -323,13 +311,19 @@ def test_fails_to_relay_tx(self): self.assertFalse(res) - def test_could_not_send(self): + @patch('neo.Prompt.Commands.Send.traceback') + def test_could_not_send(self, mocked_tracback_module): + # mocking traceback module to avoid stacktrace printing during test run wallet = self.GetWallet1(recreate=True) args = ['gas', self.watch_addr_str, '2'] contract_tx, scripthash_from, fee, owners, user_tx_attributes = construct_send_basic(wallet, args) - res = process_transaction(wallet, contract_tx, scripthash_from, fee, owners, user_tx_attributes) # forces the 'try:' to fail + scripthash_change = scripthash_from + # mocking wallet to trigger the exception + wallet = MagicMock() + wallet.MakeTransaction.side_effect = Exception + res = process_transaction(wallet, contract_tx, scripthash_from, scripthash_change, fee, owners, user_tx_attributes) # forces the 'try:' to fail self.assertFalse(res) @@ -356,7 +350,6 @@ def test_sendmany_good_simple(self): def test_sendmany_good_complex(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", "AXjaFSP23Jkbe6Pk9pPGT6NBDs1HVdqaXK", "1", "gas", "AXjaFSP23Jkbe6Pk9pPGT6NBDs1HVdqaXK", "1", UserWalletTestCase.wallet_1_pass()]): - wallet = self.GetWallet1(recreate=True) args = ["2", '--from-addr=%s' % self.wallet_1_addr, '--change-addr=%s' % self.watch_addr_str, '--fee=0.005'] @@ -412,7 +405,6 @@ def test_sendmany_weird_outgoing(self): def test_sendmany_bad_assetid(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "blah", self.watch_addr_str, "1"]): - wallet = self.GetWallet1(recreate=True) args = ['2'] @@ -422,7 +414,6 @@ def test_sendmany_bad_assetid(self): def test_sendmany_token(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "NXT4", self.watch_addr_str, "32"]): - wallet = self.GetWallet1(recreate=True) token_hash = '31730cc9a1844891a3bafd1aa929a4142860d8d3' @@ -446,7 +437,6 @@ def test_sendmany_bad_address_to(self): def test_sendmany_negative_amount(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "gas", self.watch_addr_str, "-1"]): - wallet = self.GetWallet1(recreate=True) args = ['2'] @@ -456,7 +446,6 @@ def test_sendmany_negative_amount(self): def test_sendmany_zero_amount(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "gas", self.watch_addr_str, "0"]): - wallet = self.GetWallet1(recreate=True) args = ['2'] @@ -466,7 +455,6 @@ def test_sendmany_zero_amount(self): def test_sendmany_weird_amount(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "gas", self.watch_addr_str, "5.abc3"]): - wallet = self.GetWallet1(recreate=True) args = ['2'] @@ -476,7 +464,6 @@ def test_sendmany_weird_amount(self): def test_sendmany_bad_precision_amount(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["gas", self.watch_addr_str, "1", "neo", self.watch_addr_str, "5.01"]): - wallet = self.GetWallet1(recreate=True) args = ['2'] @@ -486,10 +473,9 @@ def test_sendmany_bad_precision_amount(self): def test_sendmany_bad_address_from(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "gas", self.watch_addr_str, "1"]): - wallet = self.GetWallet1(recreate=True) address_from = '--from-addr=AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc' # address_from is too short causing ToScriptHash to fail - args = ['2', address_from] + args = ['2', address_from] framework = construct_send_many(wallet, args) @@ -497,10 +483,9 @@ def test_sendmany_bad_address_from(self): def test_sendmany_bad_change_address(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "gas", self.watch_addr_str, "1"]): - wallet = self.GetWallet1(recreate=True) change_address = '--change-addr=AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkE' # change address is too short causing ToScriptHash to fail - args = ['2', change_address] + args = ['2', change_address] framework = construct_send_many(wallet, args) @@ -508,7 +493,6 @@ def test_sendmany_bad_change_address(self): def test_sendmany_negative_fee(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=["neo", self.watch_addr_str, "1", "gas", self.watch_addr_str, "1"]): - wallet = self.GetWallet1(recreate=True) args = ['2', '--fee=-0.005'] From 1e5b4dc3afb19d97646d7a1593914f7a4b7acbf9 Mon Sep 17 00:00:00 2001 From: dauTT <30392990+dauTT@users.noreply.github.com> Date: Fri, 12 Oct 2018 21:33:19 +0200 Subject: [PATCH 03/55] Add guideline for adding tests to the neo-privnet-unittest image (#661) * Add the option -u (unittest-net) to prompt.py * Add unittest guildeline and add the smart contract source codes (UnitTest-SM.zip) to the fixtures package --- CHANGELOG.rst | 2 + docs/source/images/fixture-tests.PNG | Bin 0 -> 37686 bytes docs/source/tests.rst | 116 +++++++++++++++++++++++++++ fixtures/UnitTest-SM.zip | Bin 0 -> 302358 bytes neo/bin/prompt.py | 4 + neo/data/protocol.unittest-net.json | 4 +- 6 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 docs/source/images/fixture-tests.PNG create mode 100644 fixtures/UnitTest-SM.zip diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c30c7afd0..6ba652b10 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,8 @@ All notable changes to this project are documented in this file. - Add ExtendedJsonRpcApi, Add ``getnodestate`` RPC extended method, Add ``gettxhistory`` RPC extended method - Fix return types of ``claimGas`` function. - Update compiler version ``v0.5.4`` +- Add the option -u (unittest-net) to prompt.py +- Add fixtures guidelines and add the smart contract source codes (UnitTest-SM.zip) to the fixtures package - Adds ``sendmany`` feature to prompt.py, integrates with ``send`` feature, and adds provisions for sending with a negative fee and bad from_address - Fix ``ExtendedJsonRpcApi`` diff --git a/docs/source/images/fixture-tests.PNG b/docs/source/images/fixture-tests.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e6cacd12949550a416932247328f4ae7f617e73a GIT binary patch literal 37686 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 aIXV^Jb>7(`YY>6`WC>B3$Jrvf?*9Y8NqUU{ literal 0 HcmV?d00001 diff --git a/docs/source/tests.rst b/docs/source/tests.rst index 64e389100..9ad223da0 100644 --- a/docs/source/tests.rst +++ b/docs/source/tests.rst @@ -35,3 +35,119 @@ If you are adding tests or altering functionality, it might be faster to only ru .. code-block:: sh python -m unittest neo/test_settings.py + + + +Fixtures Guidelines +------------------- + +The following guideline is relevant to all the ``unit-tests`` which are depending either on ``BlockChainFixtureTestCase`` or ``WalletFixtureTestCase``. +Such tests rely on fixtures which are produced by a ``neo-python-privnet-unittest`` image. The image is currently located here: `link `_ + +- The tests which depend directly on ``BlockChainFixtureTestCase`` are generated using transactions between addresses contained in BC wallets: (``neo-test-bc.wallet``, ``neo-test2-bc.wallet``). + Occasionally we have also used, in few tests, the default address in ``neo-test-coz.wallet``. The coz wallet is special as it is the original coz privnet wallet with 100000000 NEO. + +- The tests which depend directly on ``WalletFixtureTestCase`` are generated using transactions between addresses contained in W wallets (``neo-test1-w.wallet``, ``neo-test2-w.wallet``, ``neo-test3-w.wallet``). + + A picture may help to visualize the tests BC and W: + +.. image:: images/fixture-tests.PNG + +When adding new tests to the privnet fixtures try to follow the following guidelines in order to minimize the dependencies between unit-tests: + +a) We should strive to not use directly the ``neo-test-coz.wallet`` in any tests as it is expected to be the source of NEO and GAS for other test wallet and it is natural that it will change quite a bit in due course of time. + If we create tests which involve the ``neo-test-coz.wallet``, then we should be ready to update them frequently. + This is not good from a maintenance perspective. +b) Try to re-use existing transactions on the privnet fixture for creating new tests. +c) Add new transactions to the privnet fixture only when required as this will add the risk to break existing tests. + We are aware that we have a couple of assertions related tot the blockchain‘s height and wallet‘s height. + These tests inevitably need to be updated after adding new transactions to the privnet fixtures. +d) Create your own token if you want to be sure to isolate your tests. +e) Create new wallets only if absolutely necessary. + +**The last three points c), d), e) required updating the fixtures:** + +1) Pull the lastet `neo-python-privnet-unittest `_ image: + +.. code-block:: sh + + docker pull cityofzion/neo-python-privnet-unittest:v0.0.xx + + +2) Run the image: + +.. code-block:: sh + + docker run --rm -d --name neo-privnet-unittest -p 20333-20336:20333-20336/tcp -p 30333-30336:30333-30336/tcp dautt/neo-privnet-unittest:v0.0.xx`` + +3) Clean the current ``unittest`` chain: + +.. code-block:: sh + + rm -rf ~/.neopython/Chains/unittest + rm -rf ~/.neopython/Chains/unittest_notif + +4) Activate your virtual environment: + +.. code-block:: sh + + source venv/bin/activate + +5) Start the neo node: + +.. code-block:: sh + + python prompt.py -u + +6) Use the following wallets for generating transactions: + +.. code-block:: sh + + neo-test-coz.wallet (pwd = coz) + neo-test1-bc.wallet (pwd = 1234567890) + neo-test2-bc.wallet (pwd = 1234567890) + neo-test1-w.wallet (pwd = 1234567890) + neo-test2-w.wallet (pwd = 1234567890) + neo-test3-w.wallet (pwd = 1234567890) + +(If you want to add new tests which depend directly on ``BlockchainFixtureTestCase`` then use any one of the ``-bc.wallet`` type of wallets. And if you want add new tests which depend directly on ``WalletFixtureTestCase`` then use any one of the ``-w.wallet`` type of wallets.) + +7) If you need to create a new smart contract consider to re-use the existing one in: + +.. code-block:: sh + + fixtures/UnitTest-SM.zip + +(In case the source code of the new smart contract is not present in the above zip folder, please add it.) + +8) If you have deployed a new smart contract on the ``neo-python-privnet-unittest`` image, please use the word ``test`` as prefix while defining the ``contract name``. +In that way we can easily find out all the contracts deploy on the image by running this command: + +.. code-block:: sh + + contract search test + +9) Once you are satisfied with your new unit-tests save the tests, then first restart the docker image and deploy your tests again, only then create a new image by incrementing the version number (xx+1): + +.. code-block:: sh + + docker commit neo-privnet-unittest dautt/neo-privnet-unittest:v0.0.xx+1 + +The reason for this is that we need to keep the image as small as possible. It can inadvertently happen that your image has been accumulating new blocks for days or weeks e.g. while working on implementing the new tests in phases, which unnecessarily increases the image size. +Our test fixtures are reset and extracted 20+ times in our build system so any size increase will add a delay * 20 or more. + +10) Create the fixtures by incrementing the suffix number (x+1): + +.. code-block:: sh + + notif_fixtures_vx+1.tar.gz + fixtures_vx+1.tar.gz + +11) Update the fixture name in the static class variables in the following files + +.. code-block:: sh + + neo.Utils.BlockchainFixtureTestCase.py + neo.api.REST.test_rest_api.py + +12) Create a new PR with the link to the new image and the newly created fixtures. diff --git a/fixtures/UnitTest-SM.zip b/fixtures/UnitTest-SM.zip new file mode 100644 index 0000000000000000000000000000000000000000..590b1116d81d6c8db56c6804a01ad111b5a82eb3 GIT binary patch literal 302358 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®Mc1(Ot=VZT8i4U7=P9tyHEhD6L-|*t|F}U3)uS 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%0A?Wje#9;Ac%@ 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 z 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

-?2StIO?<7bFVVYdfGKv+%?1L|aS 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

bFJk-hqj#$M>3xBr?plc6 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 z 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%0Aqq?~`2D2>YV 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

S$1}=pGv_#N*fp{~ zyYqFm+35C;8(HO?3Dt_q2`Rf;3a8{2kC~phY1kCYO-EA(wkbazyRDAmfA?HzY)Sbl zvmqx(0R7?a@i3DG#R^~t3;-PsoHl~P&DXE2@&%A~G5y72_{Wu3cVxoX!|k-g40KYs3NE|D8{ zx5>#r%ak2BJ#t!2frVD7O578vw-@)xWkl3$p?0ll8u@`%qb&W`fK>HYfvWXpGp-&p z{QYR`nxeSbr_biEQx!x9zc}s1{XNhLQ9QKk>w4^ZOW+4buqO|@qo=Es^soWLz{xFz zg6*pC?+T!+qD4f5f5IkT|5bOz{^WWY`R_ph{u~$t&?2I_fInh?a&KDq9t?OVQ>5F+ z-OOJ0<``u&__HVDFb?*K@t@T3J)o^Xz$`%Tm!Q}yp%7Fb2RcBiuMhhVs9^|OAi-7C z-p_4tmBE>GIu4mb5IKlXj{s6~-)_Si|LivGR|<32PW6 zLY|Ca=saHdN*?57z=;eYNlK(TJ@g%5v>tRO2OOgns$>}T+eGD; z+@uEsLPtTxJJe?|kP`1{pzRELor9;-d)-OOmY!ayjLqtBt?iDDKO}li6$8x zU7P_tIt+wNyjM@1M2gY(&QH>TWNH)h4!}+iA`%VfKudJV65>TghLWHIXH^U9eNsNa z;S;zKc1#x{JM@XsVMj2SF+GC@d}i~DDFqxfApEjF6tLU*(RUaM?3^W#0?ARtm22%TBly7W^_FQpSF~ixXh#(_w zP#7~9eWWSDk_?#O7mlK5LChv70~kgLH;sM7r?Xuu(v;i7r76oWhM0(?_lE}LVnAgX zS(-D9gQ%94mQ-U?BbK>EkO|e;h{-gfQ%$KxrbfZ0mMoT~A^hKxc6QXK)+Uz9+)<%W z+QEc23`gAERhrNg7iT|W#MzAAVcUiHP5?eYR0NRYO=w5pNA8Cox}25}qY=(U!{kq& zDEID%h=)mhs4gS}-|ykm7UMx8+SEW2Cg|bt{}Hbpaa=O{&4pypeyVPonE>47DyYsF zNp!!e6V}1 zLgZ->3CrMyRS79c^yoM0y`vv%m2E;_!H#;bORr?KwP{7NKrkHpyXz#_!m(U8L+ ziVk}LSQ+;e{9=&3Ph#}%=~6H%NAPIlhmsS$o9wVx`h-)W9RRvJsQ89&lN=vxd-2%e zxICQ_8vn?@MY`{R@k@a^Bz8CvBB%CC{P}&!Ui2aKB<_5|t<6o=;PYpKid~Hfktqiy z=D=qzk79#Cgc%`-{C?t0pa=LGju6HHM+gV|Y}n{1L|Vy_074)@H3&WXCcvcD+06zX zyTFR?51)=mY>r5#Ac|)g%vA&JbqZAWT>CbtvVBf`#Z zgot!LITB)ToFE6Z_Q3@-{eRXvSYHs)SXU(G!eYk=qWA>X!sw`AyPMC<0L?*RfD67j zU#KR59?V_U((&5=zPPFRYV!( zOn?7>H$lv#EERW>4X*}Bx`_JTFwid1^zd+|z>tJ>x+iH`b%QQT@xvbv2$2V$`@_YA z3>j?VZR}Zv5LqlM(+|U#5+MU@@xxr-@ZVt((cTT0n2cnZzwx6w1VLvN_+fRaIw9bG z%q*}OF7d&%nHY!OTuGRSF5%dYO^=74UX2(_$Pf~y)` zpdQ7~{_(}<%bxHH;_2mAM!)mJIjh13UnjDFA9oWW%-j3B@#@;*-B2t#5 zd6Cg~#}b3`&sbeqDF2KWaN1-;h?t~e&{zU+nT1sd#m6B-8ZiPe|0A(D2z5xY0*CnJ z#WM$D_)u-1h$<;+321WhZ6GM9h!zno(@A0`aKa+_*$O(J#OnEAkD-N#${d2wkN{D+ zMbr|I4ipi>%JGcFSmF$F!K*Jil1mC<(V)Z+R!Ij+{GdgM#LxQ`8oG-4iQtbo99F;u z%JZN_h}e1m3QlajA|WaihrvohKyetf2ob7JU#OBw#bCb>Vqu>iLXioy2$4npKgAOJ zyq`!;U?Jg~M(j0s_@)spXOO_)pF(~M7(aR8h=qceb+H$D)p1a>Id~|^Z`pgg4us1D S%6#xk1>Cgg;DOB!%Kre_6SOP< literal 0 HcmV?d00001 diff --git a/neo/bin/prompt.py b/neo/bin/prompt.py index 143f3040b..615aaebe5 100755 --- a/neo/bin/prompt.py +++ b/neo/bin/prompt.py @@ -1055,6 +1055,8 @@ def main(): help="Use a private net instead of the default TestNet, optionally using a custom host (default: 127.0.0.1)") group.add_argument("--coznet", action="store_true", default=False, help="Use the CoZ network instead of the default TestNet") + group.add_argument("-u", "--unittest", nargs="?", metavar="host", const=True, default=False, + help="Use a private net instead of the default TestNet, optionally using a custom host (default: 127.0.0.1)") group.add_argument("-c", "--config", action="store", help="Use a specific config file") # Theme @@ -1097,6 +1099,8 @@ def main(): return elif args.coznet: settings.setup_coznet() + elif args.unittest: + settings.setup_unittest_net() # Logfile settings & setup logfile_fn = os.path.join(settings.DATA_DIR_PATH, 'prompt.log') diff --git a/neo/data/protocol.unittest-net.json b/neo/data/protocol.unittest-net.json index ba897d3e2..302a7fea1 100644 --- a/neo/data/protocol.unittest-net.json +++ b/neo/data/protocol.unittest-net.json @@ -25,8 +25,8 @@ } }, "ApplicationConfiguration": { - "DataDirectoryPath": "Chains/privnet", - "NotificationDataPath": "Chains/privnet_notif", + "DataDirectoryPath": "Chains/unittest", + "NotificationDataPath": "Chains/unittest_notif", "RPCPort": 20332, "NodePort": 20333, "WsPort": 20334, From 8febcf150f14c92d897b3908457f29db5d90cd42 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 18 Oct 2018 14:05:57 -0700 Subject: [PATCH 04/55] Update CHANGELOG.rst for compatibility --- CHANGELOG.rst | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6ba652b10..5e030cb3b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,13 +5,7 @@ All notable changes to this project are documented in this file. [0.8.2] In Progress ------------------- -- Add ExtendedJsonRpcApi, Add ``getnodestate`` RPC extended method, Add ``gettxhistory`` RPC extended method -- Fix return types of ``claimGas`` function. -- Update compiler version ``v0.5.4`` -- Add the option -u (unittest-net) to prompt.py -- Add fixtures guidelines and add the smart contract source codes (UnitTest-SM.zip) to the fixtures package -- Adds ``sendmany`` feature to prompt.py, integrates with ``send`` feature, and adds provisions for sending with a negative fee and bad from_address -- Fix ``ExtendedJsonRpcApi`` + [0.8.1] 2018-10-06 ------------------ From c7a790f800dce5c50fbb419fe50c3f22175b4fab Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 18 Oct 2018 14:07:17 -0700 Subject: [PATCH 05/55] Update CHANGELOG.rst --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5e030cb3b..e6f263686 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,14 @@ All notable changes to this project are documented in this file. [0.8.2] In Progress ------------------- +- Add raw transaction building examples in ``\examples\`` folder +- Add ExtendedJsonRpcApi, Add ``getnodestate`` RPC extended method, Add ``gettxhistory`` RPC extended method +- Fix return types of ``claimGas`` function. +- Update compiler version ``v0.5.4`` +- Add the option -u (unittest-net) to prompt.py +- Add fixtures guidelines and add the smart contract source codes (UnitTest-SM.zip) to the fixtures package +- Adds ``sendmany`` feature to prompt.py, integrates with ``send`` feature, and adds provisions for sending with a negative fee and bad from_address +- Fix ``ExtendedJsonRpcApi`` [0.8.1] 2018-10-06 From c51390e2b68646c7a141c1dc127d9b37eec5921e Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 18 Oct 2018 14:07:47 -0700 Subject: [PATCH 06/55] Merge CoZ Development into jseagrave21 Development (#49) * Fix ExtendedJsonRpcApi (#662) * Update ExtendedJsonRpcApi.py - add fix provided by @localhuman so original methods are returned as well as extended methods * Mute expected test stacktrace and clearly identify why an exception is thrown. (#663) * Add guideline for adding tests to the neo-privnet-unittest image (#661) * Add the option -u (unittest-net) to prompt.py * Add unittest guildeline and add the smart contract source codes (UnitTest-SM.zip) to the fixtures package * Add raw transaction building examples (#665) * Update neo-boa version to fix core building test --- CHANGELOG.rst | 2 +- examples/build_raw_transactions.py | 192 ++++++++++++++++++ .../Wallets/peewee/UserWallet.py | 5 +- requirements.txt | 2 +- 4 files changed, 197 insertions(+), 4 deletions(-) create mode 100644 examples/build_raw_transactions.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e6f263686..c28e0b969 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -23,7 +23,7 @@ All notable changes to this project are documented in this file. - Change notification transfer event format to use string quoted integer - Fix Notification token list to include correct hash for contract and token - Removes all ``hold`` and ``withdraw`` related functionality from wallet and prompt -- Fix 'script_hash' output in ``ToJson`` in AccountState, Adds an 'address' key, Adds a test for ``ToJson`` in AccountState, Replaces the variable ``script_hash`` in ``GetAccountState`` in LevelDBBlockchain with ``address``, Adds a test for ``GetAccountState`` in LevelDBBlockchain +- Various updates to inaccuracies in ``ToJson`` output of ``AccountState`` - Add documentation support for Python 3.7 - Change execution fail event payload to give more meaningful error messages diff --git a/examples/build_raw_transactions.py b/examples/build_raw_transactions.py new file mode 100644 index 000000000..6b11551f2 --- /dev/null +++ b/examples/build_raw_transactions.py @@ -0,0 +1,192 @@ +""" + This file contains 2 examples on how to build raw transactions that can be send via the 'sendrawtransaction' RPC endpoint. + + Note that the perspective taken in these examples is that you want a light wallet like approach. This means that you will + not have a fully synced Blockchain via neo-python and that you get certain pieces of data from external sources like the API at NEOSCAN.io + + The first example will build a Transaction for sending either NEO or GAS + + The second example will interact with a smart contract on the chain (this can be sending NEP5 tokens or simply quering data). +""" + +import binascii +import hashlib +from neo.Implementations.Wallets.peewee.UserWallet import UserWallet +from neo.Core.TX.Transaction import ContractTransaction, TransactionOutput +from neo.Core.TX.InvocationTransaction import InvocationTransaction +from neo.Core.TX.TransactionAttribute import TransactionAttribute, TransactionAttributeUsage +from neo.Core.CoinReference import CoinReference +from neo.SmartContract.ContractParameterContext import ContractParametersContext +from neocore.Fixed8 import Fixed8 +from neocore.UInt256 import UInt256 +from neocore.UInt160 import UInt160 +from neocore.KeyPair import KeyPair +from neo import Blockchain +from base58 import b58decode +from neo.VM.ScriptBuilder import ScriptBuilder + +""" + Example 1 + + Sending NEO or GAS happens via a ContractTransaction + For more information regarding different transaction types read point 3 of: + http://docs.neo.org/en-us/network/network-protocol.html#data-type + + The standard ``Transaction`` looks as follows (taken from the above source) + + +------+------------+-----------+--------------------------------------------------+ + | Size | Field | DataType | Description | + +------+------------+-----------+--------------------------------------------------+ + | 1 | Type | uint8 | Type of transaction | + | 1 | Version | uint8 | Trading version, currently 0 | + | ? | - | - | Data specific to transaction types | + | ?*? | Attributes | tx_attr[] | Additional features that the transaction has | + | 34*? | Inputs | tx_in[] | Input | + | 60*? | Outputs | tx_out[] | Output | + | ?*? | Scripts | script[] | List of scripts used to validate the transaction | + +------+------------+-----------+--------------------------------------------------+ + +""" + + +def example1(): + neo_asset_id = Blockchain.GetSystemShare().Hash + gas_asset_id = Blockchain.GetSystemCoin().Hash + + source_address = "D3u1UuDJkzUCixp9UUtSSza6Rgt4F9KJqv3mPSzWopgb" + source_script_hash = address_to_scripthash(source_address) + + destination_address = "Ad9A1xPbuA5YBFr1XPznDwBwQzdckAjCev" + destination_script_hash = address_to_scripthash(destination_address) + + # Let's start with building a ContractTransaction + # The constructor already sets the correct `Type` and `Version` fields, so we do not have to worry about that + contract_tx = ContractTransaction() + + # the ContractTransaction type has no special data, so we do not have to do anything there + + # Next we can add Attributes if we want. Again the various types are described in point 4. of the main link above + # We will add a simple "description" + contract_tx.Attributes.append(TransactionAttribute(usage=TransactionAttributeUsage.Description, data="My raw contract transaction description")) + + # The next field we will set are the inputs. The inputs neo-python expects are of the type ``CoinReference`` + # To create these inputs we will need the usual `PrevHash` and `PrevIndex` values. + # You can get the required data by using e.g. the neoscan.io API: https://api.neoscan.io/docs/index.html#api-v1-get-3 + # The `PrevHash` field equals to neoscan's `balance.unspent[index].txid` key, and `PrevIndex` comes from `balance.unspent[index].n` + # It is up to the transaction creator to make sure that the sum of all input ``value`` fields is equal to or bigger than the amount that's intended to be send + # The below values are fictuous and taken from the neoscan example + input1 = CoinReference(prev_hash=UInt256(data=binascii.unhexlify('19edc4159d2bcf4c538256b17336555b71a3a6a81ecb07493fc7fa218cbafdbd')), prev_index=787) + contract_tx.inputs = [input1] + + # Next we will create the outputs. + # The above input has a value of 5. We will create 2 outputs. + + # 1 output for sending 3 NEO to a specific destination address + send_to_destination_output = TransactionOutput(AssetId=neo_asset_id, Value=Fixed8.FromDecimal(3), script_hash=destination_script_hash) + + # and a second output for sending the change back to ourselves + return_change_output = TransactionOutput(AssetId=neo_asset_id, Value=Fixed8.FromDecimal(2), script_hash=source_script_hash) + + contract_tx.outputs = [send_to_destination_output, return_change_output] + + # at this point we've build our unsigned transaction and it's time to sign it before we get the raw output that we can send to the network via RPC + # we need to create a Wallet instance for helping us with signing + wallet = UserWallet.Create('path', generate_default_key=False) + + # if you have a WIF use + private_key = KeyPair.PrivateKeyFromWIF("WIF_string") + + # if you have a NEP2 encrypted key use the following instead + private_key = KeyPair.PrivateKeyFromNEP2("NEP2 key string", "password string") + + # we add the key to our wallet + wallet.CreateKey(private_key) + + # and now we're ready to sign + context = ContractParametersContext(contract_tx) + wallet.Sign(context) + + raw = contract_tx.ToArray() + raw_signed_transaction = raw.hex() + + +""" + Example 2 + + Interacting with a Smart contract happens via an InvocationTransaction + For more information regarding different transaction types read point 3 of: + http://docs.neo.org/en-us/network/network-protocol.html#data-type + + The standard ``Transaction`` looks as follows (taken from the above source) + + +------+------------+-----------+--------------------------------------------------+ + | Size | Field | DataType | Description | + +------+------------+-----------+--------------------------------------------------+ + | 1 | Type | uint8 | Type of transaction | + | 1 | Version | uint8 | Trading version, currently 0 | + | ? | - | - | Data specific to transaction types | + | ?*? | Attributes | tx_attr[] | Additional features that the transaction has | + | 34*? | Inputs | tx_in[] | Input | + | 60*? | Outputs | tx_out[] | Output | + | ?*? | Scripts | script[] | List of scripts used to validate the transaction | + +------+------------+-----------+--------------------------------------------------+ + +""" + + +def example2(): + source_address = "D3u1UuDJkzUCixp9UUtSSza6Rgt4F9KJqv3mPSzWopgb" + source_script_hash = address_to_scripthash(source_address) + + # start by creating a base InvocationTransaction + # the inputs, outputs and Type do not have to be set anymore. + invocation_tx = InvocationTransaction() + + # often times smart contract developers use the function ``CheckWitness`` to determine if the transaction is signed by somebody eligible of calling a certain method + # in order to pass that check you want to add the corresponding script_hash as a transaction attribute (this is generally the script_hash of the public key you use for signing) + # Note that for public functions like the NEP-5 'getBalance' and alike this would not be needed, but it doesn't hurt either + invocation_tx.Attributes.append(TransactionAttribute(usage=TransactionAttributeUsage.Script, data=source_script_hash)) + + # next we need to build a 'script' that gets executed against the smart contract. + # this is basically the script that calls the entry point of the contract with the necessary parameters + smartcontract_scripthash = UInt160.ParseString("1578103c13e39df15d0d29826d957e85d770d8c9") + sb = ScriptBuilder() + # call the NEP-5 `name` method on the contract (assumes contract address is a NEP-5 token) + sb.EmitAppCallWithOperation(smartcontract_scripthash, 'name') + invocation_tx.Script = binascii.unhexlify(sb.ToArray()) + + # at this point we've build our unsigned transaction and it's time to sign it before we get the raw output that we can send to the network via RPC + # we need to create a Wallet instance for helping us with signing + wallet = UserWallet.Create('path', generate_default_key=False) + + # if you have a WIF use + private_key = KeyPair.PrivateKeyFromWIF("WIF_string") + + # if you have a NEP2 encrypted key use the following instead + private_key = KeyPair.PrivateKeyFromNEP2("NEP2 key string", "password string") + + # we add the key to our wallet + wallet.CreateKey(private_key) + + # and now we're ready to sign + context = ContractParametersContext(invocation_tx) + wallet.Sign(context) + + raw = invocation_tx.ToArray() + raw_signed_transaction = raw.hex() + + +def address_to_scripthash(address: str) -> UInt160: + """Just a helper method""" + AddressVersion = 23 # fixed at this point + data = b58decode(address) + if len(data) != 25: + raise ValueError('Not correct Address, wrong length.') + if data[0] != AddressVersion: + raise ValueError('Not correct Coin Version') + + checksum_data = data[:21] + checksum = hashlib.sha256(hashlib.sha256(checksum_data).digest()).digest()[:4] + if checksum != data[21:]: + raise Exception('Address format error') + return UInt160(data=data[1:21]) diff --git a/neo/Implementations/Wallets/peewee/UserWallet.py b/neo/Implementations/Wallets/peewee/UserWallet.py index 44a0d0815..f19ba358e 100755 --- a/neo/Implementations/Wallets/peewee/UserWallet.py +++ b/neo/Implementations/Wallets/peewee/UserWallet.py @@ -87,7 +87,7 @@ def Open(path, password): return UserWallet(path=path, passwordKey=password, create=False) @staticmethod - def Create(path, password): + def Create(path, password, generate_default_key=True): """ Create a new user wallet. @@ -99,7 +99,8 @@ def Create(path, password): UserWallet: a UserWallet instance. """ wallet = UserWallet(path=path, passwordKey=password, create=True) - wallet.CreateKey() + if generate_default_key: + wallet.CreateKey() return wallet def CreateKey(self, prikey=None): diff --git a/requirements.txt b/requirements.txt index aaff91521..e0a79f3f4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -34,7 +34,7 @@ memory-profiler==0.54.0 mmh3==2.5.1 mock==2.0.0 mpmath==1.0.0 -neo-boa==0.5.4 +neo-boa==0.5.5 neo-python-rpc==0.2.1 neocore==0.5.3 pbr==4.2.0 From e12e7467a18632dfb697e427e91905891298214a Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 31 Oct 2018 22:09:55 -0700 Subject: [PATCH 07/55] Update test_extended_json_rpc_api.py - add tests for "showallaccounts" and "showallaccountstates" --- neo/api/JSONRPC/test_extended_json_rpc_api.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/neo/api/JSONRPC/test_extended_json_rpc_api.py b/neo/api/JSONRPC/test_extended_json_rpc_api.py index e1474e030..c76dcb15b 100644 --- a/neo/api/JSONRPC/test_extended_json_rpc_api.py +++ b/neo/api/JSONRPC/test_extended_json_rpc_api.py @@ -118,3 +118,21 @@ def test_gettxhistory(self): self.app.wallet.Close() self.app.wallet = None os.remove(WalletFixtureTestCase.wallet_1_dest()) + + def test_showallaccounts(self): + req = self._gen_rpc_req("showallaccounts") + mock_req = mock_request(json.dumps(req).encode("utf-8")) + res = json.loads(self.app.home(mock_req)) + self.assertEqual(len(res['result']), 9) + for entry in res['result']: + # test that each entry is an address + self.assertEqual("A", entry[0]) + self.assertEqual(34, len(entry)) + + def test_showallaccountstates(self): + req = self._gen_rpc_req("showallaccountstates") + mock_req = mock_request(json.dumps(req).encode("utf-8")) + res = json.loads(self.app.home(mock_req)) + self.assertEqual(len(res['result']), 9) + for entry in res['result']: + self.assertTrue('balances' in entry) From 0f5590337d18cb6d484e6f56fcd2676f798cba25 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 31 Oct 2018 22:11:56 -0700 Subject: [PATCH 08/55] Update test_extended_json_rpc_api.py - revert --- neo/api/JSONRPC/test_extended_json_rpc_api.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/neo/api/JSONRPC/test_extended_json_rpc_api.py b/neo/api/JSONRPC/test_extended_json_rpc_api.py index c76dcb15b..e1474e030 100644 --- a/neo/api/JSONRPC/test_extended_json_rpc_api.py +++ b/neo/api/JSONRPC/test_extended_json_rpc_api.py @@ -118,21 +118,3 @@ def test_gettxhistory(self): self.app.wallet.Close() self.app.wallet = None os.remove(WalletFixtureTestCase.wallet_1_dest()) - - def test_showallaccounts(self): - req = self._gen_rpc_req("showallaccounts") - mock_req = mock_request(json.dumps(req).encode("utf-8")) - res = json.loads(self.app.home(mock_req)) - self.assertEqual(len(res['result']), 9) - for entry in res['result']: - # test that each entry is an address - self.assertEqual("A", entry[0]) - self.assertEqual(34, len(entry)) - - def test_showallaccountstates(self): - req = self._gen_rpc_req("showallaccountstates") - mock_req = mock_request(json.dumps(req).encode("utf-8")) - res = json.loads(self.app.home(mock_req)) - self.assertEqual(len(res['result']), 9) - for entry in res['result']: - self.assertTrue('balances' in entry) From a046c9a85b850d8624676a047b7f15dc09e984ea Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:30:04 -0800 Subject: [PATCH 09/55] Update LoadSmartContract.py - remove unnecessary logic --- neo/Prompt/Commands/LoadSmartContract.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/neo/Prompt/Commands/LoadSmartContract.py b/neo/Prompt/Commands/LoadSmartContract.py index c3ce043b2..565358409 100644 --- a/neo/Prompt/Commands/LoadSmartContract.py +++ b/neo/Prompt/Commands/LoadSmartContract.py @@ -224,16 +224,10 @@ def ImportMultiSigContractAddr(wallet, args): m = get_arg(args, 1) publicKeys = args[2:] - if publicKeys[1]: - pubkey_script_hash = Crypto.ToScriptHash(pubkey, unhex=True) - - verification_contract = Contract.CreateMultiSigContract(pubkey_script_hash, int(m), publicKeys) - - address = verification_contract.Address - - wallet.AddContract(verification_contract) - - print("Added multi-sig contract address %s to wallet" % address) - return address + pubkey_script_hash = Crypto.ToScriptHash(pubkey, unhex=True) + verification_contract = Contract.CreateMultiSigContract(pubkey_script_hash, int(m), publicKeys) + address = verification_contract.Address + wallet.AddContract(verification_contract) - return 'Hello' + print("Added multi-sig contract address %s to wallet" % address) + return address From 4ed6d852b393eafd9cd64fcefe1bb717e091f7ed Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:31:48 -0800 Subject: [PATCH 10/55] Update test_loadsmartcontract.py - add tests for `ImportMultiSigContractAddr` --- .../Commands/tests/test_loadsmartcontract.py | 69 ++++++++++++++++++- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/neo/Prompt/Commands/tests/test_loadsmartcontract.py b/neo/Prompt/Commands/tests/test_loadsmartcontract.py index ec84163c9..564b554d2 100644 --- a/neo/Prompt/Commands/tests/test_loadsmartcontract.py +++ b/neo/Prompt/Commands/tests/test_loadsmartcontract.py @@ -1,9 +1,27 @@ -from unittest import TestCase -from neo.Prompt.Commands.LoadSmartContract import LoadContract, GatherLoadedContractParams +from neo.Utils.WalletFixtureTestCase import WalletFixtureTestCase +from neo.Wallets.utils import to_aes_key +from neo.Implementations.Wallets.peewee.UserWallet import UserWallet +import shutil +from neo.Prompt.Commands.LoadSmartContract import LoadContract, GatherLoadedContractParams, ImportMultiSigContractAddr import mock -class LoadSmartContractTestCase(TestCase): +class LoadSmartContractTestCase(WalletFixtureTestCase): + + wallet_1_addr = "AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc3" + wallet_1_pk = "03cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c6" + + _wallet1 = None + + wallet_2_pk = "03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034" + + @classmethod + def GetWallet1(cls, recreate=False): + if cls._wallet1 is None or recreate: + shutil.copyfile(cls.wallet_1_path(), cls.wallet_1_dest()) + cls._wallet1 = UserWallet.Open(LoadSmartContractTestCase.wallet_1_dest(), + to_aes_key(LoadSmartContractTestCase.wallet_1_pass())) + return cls._wallet1 def test_loadcontract(self): @@ -97,3 +115,48 @@ def test_gatherloadedcontractparams(self): res = GatherLoadedContractParams(args, script) self.assertTrue(res) + + def test_importmultisigcontractaddr(self): + + # good test + wallet = self.GetWallet1(recreate=True) + args = [self.wallet_1_pk, 2, self.wallet_1_pk, self.wallet_2_pk] + + address = ImportMultiSigContractAddr(wallet, args) + + self.assertEqual(address[0], "A") + self.assertEqual(len(address), 34) + + # test too few args + wallet = self.GetWallet1() + args = [self.wallet_1_pk, 2, self.wallet_1_pk] # need at least four args + + res = ImportMultiSigContractAddr(wallet, args) + + self.assertFalse(res) + + # test no wallet + wallet = None + args = [self.wallet_1_pk, 2, self.wallet_1_pk, self.wallet_2_pk] + + res = ImportMultiSigContractAddr(wallet, args) + + self.assertFalse(res) + + # test bad first pk + with self.assertRaises(Exception) as e: + wallet = self.GetWallet1(recreate=True) + args = [self.wallet_2_pk, 2, self.wallet_1_pk, self.wallet_2_pk] # first pk needs to be from wallet + + ImportMultiSigContractAddr(wallet, args) + + self.assertTrue("Invalid operation - public key mismatch" in str(e.exception)) + + # test bad second pk + with self.assertRaises(Exception) as e: + wallet = self.GetWallet1(recreate=True) + args = [self.wallet_1_pk, 2, "03cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c", self.wallet_2_pk] # pk is too short + + ImportMultiSigContractAddr(wallet, args) + + self.assertTrue("Odd-length string" in str(e.exception)) From d7996944eb09a285d46dbada1f8cb0be74f74be0 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:37:25 -0800 Subject: [PATCH 11/55] Update Send.py - update logic so it is consistent with previous. - return `tx` on successful relay --- neo/Prompt/Commands/Send.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/neo/Prompt/Commands/Send.py b/neo/Prompt/Commands/Send.py index 6ca449e00..e29d59906 100755 --- a/neo/Prompt/Commands/Send.py +++ b/neo/Prompt/Commands/Send.py @@ -231,7 +231,7 @@ def parse_and_sign(wallet, jsn): context = ContractParametersContext.FromJson(jsn) if context is None: print("Failed to parse JSON") - return + return False wallet.Sign(context) @@ -250,15 +250,18 @@ def parse_and_sign(wallet, jsn): if relayed: print("Relayed Tx: %s " % tx.Hash.ToString()) + return tx else: print("Could not relay tx %s " % tx.Hash.ToString()) - return + return False else: print("Transaction initiated, but the signature is incomplete") print(json.dumps(context.ToJson(), separators=(',', ':'))) - return + return False except Exception as e: print("could not send: %s " % e) traceback.print_stack() traceback.print_exc() + + return False From dbc4c9523539abac7f452cb110ae054494e1abfd Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:38:41 -0800 Subject: [PATCH 12/55] Update test_send_command.py - add tests for `parse_and_sign` --- .../Commands/tests/test_send_command.py | 105 +++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/neo/Prompt/Commands/tests/test_send_command.py b/neo/Prompt/Commands/tests/test_send_command.py index 3721f036a..63c1a6097 100644 --- a/neo/Prompt/Commands/tests/test_send_command.py +++ b/neo/Prompt/Commands/tests/test_send_command.py @@ -3,7 +3,7 @@ from neo.Implementations.Wallets.peewee.UserWallet import UserWallet from neo.Core.Blockchain import Blockchain from neocore.UInt160 import UInt160 -from neo.Prompt.Commands.Send import construct_send_basic, construct_send_many, process_transaction +from neo.Prompt.Commands.Send import construct_send_basic, construct_send_many, process_transaction, parse_and_sign from neo.Prompt.Commands.Wallet import ImportToken from neo.Prompt.Utils import get_tx_attr_from_args from neo.Prompt.Commands import Send @@ -23,6 +23,10 @@ class UserWalletTestCase(WalletFixtureTestCase): watch_addr_str = 'AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkEm' _wallet1 = None + _wallet2 = None + + wallet_1_and_2_multisig_addr = "AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5" + @property def GAS(self): return Blockchain.Default().SystemCoin().Hash @@ -39,6 +43,14 @@ def GetWallet1(cls, recreate=False): to_aes_key(UserWalletTestCase.wallet_1_pass())) return cls._wallet1 + @classmethod + def GetWallet2(cls, recreate=False): + if cls._wallet2 is None or recreate: + shutil.copyfile(cls.wallet_2_path(), cls.wallet_2_dest()) + cls._wallet2 = UserWallet.Open(UserWalletTestCase.wallet_2_dest(), + to_aes_key(UserWalletTestCase.wallet_2_pass())) + return cls._wallet2 + def test_send_neo(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): wallet = self.GetWallet1(recreate=True) @@ -501,3 +513,94 @@ def test_sendmany_negative_fee(self): framework = construct_send_many(wallet, args) self.assertFalse(framework) + + def test_parse_and_sign_good(self): + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + # start the tx from wallet2 + wallet2 = self.GetWallet2(recreate=True) + args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + + framework = construct_send_basic(wallet2, args) + process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) + + # now sign the tx with wallet1 + wallet1 = self.GetWallet1(recreate=True) + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + + res = parse_and_sign(wallet1, jsn) + + res = res.ToJson() + self.assertTrue(res) + self.assertEqual(res['vout'][0]['value'], "1") # verify the amount + self.assertEqual(res['vout'][0]['address'], "AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc3") # verify to_address + self.assertEqual(res['vout'][1]['address'], "AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5") # verify from_address + + def test_parse_and_sign_bad_jsn(self): + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + # start the tx from wallet2 + wallet2 = self.GetWallet2(recreate=True) + args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + + framework = construct_send_basic(wallet2, args) + process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) + + # now sign the tx with wallet1 + wallet1 = self.GetWallet1(recreate=True) + jsn = 'blah' + + res = parse_and_sign(wallet1, jsn) + + self.assertFalse(res) + + def test_parse_and_sign_fails_to_relay(self): + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + with patch('neo.Prompt.Commands.Send.NodeLeader.Relay', return_value=False): + # start the tx from wallet2 + wallet2 = self.GetWallet2(recreate=True) + args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + + framework = construct_send_basic(wallet2, args) + process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) + + # now sign the tx with wallet1 + wallet1 = self.GetWallet1(recreate=True) + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + + res = parse_and_sign(wallet1, jsn) + + self.assertFalse(res) + + def test_parse_and_sign_twice(self): # this test implies there are more signatures needed + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + # start the tx from wallet2 + wallet2 = self.GetWallet2(recreate=True) + args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + + framework = construct_send_basic(wallet2, args) + process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) + + # now sign the tx with wallet2 again + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + + res = parse_and_sign(wallet2, jsn) + + self.assertFalse(res) + + def test_parse_and_sign_exception(self): + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + with patch('neo.Prompt.Commands.Send.traceback'): # mocking traceback module to avoid stacktrace printing during test run + # start the tx from wallet2 + wallet2 = self.GetWallet2(recreate=True) + args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + + framework = construct_send_basic(wallet2, args) + process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) + + # mocking wallet to trigger the exception + wallet1 = MagicMock() + wallet1.Sign.side_effect = Exception + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + + res = parse_and_sign(wallet1, jsn) + + self.assertFalse(res) From 4b1f4d9a8e6241b8879935acebb245ad76ccea74 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:40:02 -0800 Subject: [PATCH 13/55] Update tests.rst - update instructions to match reality --- docs/source/tests.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/source/tests.rst b/docs/source/tests.rst index 9ad223da0..ee8cbcad1 100644 --- a/docs/source/tests.rst +++ b/docs/source/tests.rst @@ -78,7 +78,7 @@ e) Create new wallets only if absolutely necessary. .. code-block:: sh - docker run --rm -d --name neo-privnet-unittest -p 20333-20336:20333-20336/tcp -p 30333-30336:30333-30336/tcp dautt/neo-privnet-unittest:v0.0.xx`` + docker run --rm -d --name neo-privnet-unittest -p 20333-20336:20333-20336/tcp -p 30333-30336:30333-30336/tcp cityofzion/neo-python-privnet-unittest:v0.0.xx 3) Clean the current ``unittest`` chain: @@ -97,7 +97,7 @@ e) Create new wallets only if absolutely necessary. .. code-block:: sh - python prompt.py -u + np-prompt -u 6) Use the following wallets for generating transactions: @@ -131,7 +131,7 @@ In that way we can easily find out all the contracts deploy on the image by runn .. code-block:: sh - docker commit neo-privnet-unittest dautt/neo-privnet-unittest:v0.0.xx+1 + docker commit neo-privnet-unittest cityofzion/neo-python-privnet-unittest:v0.0.xx+1 The reason for this is that we need to keep the image as small as possible. It can inadvertently happen that your image has been accumulating new blocks for days or weeks e.g. while working on implementing the new tests in phases, which unnecessarily increases the image size. Our test fixtures are reset and extracted 20+ times in our build system so any size increase will add a delay * 20 or more. @@ -140,8 +140,8 @@ Our test fixtures are reset and extracted 20+ times in our build system so any s .. code-block:: sh - notif_fixtures_vx+1.tar.gz - fixtures_vx+1.tar.gz + tar -zxvf notif_fixtures_vx+1.tar.gz unittest_notif + tar -zxvf fixtures_vx+1.tar.gz unittest 11) Update the fixture name in the static class variables in the following files From 607b9520cf1585c725e38c36118f5a3333fcc8c5 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:41:04 -0800 Subject: [PATCH 14/55] Update BlockchainFixtureTestCase.py update fixture files --- neo/Utils/BlockchainFixtureTestCase.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neo/Utils/BlockchainFixtureTestCase.py b/neo/Utils/BlockchainFixtureTestCase.py index d90ae97ca..8cbb87a02 100644 --- a/neo/Utils/BlockchainFixtureTestCase.py +++ b/neo/Utils/BlockchainFixtureTestCase.py @@ -13,8 +13,8 @@ class BlockchainFixtureTestCase(NeoTestCase): - FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/fixtures_v8.tar.gz' - FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/fixtures_v8.tar.gz') + FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/fixtures_v9.tar.gz' + FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/fixtures_v9.tar.gz') _blockchain = None wallets_folder = os.path.dirname(neo.__file__) + '/Utils/fixtures/' From f64328159c25d0e4aa7b06cdd1136a02931c8035 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:41:52 -0800 Subject: [PATCH 15/55] Update test_rest_api.py - update fixture files --- neo/api/REST/test_rest_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neo/api/REST/test_rest_api.py b/neo/api/REST/test_rest_api.py index 247730c8f..7a62c5283 100644 --- a/neo/api/REST/test_rest_api.py +++ b/neo/api/REST/test_rest_api.py @@ -14,8 +14,8 @@ class NotificationDBTestCase(BlockchainFixtureTestCase): - N_FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/notif_fixtures_v8.tar.gz' - N_FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/notif_fixtures_v8.tar.gz') + N_FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/notif_fixtures_v9.tar.gz' + N_FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/notif_fixtures_v9.tar.gz') N_NOTIFICATION_DB_NAME = os.path.join(settings.DATA_DIR_PATH, 'fixtures/test_notifications') app = None # type:RestApi From ea23070029d7fb91e0ccaf40c234775ab4414319 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 10 Nov 2018 04:50:14 -0800 Subject: [PATCH 16/55] Update CHANGELOG.rst --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0eb984cae..97bf3f49a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,7 @@ All notable changes to this project are documented in this file. - Move some warnings and 'expected' errors to `DEBUG` level to avoid logging to console by default - Empty VerificationScripts for deployed contracts now work as intended - Fix RPC's ``getaccountstate`` response schema to match ``neo-cli`` `#714 ` +- Improve ``parse_and_sign`` and ``ImportMultiSigContractAddr`` and add tests [0.8.2] 2018-10-31 From 963aac317f79cb0024aac4e5af25ad12e4fe16dc Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:43:53 -0800 Subject: [PATCH 17/55] Update Send.py - fix return type difference --- neo/Prompt/Commands/Send.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/neo/Prompt/Commands/Send.py b/neo/Prompt/Commands/Send.py index e29d59906..530bec603 100755 --- a/neo/Prompt/Commands/Send.py +++ b/neo/Prompt/Commands/Send.py @@ -231,7 +231,7 @@ def parse_and_sign(wallet, jsn): context = ContractParametersContext.FromJson(jsn) if context is None: print("Failed to parse JSON") - return False + return wallet.Sign(context) @@ -253,15 +253,15 @@ def parse_and_sign(wallet, jsn): return tx else: print("Could not relay tx %s " % tx.Hash.ToString()) - return False + return else: print("Transaction initiated, but the signature is incomplete") print(json.dumps(context.ToJson(), separators=(',', ':'))) - return False + return except Exception as e: print("could not send: %s " % e) traceback.print_stack() traceback.print_exc() - return False + return From 058a7bb69f30e7f2ad8f1c2783635e5d7419ff69 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:44:47 -0800 Subject: [PATCH 18/55] Update LoadSmartContract.py - add logic to catch if `m` != len(publicKeys) --- neo/Prompt/Commands/LoadSmartContract.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/neo/Prompt/Commands/LoadSmartContract.py b/neo/Prompt/Commands/LoadSmartContract.py index 565358409..b1fcb6849 100644 --- a/neo/Prompt/Commands/LoadSmartContract.py +++ b/neo/Prompt/Commands/LoadSmartContract.py @@ -224,6 +224,10 @@ def ImportMultiSigContractAddr(wallet, args): m = get_arg(args, 1) publicKeys = args[2:] + if int(m) != len(publicKeys): + print("the minimum # of signatures required must equal the number of signing pubkeys") + return + pubkey_script_hash = Crypto.ToScriptHash(pubkey, unhex=True) verification_contract = Contract.CreateMultiSigContract(pubkey_script_hash, int(m), publicKeys) address = verification_contract.Address From 9c8dd0e821f74edd1da73c317ce0f42b3427ea48 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:45:57 -0800 Subject: [PATCH 19/55] Update test_loadsmartcontract.py - add a test if minimum # of signatures required != len(publicKeys) --- neo/Prompt/Commands/tests/test_loadsmartcontract.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/neo/Prompt/Commands/tests/test_loadsmartcontract.py b/neo/Prompt/Commands/tests/test_loadsmartcontract.py index 564b554d2..a2f490f4c 100644 --- a/neo/Prompt/Commands/tests/test_loadsmartcontract.py +++ b/neo/Prompt/Commands/tests/test_loadsmartcontract.py @@ -160,3 +160,11 @@ def test_importmultisigcontractaddr(self): ImportMultiSigContractAddr(wallet, args) self.assertTrue("Odd-length string" in str(e.exception)) + + # test minimum # of signatures required != len(publicKeys) + wallet = self.GetWallet1(recreate=True) + args = [self.wallet_1_pk, 2, self.wallet_1_pk, self.wallet_2_pk, self.wallet_2_pk] + + res = ImportMultiSigContractAddr(wallet, args) + + self.assertFalse(res) From 57964ac2402a748045b9cb114323aa5b234594bc Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:49:58 -0800 Subject: [PATCH 20/55] Update CHANGELOG.rst for compatibility --- CHANGELOG.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 97bf3f49a..0eb984cae 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,7 +13,6 @@ All notable changes to this project are documented in this file. - Move some warnings and 'expected' errors to `DEBUG` level to avoid logging to console by default - Empty VerificationScripts for deployed contracts now work as intended - Fix RPC's ``getaccountstate`` response schema to match ``neo-cli`` `#714 ` -- Improve ``parse_and_sign`` and ``ImportMultiSigContractAddr`` and add tests [0.8.2] 2018-10-31 From a9b0ddca53af0022ed84e9e7d0e2eb8ac4e62707 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:51:37 -0800 Subject: [PATCH 21/55] Update BlockchainFixtureTestCase.py for compatibility --- neo/Utils/BlockchainFixtureTestCase.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/neo/Utils/BlockchainFixtureTestCase.py b/neo/Utils/BlockchainFixtureTestCase.py index 8cbb87a02..e9590b4fd 100644 --- a/neo/Utils/BlockchainFixtureTestCase.py +++ b/neo/Utils/BlockchainFixtureTestCase.py @@ -13,8 +13,13 @@ class BlockchainFixtureTestCase(NeoTestCase): - FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/fixtures_v9.tar.gz' - FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/fixtures_v9.tar.gz') + FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/fixtures_v8.tar.gz' + FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/fixtures_v8.tar.gz') + + N_FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/notif_fixtures_v8.tar.gz' + N_FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/notif_fixtures_v8.tar.gz') + N_NOTIFICATION_DB_NAME = os.path.join(settings.DATA_DIR_PATH, 'fixtures/test_notifications') + _blockchain = None wallets_folder = os.path.dirname(neo.__file__) + '/Utils/fixtures/' From 8f285b71b57ee93ff983927b0e7425980d503b8e Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:52:24 -0800 Subject: [PATCH 22/55] Update test_rest_api.py for compatibility --- neo/api/REST/test_rest_api.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/neo/api/REST/test_rest_api.py b/neo/api/REST/test_rest_api.py index 7a62c5283..9537c9261 100644 --- a/neo/api/REST/test_rest_api.py +++ b/neo/api/REST/test_rest_api.py @@ -14,10 +14,6 @@ class NotificationDBTestCase(BlockchainFixtureTestCase): - N_FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/notif_fixtures_v9.tar.gz' - N_FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/notif_fixtures_v9.tar.gz') - N_NOTIFICATION_DB_NAME = os.path.join(settings.DATA_DIR_PATH, 'fixtures/test_notifications') - app = None # type:RestApi @classmethod From 5c86fe52444cd8dc857228a45c3b5575b2bbd95d Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:54:18 -0800 Subject: [PATCH 23/55] Update CHANGELOG.rst --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 41b10b62a..ca3b7734b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,7 @@ All notable changes to this project are documented in this file. - Fix RPC's ``getaccountstate`` response schema to match ``neo-cli`` `#714 ` - Add fix to ensure tx is saved to wallet when sent using RPC - Add bad peers to the ``getpeers`` RPC method `#715 ` +- Improve ``parse_and_sign`` and ``ImportMultiSigContractAddr`` and add tests [0.8.2] 2018-10-31 From 1f70d677f64edb655e0a774cbedacfb54584dde6 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 14 Nov 2018 23:55:06 -0800 Subject: [PATCH 24/55] Update BlockchainFixtureTestCase.py --- neo/Utils/BlockchainFixtureTestCase.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/neo/Utils/BlockchainFixtureTestCase.py b/neo/Utils/BlockchainFixtureTestCase.py index 13efb2ee1..0cf9568e0 100644 --- a/neo/Utils/BlockchainFixtureTestCase.py +++ b/neo/Utils/BlockchainFixtureTestCase.py @@ -14,11 +14,11 @@ class BlockchainFixtureTestCase(NeoTestCase): - FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/fixtures_v8.tar.gz' - FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/fixtures_v8.tar.gz') + FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/fixtures_v9.tar.gz' + FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/fixtures_v9.tar.gz') - N_FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/notif_fixtures_v8.tar.gz' - N_FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/notif_fixtures_v8.tar.gz') + N_FIXTURE_REMOTE_LOC = 'https://s3.us-east-2.amazonaws.com/cityofzion/fixtures/notif_fixtures_v9.tar.gz' + N_FIXTURE_FILENAME = os.path.join(settings.DATA_DIR_PATH, 'Chains/notif_fixtures_v9.tar.gz') N_NOTIFICATION_DB_NAME = os.path.join(settings.DATA_DIR_PATH, 'fixtures/test_notifications') _blockchain = None From fce2390afd19fb827f07591aa4c0d79552ca8a98 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 15 Nov 2018 00:43:28 -0800 Subject: [PATCH 25/55] Update tests.rst - fix typo --- docs/source/tests.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/tests.rst b/docs/source/tests.rst index ee8cbcad1..95858f67f 100644 --- a/docs/source/tests.rst +++ b/docs/source/tests.rst @@ -140,8 +140,8 @@ Our test fixtures are reset and extracted 20+ times in our build system so any s .. code-block:: sh - tar -zxvf notif_fixtures_vx+1.tar.gz unittest_notif - tar -zxvf fixtures_vx+1.tar.gz unittest + tar -zcvf notif_fixtures_vx+1.tar.gz unittest_notif + tar -zcvf fixtures_vx+1.tar.gz unittest 11) Update the fixture name in the static class variables in the following files From 9a6271d66006afe0cf35d7a3ecfc2bfc451bd7b5 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 15 Nov 2018 01:29:09 -0800 Subject: [PATCH 26/55] Add files via upload - update fixtures --- neo/Utils/fixtures/neo-test1-w.wallet | Bin 110592 -> 110592 bytes neo/Utils/fixtures/neo-test2-w.wallet | Bin 86016 -> 86016 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/neo/Utils/fixtures/neo-test1-w.wallet b/neo/Utils/fixtures/neo-test1-w.wallet index d136a7de8f7cc1a71af96f3a46f4fcd7d43ec750..75c66a8d5a0a45d8476633513d0a6675780ac0ff 100644 GIT binary patch delta 1261 zcmbtUU1%Le6rS0;xy`-JW^$oFNhMf+3N3wbX3qRAB2=69sSiOY7OZJ^W@iN{7z+&q zv`LX*!H2fF4}pkEq4?l~A{QD25k&-lsuffap*2OYYKRXa>4O11dnx$RH)mP)%%1Q3 z%=ew$`PJt9YV+c*;SLZ&?z?-_OM6Yyf%i^cd1NqQ*9iNCUF&uDM{M_Kk`gu8du;8> z<6pOb?z*Q=oO=Gn_mAB=uw|6ip68!ntuC7?y2~e? z-Om0bDZ5SBCcDGd*==n6CcBBPf64Ygh?EdA(4aJFr;QeE)jLvKX`|6iJ46z=L+sF9%iK8{}9_ZYAS-(rq_9>hz`gPCy;kZ;2jIfgk5%hAU2pt=vwo#%B& zbr0Ms9))&3x4~2<=t^5~IYi(^h)NVHdMG_~f4F}yO?qo*$0*8shagv*z0Uj^+nzQE zO=>pUH5+WBCUOH^zq4kaxTLrF<{3th^-jOLI5|`UaE-CQ`=H-gXS61DN3)J@XNO33 zXk~DOKAIgql%C6|FkD+v1zY-P^Fox|8&|~`g{vg^;IvXj4BA;dZCNUXbd_Kb2&ycs zY_GgJPS422)pRADrkgCqD!W$FNi?s{(|_33owbHEn<3c@DtIb8y08Vu>|B!7U(pn`HZ6BRF|&QZIngtAg1mztN+2&KH! zUfRlWv9vrx595S{61lj$JU|(Jp_B-b7ZH^Pr>#acO=W}6wTnV=ZkOJep-(h(oE>YI zre`Ui<3gcFYVcYVh4)%{6H)WhN#N2c>viFk!TI2Z8!xy*94~dKL|*wQt;&H55Wy5O z&x7N+=gxuu9#oXX0Q3U?v)9dbmw@y<0o&2}PRyr5yU+iDd C=u$WU delta 359 zcmYLDJxc>Y5S__w4llXe*#k9S2qFkt2@(uqp`~ShfaC-JKoHVO`ZT#*XCo3xYh=N+ zv5Q*UnRqrK5Q1Q1kprEJg|ob2=e?OX(+JE)V79VSbpRm8$TDKy&OuCd?kl%@Cej3G zqTR+DnQ0V|U-2JHtL+oP$`okI%9upT$XiRkXetNjO4g)91uEDhd!$|UWc%-D&v7YV z;oQ3^$Er#Huw3lfPHV(l;DAPfubC?%sL48yV< z)=7q9W0eQXcUq5SJ A?f?J) diff --git a/neo/Utils/fixtures/neo-test2-w.wallet b/neo/Utils/fixtures/neo-test2-w.wallet index c88d4049720f5c757c987f2bdc1ad059f05cfd57..f0c078edcbbdb4af268f9a00c44b18f7665ce7db 100644 GIT binary patch delta 1219 zcmbtSOK4t26u!^of8_pSz(-nItJs3pM`q^C>n@}=En*>yA{2$zw0Gvt6~rQzMhR#W zkzjW<{)K-PO(Z)dBEMKf5k(6ws#WSDz7|Djt*I_tq?;g~8wEF62+lAw-jflz1Jofv@woB!~YU=%l0pQu<47t^GBb&IVD#EvQBQ0Kgd;bo%~RD zRO(X#yYa$*TM{?JG>yYBN@^I_QxwO|W`>+7+ZS|Jvwf(E&e|{UiWiaS$MtPz+598n^=V3PcJR;(Ws=YZmT_+QtD&;cAeB zXk(=a0XcQ#+AR>_jNY18?@^4+@a`M|i27umkzz_xEvRSG*jzhRDJLtb!Q|k97S0P+ z2ydaZ&|TSacNq0oPi+bDSKSCuwe|k+%qqDhiG#n@Xw_u*ew z@KFE6JFguaO45}ed#-i8Vbc|q?2B}Kb`XpDQWl+_iV~)%)U0y4v|i^0E2&kc^4>F3 zaj?!vAqwxL(Wp*Y3L%s%K_L-DS!mu{ZiHgY%c77_-~r7T6jnN^l>^~~5uhqsa#_n* zl~7iK$ zN_B6c8ICn_ESlDo_SW0s1JjfV^l=GRvZAn73adP7TN)0O8=+xNuH@YKC_x|5PB9H}o%}bXOt( delta 270 zcmZozz}m2Yb%GQVOXNfuCm^{oVTnE)BmXl7{%4y78}9H=er7KR$&XQfkVy`dH_zXby`UoHdxT)tes%bNuS;`t`$#-(v3GjlTd zaQd*Ca86zq8_mMNz>qp|VdCVu@#$R5{GS;3|L}k3{{%Gp3BLpjGbbZ6h+tx7=H%oB zDrMw*&A|5>XxKx(&9Cbu8G$bO1Jtrv@W6Y1L7+TH9T!L)LYNuI-TY^MDL|^^ZvIk!eW0i!|8{+O#)}3369h{2 From 96d68975c464bcdbadf76d50da2cbbed2295c582 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 15 Nov 2018 02:48:53 -0800 Subject: [PATCH 27/55] Update Contract.py - convert Exceptions to ValueErrors --- neo/SmartContract/Contract.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/neo/SmartContract/Contract.py b/neo/SmartContract/Contract.py index ff6ff87fa..88d483bb5 100644 --- a/neo/SmartContract/Contract.py +++ b/neo/SmartContract/Contract.py @@ -89,13 +89,13 @@ def Create(redeemScript, parameterList, publicKeyHash): def CreateMultiSigRedeemScript(m, publicKeys): if m < 1: - raise Exception("Minimum required signature count is 1, specified {}.".format(m)) + raise ValueError("Minimum required signature count is 1, specified {}.".format(m)) if m > len(publicKeys): - raise Exception("Invalid public key count. Minimum required signatures is bigger than supplied public keys count.") + raise ValueError("Invalid public key count. Minimum required signatures is bigger than supplied public keys count.") if len(publicKeys) > 1024: - raise Exception("Supplied public key count ({}) exceeds maximum of 1024.".format(len(publicKeys))) + raise ValueError("Supplied public key count ({}) exceeds maximum of 1024.".format(len(publicKeys))) sb = ScriptBuilder() sb.push(m) From 3d378b3aea96d34b7caf0680773158cb5b512ab3 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 15 Nov 2018 02:51:01 -0800 Subject: [PATCH 28/55] Update LoadSmartContract.py - replace previous m logic with try/except --- neo/Prompt/Commands/LoadSmartContract.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/neo/Prompt/Commands/LoadSmartContract.py b/neo/Prompt/Commands/LoadSmartContract.py index b1fcb6849..9efd4803e 100644 --- a/neo/Prompt/Commands/LoadSmartContract.py +++ b/neo/Prompt/Commands/LoadSmartContract.py @@ -224,12 +224,12 @@ def ImportMultiSigContractAddr(wallet, args): m = get_arg(args, 1) publicKeys = args[2:] - if int(m) != len(publicKeys): - print("the minimum # of signatures required must equal the number of signing pubkeys") - return - pubkey_script_hash = Crypto.ToScriptHash(pubkey, unhex=True) - verification_contract = Contract.CreateMultiSigContract(pubkey_script_hash, int(m), publicKeys) + try: + verification_contract = Contract.CreateMultiSigContract(pubkey_script_hash, int(m), publicKeys) + except ValueError as e: + print(e) + return address = verification_contract.Address wallet.AddContract(verification_contract) From 5e768d552854fab1de0c747e9259187ac926d066 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Thu, 15 Nov 2018 02:53:05 -0800 Subject: [PATCH 29/55] Update test_loadsmartcontract.py - add/update tests for new try/except logic --- .../Commands/tests/test_loadsmartcontract.py | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/neo/Prompt/Commands/tests/test_loadsmartcontract.py b/neo/Prompt/Commands/tests/test_loadsmartcontract.py index a2f490f4c..42c628c64 100644 --- a/neo/Prompt/Commands/tests/test_loadsmartcontract.py +++ b/neo/Prompt/Commands/tests/test_loadsmartcontract.py @@ -153,17 +153,22 @@ def test_importmultisigcontractaddr(self): self.assertTrue("Invalid operation - public key mismatch" in str(e.exception)) # test bad second pk - with self.assertRaises(Exception) as e: - wallet = self.GetWallet1(recreate=True) - args = [self.wallet_1_pk, 2, "03cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c", self.wallet_2_pk] # pk is too short + wallet = self.GetWallet1(recreate=True) + args = [self.wallet_1_pk, 2, "03cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c", self.wallet_2_pk] # pk is too short - ImportMultiSigContractAddr(wallet, args) + res = ImportMultiSigContractAddr(wallet, args) + + self.assertFalse(res) - self.assertTrue("Odd-length string" in str(e.exception)) + # test minimum # of signatures required < 1 + args = [self.wallet_1_pk, 0, self.wallet_1_pk, self.wallet_2_pk] - # test minimum # of signatures required != len(publicKeys) - wallet = self.GetWallet1(recreate=True) - args = [self.wallet_1_pk, 2, self.wallet_1_pk, self.wallet_2_pk, self.wallet_2_pk] + res = ImportMultiSigContractAddr(wallet, args) + + self.assertFalse(res) + + # test minimum # of signatures required > len(publicKeys) + args = [self.wallet_1_pk, 3, self.wallet_1_pk, self.wallet_2_pk] res = ImportMultiSigContractAddr(wallet, args) From 1d4fd4fc3829b9eb6b3b320b516f31e179befd00 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:06:15 -0800 Subject: [PATCH 30/55] Add files via upload - updated w-wallet fixtures --- neo/Utils/fixtures/neo-test1-w.wallet | Bin 110592 -> 110592 bytes neo/Utils/fixtures/neo-test2-w.wallet | Bin 86016 -> 86016 bytes neo/Utils/fixtures/neo-test3-w.wallet | Bin 86016 -> 86016 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/neo/Utils/fixtures/neo-test1-w.wallet b/neo/Utils/fixtures/neo-test1-w.wallet index 75c66a8d5a0a45d8476633513d0a6675780ac0ff..d136a7de8f7cc1a71af96f3a46f4fcd7d43ec750 100644 GIT binary patch delta 359 zcmYLDJxc>Y5S__w4llXe*#k9S2qFkt2@(uqp`~ShfaC-JKoHVO`ZT#*XCo3xYh=N+ zv5Q*UnRqrK5Q1Q1kprEJg|ob2=e?OX(+JE)V79VSbpRm8$TDKy&OuCd?kl%@Cej3G zqTR+DnQ0V|U-2JHtL+oP$`okI%9upT$XiRkXetNjO4g)91uEDhd!$|UWc%-D&v7YV z;oQ3^$Er#Huw3lfPHV(l;DAPfubC?%sL48yV< z)=7q9W0eQXcUq5SJ A?f?J) delta 1261 zcmbtUU1%Le6rS0;xy`-JW^$oFNhMf+3N3wbX3qRAB2=69sSiOY7OZJ^W@iN{7z+&q zv`LX*!H2fF4}pkEq4?l~A{QD25k&-lsuffap*2OYYKRXa>4O11dnx$RH)mP)%%1Q3 z%=ew$`PJt9YV+c*;SLZ&?z?-_OM6Yyf%i^cd1NqQ*9iNCUF&uDM{M_Kk`gu8du;8> z<6pOb?z*Q=oO=Gn_mAB=uw|6ip68!ntuC7?y2~e? z-Om0bDZ5SBCcDGd*==n6CcBBPf64Ygh?EdA(4aJFr;QeE)jLvKX`|6iJ46z=L+sF9%iK8{}9_ZYAS-(rq_9>hz`gPCy;kZ;2jIfgk5%hAU2pt=vwo#%B& zbr0Ms9))&3x4~2<=t^5~IYi(^h)NVHdMG_~f4F}yO?qo*$0*8shagv*z0Uj^+nzQE zO=>pUH5+WBCUOH^zq4kaxTLrF<{3th^-jOLI5|`UaE-CQ`=H-gXS61DN3)J@XNO33 zXk~DOKAIgql%C6|FkD+v1zY-P^Fox|8&|~`g{vg^;IvXj4BA;dZCNUXbd_Kb2&ycs zY_GgJPS422)pRADrkgCqD!W$FNi?s{(|_33owbHEn<3c@DtIb8y08Vu>|B!7U(pn`HZ6BRF|&QZIngtAg1mztN+2&KH! zUfRlWv9vrx595S{61lj$JU|(Jp_B-b7ZH^Pr>#acO=W}6wTnV=ZkOJep-(h(oE>YI zre`Ui<3gcFYVcYVh4)%{6H)WhN#N2c>viFk!TI2Z8!xy*94~dKL|*wQt;&H55Wy5O z&x7N+=gxuu9#oXX0Q3U?v)9dbmw@y<0o&2}PRyr5yU+iDd C=u$WU diff --git a/neo/Utils/fixtures/neo-test2-w.wallet b/neo/Utils/fixtures/neo-test2-w.wallet index f0c078edcbbdb4af268f9a00c44b18f7665ce7db..718fbb75a86a6ce79eb6db87f762a22d95a488f4 100644 GIT binary patch delta 874 zcmbtSJ7`ov6y2BXYMwFsk`PoR5(~j7QRn|DBq0W3Fi0AM7^9ir(cT3ncN6V)IV_ zD8#383&VYHHkU{GUVLeuUd?1O)O<+gjdzXD!{3tQTOn<`+gaSPci5&E8sc&$S-Zel4ww`s>;Kd-lBwg{?}duUx#mvzW9B z$)DtR@-t~Qda56iM(fIISA}Y-s1|}s$|$B%Fo7wDGlE?SDmX`3*y4`GTxikX#R0awOLZz!a$91uAHS>jx^gb3NdKdm&x^iV>a?hf*rF z)PV(0gS07T3~A(;$MyFEgN?5@Z=vW^W8uld^aK^gOPLDg3=d9Ftq@iY6UT&9PCJYk zbDSxGq{IYiOG3~t5N=YBIAevXLNGANmg4A8HoYx6k*#+|pTZ^O7?CkcaoL!5f!3qd4L&7WOJy*E`OKO5-!eZtCvw>r! z6jH*v0ImnilwnqBp#x2Wz$wO-I}REtNkA41mlCXT*g_kIQ|MS2L$J`+1c#Uv-UP3t zHbI<8gG-$!gc6Lv5}ithr8k@*qg;S?HJ4NorisSR8pIVw#9-oyPq9TP5Tgi`Z$115 ajY7H!%{bjM8_7eRBGbG~!FZ@xL_PE?$U zigSB+B7JwdsmsI%gT?lS>e25Dov(6VO5)tWrQvIjdsjMYs$bjJ-D6uZiJeKB&5Rs5 ze~R5ZRNM4$X5{2(*OhVHmM<(@PJY35XA4951=la+>ORJ&TEA_uE}3t)O7#_$NbaAW zf1V4IS*s`8<50WwslV@FGH^EQ6wPLf?`iYJW!?RD7A9XTcHexmZ))Yo)T7t)qff7I zTy`2uzx(&>y2@s(t!5|<^+zeovh?)4JRnoXG}B{D?SC?DeyOdkHZI*6xX|FZtCqXr z{&Ii1tL~cnAwJdm!DsG{HuJx~Pb!(Uo$A`~T)wn@?8Z0&3`1({gXx?zC}vvDQ9b{+zZ8 ztr8&AGN2SIjRFlmfM6aolkvz?(q}?rijY^XWbLkUZ;f3jC+h6hafGSq69$suAdr$# z$+ek26lQB8s3%z<%~dmjIN}l`YIG=MD#CswHSwqq2m@9;Ail2z@(EJf_py>nktiTW zs}TW0e8P~#p^(yJ#7BhS0CpPTq2Lqr@L0;@_0p5uQeIp7_`T(~JD;B0dGbkot8b@= zzW(W+Cel&XYDDOCtI_(b^-RCL;rC|UC$(s@I$7aycVg;5C$$;)waJXvYC9@_?EmJ} z&mYt_&Q9;Xyko^t(+BY%B)_PI;%qHgQb^!)k7?zewF(cg3M z?$N8uPpz@1FVBisqV)#J(_u?!5&yfzqyM$XomWG&E`=zH!ihI*_w>}^(F_eDw1#e= z0s6Jyp8g7L$HeObzA+1^X#pb4|mGwN``lu;(|;8{?4 zK{&?-JMKyMi_Q1PNq^<&?J-=#8xf#c>$m4t&@EXS{X?T((m<;vw^a!Jh(?CElK$H3 zGbrBEfA;*#d+TX6kDAZd2h|*aJzm{6e-o_sSTi~PLXt6Qy;6nL&Whk*YK@6@ggP#j zcE%CRxf5JVtQ4WxJgm5gq=H3fk))2*PP+aB&MgqYgh}IfwnY$oB zIp^BKFh-id3Ye@Qq&x%EC`AL#VRofpZI0x?1C9#lq_vbtliT1h&!xA)Yh`SZ`-BP)07)(h|4V&nqX=P_0$(6$2d@{DU6?cEQxjakpsW% oz3;-H9*peAia!yuNnAW19d*++x)stk`ZXjAD~*G%J=+& zKzWclE|5BeFf)+5`Oo}Pen$JvMe8R8a4>PbVc;#}dIL1&0oV37T#OQ|Kr2fb_)GbB VZx&R@ Date: Fri, 16 Nov 2018 16:14:32 -0800 Subject: [PATCH 31/55] Update test_send_command.py - update `parse_and_sign` tests --- .../Commands/tests/test_send_command.py | 62 ++++++++++++------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/neo/Prompt/Commands/tests/test_send_command.py b/neo/Prompt/Commands/tests/test_send_command.py index 63c1a6097..e305f4e93 100644 --- a/neo/Prompt/Commands/tests/test_send_command.py +++ b/neo/Prompt/Commands/tests/test_send_command.py @@ -23,9 +23,15 @@ class UserWalletTestCase(WalletFixtureTestCase): watch_addr_str = 'AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkEm' _wallet1 = None + wallet_2_addr = 'AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkEm' + _wallet2 = None - wallet_1_and_2_multisig_addr = "AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5" + wallet_3_addr = 'AZiE7xfyJALW7KmADWtCJXGGcnduYhGiCX' + + _wallet3 = None + + wallet_2_and_3_multisig_addr = "Aau2M4UdXxwxLLizDw11eDZRDs5jpXduh8" @property def GAS(self): @@ -51,6 +57,14 @@ def GetWallet2(cls, recreate=False): to_aes_key(UserWalletTestCase.wallet_2_pass())) return cls._wallet2 + @classmethod + def GetWallet3(cls, recreate=False): + if cls._wallet3 is None or recreate: + shutil.copyfile(cls.wallet_3_path(), cls.wallet_3_dest()) + cls._wallet3 = UserWallet.Open(UserWalletTestCase.wallet_3_dest(), + to_aes_key(UserWalletTestCase.wallet_3_pass())) + return cls._wallet3 + def test_send_neo(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): wallet = self.GetWallet1(recreate=True) @@ -518,37 +532,37 @@ def test_parse_and_sign_good(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): # start the tx from wallet2 wallet2 = self.GetWallet2(recreate=True) - args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + args = ['neo', self.wallet_3_addr, '1', '--from-addr=Aau2M4UdXxwxLLizDw11eDZRDs5jpXduh8'] framework = construct_send_basic(wallet2, args) process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) - # now sign the tx with wallet1 - wallet1 = self.GetWallet1(recreate=True) - jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + # now sign the tx with wallet3 + wallet3 = self.GetWallet3(recreate=True) + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f50500000000c4c1b0cfa87fcbac45985730166411035ddfed239b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"01bd36475e1b0d7e1fad096fb1e1a0a45e0fd4ca3f723547861b0ed34da6d2871b846abfd47ca117f007700669412d85727ba23004b07867c7ef68a498ce3a41"}}}}' - res = parse_and_sign(wallet1, jsn) + res = parse_and_sign(wallet3, jsn) res = res.ToJson() self.assertTrue(res) self.assertEqual(res['vout'][0]['value'], "1") # verify the amount - self.assertEqual(res['vout'][0]['address'], "AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc3") # verify to_address - self.assertEqual(res['vout'][1]['address'], "AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5") # verify from_address + self.assertEqual(res['vout'][0]['address'], self.wallet_3_addr) # verify to_address + self.assertEqual(res['vout'][1]['address'], self.wallet_2_and_3_multisig_addr) # verify from_address def test_parse_and_sign_bad_jsn(self): with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): # start the tx from wallet2 wallet2 = self.GetWallet2(recreate=True) - args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + args = ['neo', self.wallet_3_addr, '1', '--from-addr=Aau2M4UdXxwxLLizDw11eDZRDs5jpXduh8'] framework = construct_send_basic(wallet2, args) process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) - # now sign the tx with wallet1 - wallet1 = self.GetWallet1(recreate=True) + # now sign the tx with wallet3 + wallet3 = self.GetWallet3(recreate=True) jsn = 'blah' - res = parse_and_sign(wallet1, jsn) + res = parse_and_sign(wallet3, jsn) self.assertFalse(res) @@ -557,16 +571,16 @@ def test_parse_and_sign_fails_to_relay(self): with patch('neo.Prompt.Commands.Send.NodeLeader.Relay', return_value=False): # start the tx from wallet2 wallet2 = self.GetWallet2(recreate=True) - args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + args = ['neo', self.wallet_3_addr, '1', '--from-addr=Aau2M4UdXxwxLLizDw11eDZRDs5jpXduh8'] framework = construct_send_basic(wallet2, args) process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) - # now sign the tx with wallet1 - wallet1 = self.GetWallet1(recreate=True) - jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + # now sign the tx with wallet3 + wallet3 = self.GetWallet3(recreate=True) + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f50500000000c4c1b0cfa87fcbac45985730166411035ddfed239b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"01bd36475e1b0d7e1fad096fb1e1a0a45e0fd4ca3f723547861b0ed34da6d2871b846abfd47ca117f007700669412d85727ba23004b07867c7ef68a498ce3a41"}}}}' - res = parse_and_sign(wallet1, jsn) + res = parse_and_sign(wallet3, jsn) self.assertFalse(res) @@ -574,13 +588,13 @@ def test_parse_and_sign_twice(self): # this test implies there are more signatu with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): # start the tx from wallet2 wallet2 = self.GetWallet2(recreate=True) - args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + args = ['neo', self.wallet_3_addr, '1', '--from-addr=Aau2M4UdXxwxLLizDw11eDZRDs5jpXduh8'] framework = construct_send_basic(wallet2, args) process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) # now sign the tx with wallet2 again - jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f50500000000c4c1b0cfa87fcbac45985730166411035ddfed239b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"01bd36475e1b0d7e1fad096fb1e1a0a45e0fd4ca3f723547861b0ed34da6d2871b846abfd47ca117f007700669412d85727ba23004b07867c7ef68a498ce3a41"}}}}' res = parse_and_sign(wallet2, jsn) @@ -591,16 +605,16 @@ def test_parse_and_sign_exception(self): with patch('neo.Prompt.Commands.Send.traceback'): # mocking traceback module to avoid stacktrace printing during test run # start the tx from wallet2 wallet2 = self.GetWallet2(recreate=True) - args = ['neo', self.wallet_1_addr, '1', '--from-addr=AY7cn9RRanTWtDTZ5AgcxoYMGBMcuqFZw5'] + args = ['neo', self.wallet_3_addr, '1', '--from-addr=Aau2M4UdXxwxLLizDw11eDZRDs5jpXduh8'] framework = construct_send_basic(wallet2, args) process_transaction(wallet2, contract_tx=framework[0], scripthash_from=framework[1], fee=framework[2], owners=framework[3], user_tx_attributes=framework[4]) # mocking wallet to trigger the exception - wallet1 = MagicMock() - wallet1.Sign.side_effect = Exception - jsn = '{"type":"Neo.Core.ContractTransaction","hex":"8000000172da341d6ad36544d49d3387c5ae4485bc238fe1ee8fb6d0a179be7dfc7105160000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000b33deba441ce0ae39338575f6c6f7cb958e14007","items":{"0x0740e158b97c6f6c5f573893e30ace41a4eb3db3":{"script":"522103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e960342103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c652ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"0a377e3a9c302f270f3eaf083119fbc60a17f7858975b6aa2c226be10626c50e47a5705fd079da9cc55c6c467015345c230ca13fed8d93555c7024f8663efe6c"}}}}' + wallet3 = MagicMock() + wallet3.Sign.side_effect = Exception + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f50500000000c4c1b0cfa87fcbac45985730166411035ddfed239b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"01bd36475e1b0d7e1fad096fb1e1a0a45e0fd4ca3f723547861b0ed34da6d2871b846abfd47ca117f007700669412d85727ba23004b07867c7ef68a498ce3a41"}}}}' - res = parse_and_sign(wallet1, jsn) + res = parse_and_sign(wallet3, jsn) self.assertFalse(res) From 0413ef9c72695b8b4fb98507a9e0966170edc7f5 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:15:30 -0800 Subject: [PATCH 32/55] Update test_LevelDBBlockchain.py - updated `test_initial_setup` --- .../Blockchains/LevelDB/test_LevelDBBlockchain.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neo/Implementations/Blockchains/LevelDB/test_LevelDBBlockchain.py b/neo/Implementations/Blockchains/LevelDB/test_LevelDBBlockchain.py index 48155c5ea..ac13f1905 100644 --- a/neo/Implementations/Blockchains/LevelDB/test_LevelDBBlockchain.py +++ b/neo/Implementations/Blockchains/LevelDB/test_LevelDBBlockchain.py @@ -11,7 +11,7 @@ def leveldb_testpath(self): # test need to be updated whenever we change the fixtures def test_initial_setup(self): - self.assertEqual(self._blockchain.Height, 12349) + self.assertEqual(self._blockchain.Height, 12362) def test_GetBlockHash(self): # test requested block height exceeding blockchain current_height From 0d6b541ba23d856f72ca09f105041876a905dfd3 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:16:13 -0800 Subject: [PATCH 33/55] Update test_leveldb.py - updated `test_a_initial_setup` --- neo/Implementations/Blockchains/LevelDB/tests/test_leveldb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neo/Implementations/Blockchains/LevelDB/tests/test_leveldb.py b/neo/Implementations/Blockchains/LevelDB/tests/test_leveldb.py index 89f0357c9..4323cf486 100644 --- a/neo/Implementations/Blockchains/LevelDB/tests/test_leveldb.py +++ b/neo/Implementations/Blockchains/LevelDB/tests/test_leveldb.py @@ -11,4 +11,4 @@ def leveldb_testpath(self): # test need to be updated whenever we change the fixtures def test_a_initial_setup(self): - self.assertEqual(self._blockchain.Height, 12349) + self.assertEqual(self._blockchain.Height, 12362) From 81f30b279146a3f4a8ed1421798c13aa9026ed1b Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:17:24 -0800 Subject: [PATCH 34/55] Update test_claim_command.py - for updated fixtures --- neo/Prompt/Commands/tests/test_claim_command.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/neo/Prompt/Commands/tests/test_claim_command.py b/neo/Prompt/Commands/tests/test_claim_command.py index 431ec0b69..19d7d5a8c 100644 --- a/neo/Prompt/Commands/tests/test_claim_command.py +++ b/neo/Prompt/Commands/tests/test_claim_command.py @@ -64,13 +64,18 @@ def test_1_no_available_claim(self): wallet = self.GetWallet3() + # claim gas + claim_tx, relayed = ClaimGas(wallet, require_password=False) + + self.assertTrue(relayed) + unspents = wallet.FindUnspentCoinsByAsset(self.NEO) - self.assertEqual(1, len(unspents)) + self.assertEqual(2, len(unspents)) unavailable_bonus = wallet.GetUnavailableBonus() - self.assertEqual(Fixed8.FromDecimal(0.0002685), unavailable_bonus) + self.assertEqual(Fixed8.FromDecimal(0.000008), unavailable_bonus) unclaimed_coins = wallet.GetUnclaimedCoins() @@ -90,7 +95,7 @@ def test_2_wallet_with_claimable_gas(self): unavailable_bonus = wallet.GetUnavailableBonus() - self.assertEqual(Fixed8.FromDecimal(0.000601), unavailable_bonus) + self.assertEqual(Fixed8.FromDecimal(0.000653), unavailable_bonus) unclaimed_coins = wallet.GetUnclaimedCoins() From 8902f52b25ddf2221be3f2f6740aa8ddd7cf3e7b Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:18:20 -0800 Subject: [PATCH 35/55] Update test_smart_contract.py - update `test_a_initial_setup` --- neo/SmartContract/tests/test_smart_contract.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neo/SmartContract/tests/test_smart_contract.py b/neo/SmartContract/tests/test_smart_contract.py index 9ecea7c14..da1e703a5 100644 --- a/neo/SmartContract/tests/test_smart_contract.py +++ b/neo/SmartContract/tests/test_smart_contract.py @@ -14,7 +14,7 @@ def leveldb_testpath(self): # test need to be updated whenever we change the fixtures def test_a_initial_setup(self): - self.assertEqual(self._blockchain.Height, 12349) + self.assertEqual(self._blockchain.Height, 12362) invb = b'000000007134e5ee56f841bb73dbff969a9ef793c05f175cd386b2f24874a54c441cc0500e6c4e19da72fd4956a28670f36d26e03fd43c1794a1d3a5ad4f738dd48b53f505c7605b992400006b76abd322b7bd0bbe48d3a3f5d10013ab9ffee489706078714f1ea201c3400df8020bf9c22cd865b43b73060be3302abbab95b5f38941ba288cd77b846c9c1edcef1ab9a108f0a2fb8180e88178d3e85e316243054e48b29ced9dde54766340d9efc4f6d78970aba6712688071b862413bd53d58620e87c951aa3eac5c2611cdfecfcf084c12cfbe6cd356ef7726b9b5e93c10b5ffa7dc6e77ae8dc8c7af09240756caac1dad30a93662f36194fe270bb2afe0a557492122027df5f95dc5b1b9d18b169a6a96795019067ba008e5d42250c23886f0807ec20f3c880b2e740d1048b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae0200006b76abd300000000d101de39202f726f6f742f2e6e656f707974686f6e2f436861696e732f556e6974546573742d534d2f636f6e7472616374732f73616d706c65322e70790474657374047465737404746573740474657374000102030702024c725ec56b6a00527ac46a51527ac46a52527ac46a00c3036164649c640d006a51c36a52c3936c7566616a00c3037375629c640d006a51c36a52c3946c7566616a00c3036d756c9c640d006a51c36a52c3956c7566616a00c3036469769c640d006a51c36a52c3966c7566614f6c7566006c756668134e656f2e436f6e74726163742e437265617465001a7118020000000001347fff9221a8caf429279a82906688eb78264c1a9a2791d95ee47b6e095120aa000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c600080b5fc5c02000023ba2703c53263e8d6e522dc32203339dcd8eee90141405787dc8c47ba7da02668582b822bb50e1b615546a5f01826967cba603a0744a01aed6c098d809f20ec199a84269aa01ea911564effe7c1b4ad65d71f4ca995a12321031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4aac' invbh = b'ac2d9d876bb6ee5cf1d011820409180cda7594b88c94f94a110ce2f5e472294e' From c23c5e9c230f2b3e405c8b2b068d3f3d553bb13f Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:20:38 -0800 Subject: [PATCH 36/55] Update test_json_rpc_api.py - updated for fixture update --- neo/api/JSONRPC/test_json_rpc_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neo/api/JSONRPC/test_json_rpc_api.py b/neo/api/JSONRPC/test_json_rpc_api.py index b016035af..35a25bca8 100644 --- a/neo/api/JSONRPC/test_json_rpc_api.py +++ b/neo/api/JSONRPC/test_json_rpc_api.py @@ -166,7 +166,7 @@ def test_get_bestblockhash(self): req = self._gen_rpc_req("getbestblockhash", params=[]) mock_req = mock_request(json.dumps(req).encode("utf-8")) res = json.loads(self.app.home(mock_req)) - self.assertEqual(res['result'], '0x62539bdf30ff2567355efb38b1911cc07258710cfab5b50d3e32751618969bcb') + self.assertEqual(res['result'], '0x5f2ffd95918f789c69833f3db2720fdfe94f7383dec5d076d9835342169ecfa2') def test_get_connectioncount(self): # make sure we have a predictable state @@ -643,7 +643,7 @@ def test_valid_multirequest(self): self.assertEqual(type(res), list) self.assertEqual(len(res), 2) - expected_raw_block = '00000000999086db552ba8f84734bddca55b25a8d3d8c5f866f941209169c38d35376e9902c78a8ae8efe7e9d46f76399a9d9449155e861d6849c110ea5f6b7d146a9a8aa4d1305b01000000bd7d9349807816a1be48d3a3f5d10013ab9ffee489706078714f1ea201c340dcbeadb300ff983f40f537ba6d63721cafda183b2cd161801ffb0f8316f100b63dbfbae665bba75fa1a954f14351f91cbf07bf90e60ff79f3e9076bcb1b512184075c25a44184ce92f7d7af1d2f22bee69374dd1bf0327f8956ede0dc23dda90106cf555fb8202fe6db9acda1d0b4fff8fdcd0404daa4b359c73017c7cdb80094640fb383c7016aae89a0a01b3c431a5625340378b95b57f4b71c4427ff1177a786b11b1c8060c075e3234afdd03790764ccd99680ea102890e359ab9050b5b32b2b8b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae010000bd7d934900000000' + expected_raw_block = '00000000999086db552ba8f84734bddca55b25a8d3d8c5f866f941209169c38d35376e9902c78a8ae8efe7e9d46f76399a9d9449155e861d6849c110ea5f6b7d146a9a8aa4d1305b01000000bd7d9349807816a1be48d3a3f5d10013ab9ffee489706078714f1ea201c340dcbeadb300ff983f40f537ba6d63721cafda183b2cd161801ffb0f8316f100b63dbfbae665bba75fa1a954f14351f91cbf07bf90e60ff79f3e9076bcb1b5121840665a065b967ac0bddddd1ed1b9a7c02c7c434e804e6e77d019778b74d6642423401e35dd9d8195d6896322e7ed6922c1eb8b086391b884a6acda2c34b70927f84075c25a44184ce92f7d7af1d2f22bee69374dd1bf0327f8956ede0dc23dda90106cf555fb8202fe6db9acda1d0b4fff8fdcd0404daa4b359c73017c7cdb8009468b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae010000bd7d934900000000' self.assertEqual(res[0]['result'], expected_raw_block) expected_verbose_hash = '0x55f745c9098d5d5bdaff9f8f32aad29c904c83d9832b48c16e677d30c7da4273' self.assertEqual(res[1]['result']['hash'], expected_verbose_hash) From 3ff848b3f26784e62fd78055cfa6d4c9c1fd9bdf Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:29:52 -0800 Subject: [PATCH 37/55] Update tests.rst - update instructions per reality --- docs/source/tests.rst | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/source/tests.rst b/docs/source/tests.rst index 95858f67f..fe9a54bae 100644 --- a/docs/source/tests.rst +++ b/docs/source/tests.rst @@ -136,7 +136,17 @@ In that way we can easily find out all the contracts deploy on the image by runn The reason for this is that we need to keep the image as small as possible. It can inadvertently happen that your image has been accumulating new blocks for days or weeks e.g. while working on implementing the new tests in phases, which unnecessarily increases the image size. Our test fixtures are reset and extracted 20+ times in our build system so any size increase will add a delay * 20 or more. -10) Create the fixtures by incrementing the suffix number (x+1): +10) Stop your current docker container before creating the new fixtures: + +.. code-block:: sh + + docker stop neo-privnet-unittest + +11) Create the fixtures by incrementing the suffix number (x+1): + +**WARNING:** Ensure your fixtures include the following file structure: +- For fixtures_vx+1.tar.gz: ``fixtures/test_chain`` +- For notif_fixtures_vx+1.tar.gz: ``fixtures/test_notifications`` .. code-block:: sh @@ -148,6 +158,5 @@ Our test fixtures are reset and extracted 20+ times in our build system so any s .. code-block:: sh neo.Utils.BlockchainFixtureTestCase.py - neo.api.REST.test_rest_api.py 12) Create a new PR with the link to the new image and the newly created fixtures. From 64fc047ce5bc65883718b5390f7413f6383ae99a Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:30:35 -0800 Subject: [PATCH 38/55] Update tests.rst - update numbering --- docs/source/tests.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/tests.rst b/docs/source/tests.rst index fe9a54bae..3e73c6c60 100644 --- a/docs/source/tests.rst +++ b/docs/source/tests.rst @@ -153,10 +153,10 @@ Our test fixtures are reset and extracted 20+ times in our build system so any s tar -zcvf notif_fixtures_vx+1.tar.gz unittest_notif tar -zcvf fixtures_vx+1.tar.gz unittest -11) Update the fixture name in the static class variables in the following files +12) Update the fixture name in the static class variables in the following files .. code-block:: sh neo.Utils.BlockchainFixtureTestCase.py -12) Create a new PR with the link to the new image and the newly created fixtures. +13) Create a new PR with the link to the new image and the newly created fixtures. From 0e18adc18642720a322868562e952f2ea84e125e Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Fri, 16 Nov 2018 16:32:57 -0800 Subject: [PATCH 39/55] Update tests.rst - update formatting --- docs/source/tests.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/tests.rst b/docs/source/tests.rst index 3e73c6c60..ffcd54eb0 100644 --- a/docs/source/tests.rst +++ b/docs/source/tests.rst @@ -145,13 +145,15 @@ Our test fixtures are reset and extracted 20+ times in our build system so any s 11) Create the fixtures by incrementing the suffix number (x+1): **WARNING:** Ensure your fixtures include the following file structure: + - For fixtures_vx+1.tar.gz: ``fixtures/test_chain`` + - For notif_fixtures_vx+1.tar.gz: ``fixtures/test_notifications`` .. code-block:: sh - tar -zcvf notif_fixtures_vx+1.tar.gz unittest_notif - tar -zcvf fixtures_vx+1.tar.gz unittest + tar -zcvf notif_fixtures_vx+1.tar.gz fixtures + tar -zcvf fixtures_vx+1.tar.gz fixtures 12) Update the fixture name in the static class variables in the following files From 533cbb0a5f87f207dfddbd05fcfdda908c943f58 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 17 Nov 2018 08:42:40 -0800 Subject: [PATCH 40/55] Add files via upload - update wallet fixture files --- neo/Utils/fixtures/neo-test1-w.wallet | Bin 110592 -> 110592 bytes neo/Utils/fixtures/neo-test2-w.wallet | Bin 86016 -> 86016 bytes neo/Utils/fixtures/neo-test3-w.wallet | Bin 86016 -> 86016 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/neo/Utils/fixtures/neo-test1-w.wallet b/neo/Utils/fixtures/neo-test1-w.wallet index d136a7de8f7cc1a71af96f3a46f4fcd7d43ec750..3e1af06faf37ef2afbd179582c3f3ffed6e9bca9 100644 GIT binary patch delta 29 lcmZp8z}E19ZGtr8zKJrMz@U#g6kQ*HW#h$TL1ud#tD)D From 7f1d0bf3dcb6da613002452196483f701d1d7eb8 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 17 Nov 2018 08:44:30 -0800 Subject: [PATCH 41/55] Update test_user_wallet.py - update test_1_initial_setup for wallet height --- neo/Implementations/Wallets/peewee/test_user_wallet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neo/Implementations/Wallets/peewee/test_user_wallet.py b/neo/Implementations/Wallets/peewee/test_user_wallet.py index 12bd7ba9b..5ae7211e0 100644 --- a/neo/Implementations/Wallets/peewee/test_user_wallet.py +++ b/neo/Implementations/Wallets/peewee/test_user_wallet.py @@ -66,7 +66,7 @@ def test_1_initial_setup(self): self.assertEqual(neo_balance_should_be, neo_balance) - self.assertEqual(wallet.WalletHeight, 12351) + self.assertEqual(wallet.WalletHeight, 12363) def test_2_transactions(self): From 96a1e8b8dec2f7d4c90311876e710ade29a31a4c Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Sat, 17 Nov 2018 09:31:42 -0800 Subject: [PATCH 42/55] Update tests.rst - add step for updating fixture wallets --- docs/source/tests.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/source/tests.rst b/docs/source/tests.rst index ffcd54eb0..1db6d8321 100644 --- a/docs/source/tests.rst +++ b/docs/source/tests.rst @@ -162,3 +162,20 @@ Our test fixtures are reset and extracted 20+ times in our build system so any s neo.Utils.BlockchainFixtureTestCase.py 13) Create a new PR with the link to the new image and the newly created fixtures. + +14) If you edited any of the fixture wallets, make sure you fully sync your wallet before uploading it to your PR's branch: + +- While the neo-privnet-unittest container is stopped, run ``np-prompt -u`` and open all affected fixture wallets + +- Check to ensure each wallet is 100% synced before closing + +- Update any affected tests + +**NOTE:** During ``make test`` or ``python -m unittest discover neo`` you should not see this warning, which indicates one or more fixture wallets is not fully synced: + +.. code-block:: sh + + [W 181116 16:13:07 Wallet:1063] Wait for your wallet to be synced before doing transactions. + To check enter 'wallet' and look at 'percent_synced', it should be 100. + Also the blockchain should be up to the latest blocks (see Progress). + Issuing 'wallet rebuild' restarts the syncing process. From ec2699909cfc4d2e57f2d45bd0634c87509b446d Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Mon, 19 Nov 2018 12:54:29 -0800 Subject: [PATCH 43/55] Update CHANGELOG.rst for compatibility --- CHANGELOG.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4cdbca193..2ec3c9838 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,7 +15,6 @@ All notable changes to this project are documented in this file. - Fix RPC's ``getaccountstate`` response schema to match ``neo-cli`` `#714 ` - Add fix to ensure tx is saved to wallet when sent using RPC - Add bad peers to the ``getpeers`` RPC method `#715 ` -- Improve user feedback on errors while working with multi-signature contracts and add increase test coverage - Allow a raw tx to be build without an active blockchain db in the environment From afd65c7cb1a4c437a41a0ceba09a732d5d5c792b Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Mon, 19 Nov 2018 12:56:34 -0800 Subject: [PATCH 44/55] Update CHANGELOG.rst --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3e51fc7a7..2c5afa6ce 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -18,6 +18,7 @@ All notable changes to this project are documented in this file. - Introduce Django inspired component loading for REST and RPC server - Allow a raw tx to be build without an active blockchain db in the environment - Fix unnecessary default bootstrap warning for mainnet showing. +- Improve user feedback on errors while working with multi-signature contracts and add increase test coverage [0.8.2] 2018-10-31 From ed4357a25a1605f5eb5fd07cdb2b24eaf9d71d8c Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Mon, 19 Nov 2018 23:53:30 -0800 Subject: [PATCH 45/55] Update .travis.yml - update to show passing build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9be7d9d68..c64b15d23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ install: - pip install -e . - pip install coveralls - yes | pip uninstall neo-boa neocore -- pip install -e git+https://github.com/CityOfZion/neo-boa@development#egg=neo-boa +- pip install - pip install -e git+https://github.com/jseagrave21/neo-boa@patch-1#egg=neo-boa - pip install -e git+https://github.com/CityOfZion/neo-python-core@master#egg=neocore # command to run tests From e847e15b3f9a38a6654435f3cc038778be2ff936 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Mon, 19 Nov 2018 23:54:29 -0800 Subject: [PATCH 46/55] Update .travis.yml fix typo --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c64b15d23..5c50e1b3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ install: - pip install -e . - pip install coveralls - yes | pip uninstall neo-boa neocore -- pip install - pip install -e git+https://github.com/jseagrave21/neo-boa@patch-1#egg=neo-boa +- pip install -e git+https://github.com/jseagrave21/neo-boa@patch-1#egg=neo-boa - pip install -e git+https://github.com/CityOfZion/neo-python-core@master#egg=neocore # command to run tests From 26638f9716176b65e154eac378f339a0c498c4d6 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Tue, 20 Nov 2018 03:10:10 -0800 Subject: [PATCH 47/55] Update BuildNRun.py - add the ability to input a from-addr for TestBuild (required for neo-boa) --- neo/Prompt/Commands/BuildNRun.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/neo/Prompt/Commands/BuildNRun.py b/neo/Prompt/Commands/BuildNRun.py index b0f26bd4c..ce672065d 100644 --- a/neo/Prompt/Commands/BuildNRun.py +++ b/neo/Prompt/Commands/BuildNRun.py @@ -116,7 +116,8 @@ def DoRun(contract_script, arguments, wallet, path, verbose=True, return None, None, None, None -def TestBuild(script, invoke_args, wallet, plist='05', ret='05', dynamic=False, invoke_attrs=None, owners=None): +def TestBuild(script, invoke_args, wallet, plist='05', ret='05', arguments=[], dynamic=False, invoke_attrs=None, owners=None): + arguments, from_addr = get_from_addr(arguments) properties = ContractPropertyState.HasStorage if dynamic: @@ -127,4 +128,4 @@ def TestBuild(script, invoke_args, wallet, plist='05', ret='05', dynamic=False, script = generate_deploy_script(script, contract_properties=int(properties), parameter_list=plist, return_type=BigInteger.FromBytes(ret)) - return test_deploy_and_invoke(script, invoke_args, wallet, invoke_attrs=invoke_attrs, owners=owners) + return test_deploy_and_invoke(script, invoke_args, wallet, from_addr=from_addr, invoke_attrs=invoke_attrs, owners=owners) From 2259778e2c0cdc932a82055ec6037e25868ff9b3 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Tue, 20 Nov 2018 03:12:44 -0800 Subject: [PATCH 48/55] Update CHANGELOG.rst for compatibility --- CHANGELOG.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2c5afa6ce..3e51fc7a7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -18,7 +18,6 @@ All notable changes to this project are documented in this file. - Introduce Django inspired component loading for REST and RPC server - Allow a raw tx to be build without an active blockchain db in the environment - Fix unnecessary default bootstrap warning for mainnet showing. -- Improve user feedback on errors while working with multi-signature contracts and add increase test coverage [0.8.2] 2018-10-31 From b1775abc352704a996d506fa11a209d1326c6fd3 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Tue, 20 Nov 2018 03:14:23 -0800 Subject: [PATCH 49/55] Update CHANGELOG.rst --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 503655398..72a36ad83 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -19,6 +19,7 @@ All notable changes to this project are documented in this file. - Allow a raw tx to be build without an active blockchain db in the environment - Fix unnecessary default bootstrap warning for mainnet showing. - Add GET and OPTIONS request functionality for JSON-RPC servers +- Improve user feedback on errors while working with multi-signature contracts and add increase test coverage [0.8.2] 2018-10-31 From babc950536765218831f2d6f768bdfcb492ee686 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 28 Nov 2018 08:43:45 -0800 Subject: [PATCH 50/55] Update Send.py - update to match https://github.com/CityOfZion/neo-python/pull/730 --- neo/Prompt/Commands/Send.py | 76 +++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 42 deletions(-) diff --git a/neo/Prompt/Commands/Send.py b/neo/Prompt/Commands/Send.py index 530bec603..9032a28ae 100755 --- a/neo/Prompt/Commands/Send.py +++ b/neo/Prompt/Commands/Send.py @@ -17,12 +17,9 @@ def construct_send_basic(wallet, arguments): - if not wallet: - print("please open a wallet") - return False if len(arguments) < 3: print("Not enough arguments") - return False + return None arguments, from_address = get_from_addr(arguments) arguments, priority_fee = get_fee(arguments) @@ -35,39 +32,40 @@ def construct_send_basic(wallet, arguments): assetId = get_asset_id(wallet, to_send) if assetId is None: print("Asset id not found") - return False + return None scripthash_to = lookup_addr_str(wallet, address_to) if scripthash_to is None: - logger.debug("invalid address") - return False + logger.debug("invalid destination address") + return None scripthash_from = None if from_address is not None: scripthash_from = lookup_addr_str(wallet, from_address) if scripthash_from is None: - logger.debug("invalid address") - return False + logger.debug("invalid source address") + return None # if this is a token, we will use a different # transfer mechanism if type(assetId) is NEP5Token: - return do_token_transfer(assetId, wallet, from_address, address_to, amount_from_string(assetId, amount), tx_attributes=user_tx_attributes) + return do_token_transfer(assetId, wallet, from_address, address_to, amount_from_string(assetId, amount), + tx_attributes=user_tx_attributes) f8amount = get_asset_amount(amount, assetId) if f8amount is False: logger.debug("invalid amount") - return False + return None if float(amount) == 0: print("amount cannot be 0") - return False + return None fee = Fixed8.Zero() if priority_fee is not None: fee = priority_fee if fee is False: logger.debug("invalid fee") - return False + return None output = TransactionOutput(AssetId=assetId, Value=f8amount, script_hash=scripthash_to) contract_tx = ContractTransaction(outputs=[output]) @@ -75,20 +73,17 @@ def construct_send_basic(wallet, arguments): def construct_send_many(wallet, arguments): - if not wallet: - print("please open a wallet") - return False if len(arguments) is 0: print("Not enough arguments") - return False + return None outgoing = get_arg(arguments, convert_to_int=True) if outgoing is None: print("invalid outgoing number") - return False + return None if outgoing < 1: print("outgoing number must be >= 1") - return False + return None arguments, from_address = get_from_addr(arguments) arguments, change_address = get_change_addr(arguments) @@ -103,23 +98,23 @@ def construct_send_many(wallet, arguments): assetId = get_asset_id(wallet, to_send) if assetId is None: print("Asset id not found") - return False + return None if type(assetId) is NEP5Token: print('Sendmany does not support NEP5 tokens') - return False + return None address_to = prompt("Address to: ") scripthash_to = lookup_addr_str(wallet, address_to) if scripthash_to is None: - logger.debug("invalid address") - return False + logger.debug("invalid destination address") + return None amount = prompt("Amount to send: ") f8amount = get_asset_amount(amount, assetId) if f8amount is False: logger.debug("invalid amount") - return False + return None if float(amount) == 0: print("amount cannot be 0") - return False + return None tx_output = TransactionOutput(AssetId=assetId, Value=f8amount, script_hash=scripthash_to) output.append(tx_output) contract_tx = ContractTransaction(outputs=output) @@ -129,23 +124,23 @@ def construct_send_many(wallet, arguments): if from_address is not None: scripthash_from = lookup_addr_str(wallet, from_address) if scripthash_from is None: - logger.debug("invalid address") - return False + logger.debug("invalid source address") + return None scripthash_change = None if change_address is not None: scripthash_change = lookup_addr_str(wallet, change_address) if scripthash_change is None: - logger.debug("invalid address") - return False + logger.debug("invalid change address") + return None fee = Fixed8.Zero() if priority_fee is not None: fee = priority_fee if fee is False: logger.debug("invalid fee") - return False + return None print("sending with fee: %s " % fee.ToString()) return [contract_tx, scripthash_from, scripthash_change, fee, owners, user_tx_attributes] @@ -160,13 +155,13 @@ def process_transaction(wallet, contract_tx, scripthash_from=None, scripthash_ch if tx is None: logger.debug("insufficient funds") - return False + return None # password prompt passwd = prompt("[Password]> ", is_password=True) if not wallet.ValidatePassword(passwd): print("incorrect password") - return False + return None standard_contract = wallet.GetStandardAddress() @@ -199,9 +194,6 @@ def process_transaction(wallet, contract_tx, scripthash_from=None, scripthash_ch if context.Completed: tx.scripts = context.GetScripts() - - # print("will send tx: %s " % json.dumps(tx.ToJson(),indent=4)) - relayed = NodeLeader.Instance().Relay(tx) if relayed: @@ -214,16 +206,16 @@ def process_transaction(wallet, contract_tx, scripthash_from=None, scripthash_ch print("Could not relay tx %s " % tx.Hash.ToString()) else: - print("Transaction initiated, but the signature is incomplete") + print("Transaction initiated, but the signature is incomplete. Use the `sign` command with the information below to complete signing.") print(json.dumps(context.ToJson(), separators=(',', ':'))) - return False + return None except Exception as e: print("could not send: %s " % e) traceback.print_stack() traceback.print_exc() - return False + return None def parse_and_sign(wallet, jsn): @@ -231,7 +223,7 @@ def parse_and_sign(wallet, jsn): context = ContractParametersContext.FromJson(jsn) if context is None: print("Failed to parse JSON") - return + return None wallet.Sign(context) @@ -253,15 +245,15 @@ def parse_and_sign(wallet, jsn): return tx else: print("Could not relay tx %s " % tx.Hash.ToString()) - return + return None else: print("Transaction initiated, but the signature is incomplete") print(json.dumps(context.ToJson(), separators=(',', ':'))) - return + return None except Exception as e: print("could not send: %s " % e) traceback.print_stack() traceback.print_exc() - return + return None From 9d93d2c015d916bd17f99dd6a7cff7cdb6591f2a Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 28 Nov 2018 08:46:03 -0800 Subject: [PATCH 51/55] Update CHANGELOG.rst for compatibility --- CHANGELOG.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 72a36ad83..503655398 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -19,7 +19,6 @@ All notable changes to this project are documented in this file. - Allow a raw tx to be build without an active blockchain db in the environment - Fix unnecessary default bootstrap warning for mainnet showing. - Add GET and OPTIONS request functionality for JSON-RPC servers -- Improve user feedback on errors while working with multi-signature contracts and add increase test coverage [0.8.2] 2018-10-31 From 44269628356dd4af57da226a487f75f06d1b77cd Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 28 Nov 2018 08:47:51 -0800 Subject: [PATCH 52/55] Update CHANGELOG.rst --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9dff21199..7a57b0655 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,7 @@ All notable changes to this project are documented in this file. - Fix unnecessary default bootstrap warning for mainnet showing. - Add GET and OPTIONS request functionality for JSON-RPC servers - Fix ``gzip`` failure in current implementation of ExtendedJsonRpcApi +- Improve user feedback on errors while working with multi-signature contracts and increase test coverage [0.8.2] 2018-10-31 From 9c9ca9f929e690a0c90610aaa3ef088b2c8b29bc Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 28 Nov 2018 09:06:42 -0800 Subject: [PATCH 53/55] Update Send.py - restore required logic (not needed in `refactored-prompt`) --- neo/Prompt/Commands/Send.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/neo/Prompt/Commands/Send.py b/neo/Prompt/Commands/Send.py index 9032a28ae..5e6303316 100755 --- a/neo/Prompt/Commands/Send.py +++ b/neo/Prompt/Commands/Send.py @@ -17,6 +17,9 @@ def construct_send_basic(wallet, arguments): + if not wallet: + print("please open a wallet") + return False if len(arguments) < 3: print("Not enough arguments") return None @@ -73,6 +76,9 @@ def construct_send_basic(wallet, arguments): def construct_send_many(wallet, arguments): + if not wallet: + print("please open a wallet") + return False if len(arguments) is 0: print("Not enough arguments") return None From 478a60f5bdb49ae058548a6222bfd1061b0c7042 Mon Sep 17 00:00:00 2001 From: jseagrave21 <40873301+jseagrave21@users.noreply.github.com> Date: Wed, 28 Nov 2018 09:08:11 -0800 Subject: [PATCH 54/55] Update Send.py - make logic cohesive --- neo/Prompt/Commands/Send.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neo/Prompt/Commands/Send.py b/neo/Prompt/Commands/Send.py index 5e6303316..99a99f5bd 100755 --- a/neo/Prompt/Commands/Send.py +++ b/neo/Prompt/Commands/Send.py @@ -19,7 +19,7 @@ def construct_send_basic(wallet, arguments): if not wallet: print("please open a wallet") - return False + return None if len(arguments) < 3: print("Not enough arguments") return None @@ -78,7 +78,7 @@ def construct_send_basic(wallet, arguments): def construct_send_many(wallet, arguments): if not wallet: print("please open a wallet") - return False + return None if len(arguments) is 0: print("Not enough arguments") return None From da8cf8d40d00c52804141e8e7571fcb583b06217 Mon Sep 17 00:00:00 2001 From: jseagrave21 Date: Fri, 18 Jan 2019 23:10:59 -0500 Subject: [PATCH 55/55] Add updated test coverage for parse_and_sign --- .travis.yml | 2 +- .../Commands/tests/test_loadsmartcontract.py | 24 +-- .../Commands/tests/test_send_commands.py | 139 +++++++++++++++++- 3 files changed, 140 insertions(+), 25 deletions(-) diff --git a/.travis.yml b/.travis.yml index c32af9da8..4543db067 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ install: - pip install -e . - pip install coveralls - yes | pip uninstall neo-boa neocore - - pip install -e git+https://github.com/jseagrave21/neo-boa@development#egg=neo-boa + - pip install -e git+https://github.com/jseagrave21/neo-boa@patch-1#egg=neo-boa - pip install -e git+https://github.com/CityOfZion/neo-python-core@master#egg=neocore env: diff --git a/neo/Prompt/Commands/tests/test_loadsmartcontract.py b/neo/Prompt/Commands/tests/test_loadsmartcontract.py index 9e76c96ac..12013d316 100644 --- a/neo/Prompt/Commands/tests/test_loadsmartcontract.py +++ b/neo/Prompt/Commands/tests/test_loadsmartcontract.py @@ -1,27 +1,9 @@ -from neo.Utils.WalletFixtureTestCase import WalletFixtureTestCase -from neo.Wallets.utils import to_aes_key -from neo.Implementations.Wallets.peewee.UserWallet import UserWallet -import shutil -from neo.Prompt.Commands.LoadSmartContract import LoadContract, GatherLoadedContractParams, ImportMultiSigContractAddr +from unittest import TestCase +from neo.Prompt.Commands.LoadSmartContract import LoadContract, GatherLoadedContractParams import mock -class LoadSmartContractTestCase(WalletFixtureTestCase): - - wallet_1_addr = "AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc3" - wallet_1_pk = "03cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c6" - - _wallet1 = None - - wallet_2_pk = "03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034" - - @classmethod - def GetWallet1(cls, recreate=False): - if cls._wallet1 is None or recreate: - shutil.copyfile(cls.wallet_1_path(), cls.wallet_1_dest()) - cls._wallet1 = UserWallet.Open(LoadSmartContractTestCase.wallet_1_dest(), - to_aes_key(LoadSmartContractTestCase.wallet_1_pass())) - return cls._wallet1 +class LoadSmartContractTestCase(TestCase): def test_loadcontract(self): # test for void (ff) type in params diff --git a/neo/Prompt/Commands/tests/test_send_commands.py b/neo/Prompt/Commands/tests/test_send_commands.py index c0dbced8b..d255098d1 100644 --- a/neo/Prompt/Commands/tests/test_send_commands.py +++ b/neo/Prompt/Commands/tests/test_send_commands.py @@ -8,7 +8,7 @@ from neo.Prompt.Commands import Send, Wallet from neo.Prompt.PromptData import PromptData import shutil -from mock import patch +from mock import patch, MagicMock import json from io import StringIO from neo.Prompt.PromptPrinter import pp @@ -23,6 +23,14 @@ class UserWalletTestCase(WalletFixtureTestCase): watch_addr_str = 'AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkEm' _wallet1 = None + wallet_2_addr = 'AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkEm' + _wallet2 = None + + wallet_3_addr = 'AZiE7xfyJALW7KmADWtCJXGGcnduYhGiCX' + _wallet3 = None + + wallet_2_and_3_multisig_addr = "Aau2M4UdXxwxLLizDw11eDZRDs5jpXduh8" + @classmethod def GetWallet1(cls, recreate=False): if cls._wallet1 is None or recreate: @@ -31,6 +39,22 @@ def GetWallet1(cls, recreate=False): to_aes_key(UserWalletTestCase.wallet_1_pass())) return cls._wallet1 + @classmethod + def GetWallet2(cls, recreate=False): + if cls._wallet2 is None or recreate: + shutil.copyfile(cls.wallet_2_path(), cls.wallet_2_dest()) + cls._wallet2 = UserWallet.Open(UserWalletTestCase.wallet_2_dest(), + to_aes_key(UserWalletTestCase.wallet_2_pass())) + return cls._wallet2 + + @classmethod + def GetWallet3(cls, recreate=False): + if cls._wallet3 is None or recreate: + shutil.copyfile(cls.wallet_3_path(), cls.wallet_3_dest()) + cls._wallet3 = UserWallet.Open(UserWalletTestCase.wallet_3_dest(), + to_aes_key(UserWalletTestCase.wallet_3_pass())) + return cls._wallet3 + @classmethod def tearDown(cls): PromptData.Wallet = None @@ -39,7 +63,7 @@ def test_send_neo(self): with patch('sys.stdout', new=StringIO()) as mock_print: with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): PromptData.Wallet = self.GetWallet1(recreate=True) - args = ['send', 'neo', self.watch_addr_str, '50'] + args = ['send', 'neo', self.watch_addr_str, '1'] res = Wallet.CommandWallet().execute(args) @@ -50,7 +74,7 @@ def test_send_gas(self): with patch('sys.stdout', new=StringIO()) as mock_print: with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_1_pass()]): PromptData.Wallet = self.GetWallet1(recreate=True) - args = ['send', 'gas', self.watch_addr_str, '5'] + args = ['send', 'gas', self.watch_addr_str, '1'] res = Wallet.CommandWallet().execute(args) @@ -546,3 +570,112 @@ def test_sendmany_keyboard_interrupt(self): self.assertFalse(res) self.assertIn("Transaction cancelled", mock_print.getvalue()) + + def test_parse_and_sign_good(self): + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + # start the tx from wallet2 + PromptData.Wallet = self.GetWallet2(recreate=True) + args = ['send', 'neo', self.wallet_1_addr, '1', '--from-addr=' + self.wallet_2_and_3_multisig_addr] + + Wallet.CommandWallet().execute(args) + + # now sign the tx with wallet3 + PromptData.Wallet = self.GetWallet3(recreate=True) + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"b5b32d6b56f3729747380072c722c50b0ee91e930f58a58d49c98c5543e335b70f6a400c8e1f9fa9653f7605ad229974cacfac3143cd355ca900c328b3db6018"}}}}' + args = ['sign', jsn] + + res = Wallet.CommandWallet().execute(args) + + res = res.ToJson() + self.assertTrue(res) + self.assertEqual(res['vout'][0]['value'], "1") # verify the amount + self.assertEqual(res['vout'][0]['address'], self.wallet_1_addr) # verify to_address + self.assertEqual(res['vout'][1]['address'], self.wallet_2_and_3_multisig_addr) # verify from_address + + def test_parse_and_sign_bad_jsn(self): + with patch('sys.stdout', new=StringIO()) as mock_print: + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + # start the tx from wallet2 + PromptData.Wallet = self.GetWallet2(recreate=True) + args = ['send', 'neo', self.wallet_1_addr, '1', '--from-addr=' + self.wallet_2_and_3_multisig_addr] + + Wallet.CommandWallet().execute(args) + + # now sign the tx with wallet3 + PromptData.Wallet = self.GetWallet3(recreate=True) + jsn = 'blah' + args = ['sign', jsn] + + res = Wallet.CommandWallet().execute(args) + + self.assertFalse(res) + self.assertIn("Failed to parse JSON", mock_print.getvalue()) + + def test_parse_and_sign_fails_to_relay(self): + with patch('sys.stdout', new=StringIO()) as mock_print: + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + with patch('neo.Prompt.Commands.Send.NodeLeader.Relay', return_value=False): + # start the tx from wallet2 + PromptData.Wallet = self.GetWallet2(recreate=True) + args = ['send', 'neo', self.wallet_1_addr, '1', '--from-addr=' + self.wallet_2_and_3_multisig_addr] + + Wallet.CommandWallet().execute(args) + + # now sign the tx with wallet3 + PromptData.Wallet = self.GetWallet3(recreate=True) + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"b5b32d6b56f3729747380072c722c50b0ee91e930f58a58d49c98c5543e335b70f6a400c8e1f9fa9653f7605ad229974cacfac3143cd355ca900c328b3db6018"}}}}' + args = ['sign', jsn] + + res = Wallet.CommandWallet().execute(args) + + self.assertFalse(res) + self.assertIn("Could not relay tx", mock_print.getvalue()) + + def test_parse_and_sign_twice(self): # this test implies there are more signatures needed + with patch('sys.stdout', new=StringIO()) as mock_print: + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + # start the tx from wallet2 + PromptData.Wallet = self.GetWallet2(recreate=True) + args = ['send', 'neo', self.wallet_1_addr, '1', '--from-addr=' + self.wallet_2_and_3_multisig_addr] + + Wallet.CommandWallet().execute(args) + + # now sign the tx with wallet2 again + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"b5b32d6b56f3729747380072c722c50b0ee91e930f58a58d49c98c5543e335b70f6a400c8e1f9fa9653f7605ad229974cacfac3143cd355ca900c328b3db6018"}}}}' + args = ['sign', jsn] + + res = Wallet.CommandWallet().execute(args) + + self.assertFalse(res) + self.assertIn("Transaction initiated, but the signature is incomplete", mock_print.getvalue()) + + def test_parse_and_sign_exception(self): + with patch('sys.stdout', new=StringIO()) as mock_print: + with patch('neo.Prompt.Commands.Send.prompt', side_effect=[UserWalletTestCase.wallet_2_pass()]): + with patch('neo.Prompt.Commands.Send.traceback'): # mocking traceback module to avoid stacktrace printing during test run + # start the tx from wallet2 + PromptData.Wallet = self.GetWallet2(recreate=True) + args = ['send', 'neo', self.wallet_1_addr, '1', '--from-addr=' + self.wallet_2_and_3_multisig_addr] + + Wallet.CommandWallet().execute(args) + + # mocking wallet to trigger the exception + PromptData.Wallet = MagicMock() + PromptData.Wallet.Sign.side_effect = Exception + jsn = '{"type":"Neo.Core.ContractTransaction","hex":"800000014405fd5ae29ceeb20912776048c544109c8c67c4128c019863eca58cf677ad360000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000001cc9c05cefffe6cdd7b182816a9152ec218d2ec09b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50084d71700000000d1c4904014bfe7d34e9e97370f2cd3a633377cd6","items":{"0xd67c3733a6d32c0f37979e4ed3e7bf144090c4d1":{"script":"522103989f7417da540a8ce00195738249291cba058102a12d2df1b00e2a826d8bd0612103c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e9603452ae","parameters":[{"type":"Signature"},{"type":"Signature"}],"signatures":{"03c46aec8d1ac8cb58fe74764de223d15e7045de67a51d1a4bcecd396918e96034":"b5b32d6b56f3729747380072c722c50b0ee91e930f58a58d49c98c5543e335b70f6a400c8e1f9fa9653f7605ad229974cacfac3143cd355ca900c328b3db6018"}}}}' + args = ['sign', jsn] + + res = Wallet.CommandWallet().execute(args) + + self.assertFalse(res) + self.assertIn("Could not send:", mock_print.getvalue()) + + def test_parse_and_sign_no_args(self): + with patch('sys.stdout', new=StringIO()) as mock_print: + PromptData.Wallet = self.GetWallet2(recreate=True) + args = ['sign'] + + res = Wallet.CommandWallet().execute(args) + + self.assertFalse(res) + self.assertIn("Please specify the required parameter", mock_print.getvalue())