def test_transfer_multi_args_0(self): transfer_1 = [ acct1.get_address().to_bytes(), acct2.get_address().to_bytes(), 10 ] transfer_2 = [ acct2.get_address().to_bytes(), acct3.get_address().to_bytes(), 100 ] transfer_list = [transfer_1, transfer_2] hex_contract_address = 'ca91a73433c016fbcbcf98051d385785a6a5d9be' func = NeoInvokeFunction('transfer_multi') func.set_params_value(transfer_list) tx_hash = sdk.rpc.send_neo_vm_transaction(hex_contract_address, acct1, acct2, self.gas_price, self.gas_limit, func, False) self.assertEqual(64, len(tx_hash)) time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states = Event.get_states_by_contract_address(event, hex_contract_address) states[0] = NeoData.to_utf8_str(states[0]) states[1][0][0] = NeoData.to_b58_address(states[1][0][0]) self.assertEqual(acct1.get_address_base58(), states[1][0][0]) states[1][0][1] = NeoData.to_b58_address(states[1][0][1]) self.assertEqual(acct2.get_address_base58(), states[1][0][1]) states[1][0][2] = NeoData.to_int(states[1][0][2]) self.assertEqual(10, states[1][0][2]) states[1][1][0] = NeoData.to_b58_address(states[1][1][0]) self.assertEqual(acct2.get_address_base58(), states[1][1][0]) states[1][1][1] = NeoData.to_b58_address(states[1][1][1]) self.assertEqual(acct3.get_address_base58(), states[1][1][1]) states[1][1][2] = NeoData.to_int(states[1][1][2]) self.assertEqual(100, states[1][1][2])
def test_notify(self): hex_contract_address = '6690b6638251be951dded8c537678200a470c679' notify_args = NeoInvokeFunction('testHello') bool_msg = True int_msg = 1 bytes_msg = b'Hello' str_msg = 'Hello' bytes_address_msg = acct1.get_address().to_bytes() notify_args.set_params_value(bool_msg, int_msg, bytes_msg, str_msg, bytes_address_msg) tx_hash = self.send_tx(hex_contract_address, None, acct1, notify_args) if len(tx_hash) == 0: return time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states = Event.get_states_by_contract_address(event, hex_contract_address) states[0] = NeoData.to_utf8_str(states[0]) self.assertEqual('testHello', states[0]) states[1] = NeoData.to_bool(states[1]) self.assertEqual(bool_msg, states[1]) states[2] = NeoData.to_int(states[2]) self.assertEqual(int_msg, states[2]) states[3] = NeoData.to_bytes(states[3]) self.assertEqual(bytes_msg, states[3]) states[4] = NeoData.to_utf8_str(states[4]) self.assertEqual(str_msg, states[4]) states[5] = NeoData.to_b58_address(states[5]) self.assertEqual(acct1.get_address_base58(), states[5])
def test_notify_pre_exec(self): bool_msg = True int_msg = 1024 list_msg = [1, 1024, 2048] str_msg = 'Hello' bytes_address_msg = acct1.get_address().to_bytes() hex_contract_address = '4855735ffadad50e7000d73e1c4e96f38d225f70' func = NeoInvokeFunction('notify_args') func.set_params_value(bool_msg, int_msg, list_msg, str_msg, bytes_address_msg) sdk.rpc.set_address('http://polaris5.ont.io:20336') response = sdk.rpc.send_neo_vm_tx_pre_exec(hex_contract_address, func) self.assertEqual(1, response['State']) self.assertEqual(20000, response['Gas']) notify = response['Notify'][0] self.assertEqual(hex_contract_address, notify['ContractAddress']) states = notify['States'] states[0] = NeoData.to_utf8_str(states[0]) self.assertEqual('notify args', states[0]) states[1] = NeoData.to_bool(states[1]) self.assertEqual(True, states[1]) states[2] = NeoData.to_int(states[2]) self.assertEqual(int_msg, states[2]) states[3] = NeoData.to_int_list(states[3]) self.assertEqual(list_msg, states[3]) states[4] = NeoData.to_utf8_str(states[4]) self.assertEqual(str_msg, states[4]) states[5] = NeoData.to_b58_address(states[5]) self.assertEqual(acct1.get_address_base58(), states[5])
def query_revoke_event(self, tx_hash: str): event = self._sdk.default_network.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_by_contract_address(event, self.__hex_contract_address) if len(notify['States']) == 4: notify['States'][0] = NeoData.to_utf8_str(notify['States'][0]) notify['States'][1] = NeoData.to_b58_address(notify['States'][1]) notify['States'][2] = NeoData.to_utf8_str(notify['States'][2]) notify['States'][3] = NeoData.to_hex_str(notify['States'][3]) return notify
def echo_cli_exception(e: Union[PunicaException, SDKException]): msg = e.args[1].replace('Other Error, ', '') if 'transactor' in msg: if isinstance(msg, str): words = msg.split(' ') words[0] = 'Payer' words[1] = NeoData.to_b58_address( NeoData.to_reserve_hex_str(words[1])) msg = ' '.join(words) echo(red(f'\n{msg}\n', bold=True))
def test_oep4_transfer(self): hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' func = NeoInvokeFunction('transfer') bytes_from_address = acct1.get_address().to_bytes() bytes_to_address = acct2.get_address().to_bytes() value = 1 func.set_params_value(bytes_from_address, bytes_to_address, value) tx_hash = self.send_tx(hex_contract_address, acct1, acct2, func) if len(tx_hash) == 0: return time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states = Event.get_states_by_contract_address(event, hex_contract_address) states[0] = NeoData.to_utf8_str(states[0]) self.assertEqual('transfer', states[0]) states[1] = NeoData.to_b58_address(states[1]) self.assertEqual(acct1.get_address().b58encode(), states[1]) states[2] = NeoData.to_b58_address(states[2]) self.assertEqual(acct2.get_address().b58encode(), states[2]) states[3] = NeoData.to_int(states[3]) self.assertEqual(value, states[3])
def test_oep4_transfer_multi(self): hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' bytes_from_address1 = acct1.get_address().to_bytes() bytes_to_address1 = acct2.get_address().to_bytes() value1 = 2 transfer1 = [bytes_from_address1, bytes_to_address1, value1] bytes_from_address2 = acct2.get_address().to_bytes() bytes_to_address2 = acct3.get_address().to_bytes() value2 = 1 transfer2 = [bytes_from_address2, bytes_to_address2, value2] func = NeoInvokeFunction('transferMulti') func.set_params_value(transfer1, transfer2) tx_hash = sdk.default_network.send_neo_vm_transaction( hex_contract_address, acct1, acct2, self.gas_price, self.gas_limit, func, False) time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states_list = Event.get_states_by_contract_address( event, hex_contract_address) states_list[0][0] = NeoData.to_utf8_str(states_list[0][0]) self.assertEqual('transfer', states_list[0][0]) states_list[0][1] = NeoData.to_b58_address(states_list[0][1]) self.assertEqual(acct1.get_address().b58encode(), states_list[0][1]) states_list[0][2] = NeoData.to_b58_address(states_list[0][2]) self.assertEqual(acct2.get_address().b58encode(), states_list[0][2]) states_list[0][3] = NeoData.to_int(states_list[0][3]) self.assertEqual(value1, states_list[0][3]) states_list[1][0] = NeoData.to_utf8_str(states_list[1][0]) self.assertEqual('transfer', states_list[1][0]) states_list[1][1] = NeoData.to_b58_address(states_list[1][1]) self.assertEqual(acct2.get_address().b58encode(), states_list[1][1]) states_list[1][2] = NeoData.to_b58_address(states_list[1][2]) self.assertEqual(acct3.get_address().b58encode(), states_list[1][2]) states_list[1][3] = NeoData.to_int(states_list[1][3]) self.assertEqual(value2, states_list[1][3])
def decode_neo_raw_data(data: str, d_type: str): if d_type.lower() == 'hex': return NeoData.to_hex_str(data) if d_type.lower() == 'int': return NeoData.to_int(data) if d_type.lower() == 'bool': return NeoData.to_bool(data) if d_type.lower() == 'utf8': return NeoData.to_utf8_str(data) if d_type.lower() == 'dict': return NeoData.to_dict(data) if d_type.lower() == 'bytes': return NeoData.to_bytes(data) if d_type.lower() == 'address': return NeoData.to_b58_address(data) return data
def to_b58_address_cmd(ctx, data: str): """ Decode Hex string to Base58 encode string. """ echo(NeoData.to_b58_address(data))