def test_Runtime(self): dispatched_events = [] dispatched_logs = [] def on_notif(evt): dispatched_events.append(evt) def on_log(evt): dispatched_logs.append(evt) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notif) events.on(SmartContractEvent.RUNTIME_LOG, on_log) output = Compiler.instance().load( '%s/boa_test/example/blockchain/RuntimeTest.py' % TestContract.dirname).default out = output.write() tx, results, total_ops, engine = TestBuild(out, ['get_time', 1], self.GetWallet1(), '0202', '02') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetByteArray(), bytearray(b'\x01r\x04Z')) tx, results, total_ops, engine = TestBuild(out, [ 'check_witness', bytearray(b'S\xefB\xc8\xdf!^\xbeZ|z\xe8\x01\xcb\xc3\xac/\xacI)') ], self.GetWallet1(), '02', '02') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBoolean(), True) tx, results, total_ops, engine = TestBuild(out, ['log', 'hello'], self.GetWallet1(), '02', '02') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBoolean(), True) self.assertEqual(len(dispatched_logs), 1) self.assertEqual(dispatched_logs[0].event_payload.Value, 'hello') tx, results, total_ops, engine = TestBuild(out, ['notify', 1234], self.GetWallet1(), '02', '02') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBoolean(), True) self.assertEqual(len(dispatched_events), 1) self.assertEqual( int.from_bytes(dispatched_events[0].event_payload.Value, 'little'), 1234) tx, results, total_ops, engine = TestBuild(out, ['get_trigger', 1234], self.GetWallet1(), '02', '02') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBigInteger(), 16) events.off(SmartContractEvent.RUNTIME_NOTIFY, on_notif) events.off(SmartContractEvent.RUNTIME_LOG, on_log)
def test_build_contract_and_destroy(self): items = [] destroyed_items = [] def on_created(sc_event): items.append(sc_event) def on_destroyed(sc_event): destroyed_items.append(sc_event) events.on(SmartContractEvent.CONTRACT_CREATED, on_created) events.on(SmartContractEvent.CONTRACT_DESTROY, on_destroyed) output = Compiler.instance().load('%s/MigrateTest1.py' % os.path.dirname(__file__)).default script = output.write() tx, results, total_ops, engine = TestBuild( script, ['store_data', bytearray(b'\x10')], self.GetWallet1(), '0705', '05') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBoolean(), True) self.assertEqual(len(items), 1) created_hash = items[0].contract_hash.ToBytes() script_table = engine._Table self.assertIsNotNone(script_table.GetScript(created_hash)) tx, results, total_ops, engine = TestBuild( script, ['get_data', bytearray(b'\x10')], self.GetWallet1(), '0705', '05') self.assertEqual(len(results), 1) mylist = results[0].GetArray() self.assertEqual([item.GetByteArray() for item in mylist], [ bytearray(b'\x01'), bytearray(b'abc'), bytearray(b'\x01\x02\x03') ]) tx, results, total_ops, engine = TestBuild( script, ['do_destroy', bytearray(b'\x10')], self.GetWallet1(), '0705', '05') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBoolean(), True) self.assertEqual(len(destroyed_items), 1) destroyed_hash = destroyed_items[0].contract_hash.ToBytes() script_table = engine._Table self.assertIsNone(script_table.GetScript(destroyed_hash))
def setUpClass(cls): super(TestContract, cls).setUpClass() def on_notif(evt): print(evt) cls.dispatched_events.append(evt) print("dispatched events %s " % cls.dispatched_events) def on_log(evt): print(evt) cls.dispatched_logs.append(evt) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notif) events.on(SmartContractEvent.RUNTIME_LOG, on_log)
def setUpClass(cls): super(TestContract, cls).setUpClass() def on_notif(evt): print(evt) cls.dispatched_events.append(evt) print("dispatched events %s " % cls.dispatched_events) def on_log(evt): print(evt) cls.dispatched_logs.append(evt) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notif) events.on(SmartContractEvent.RUNTIME_LOG, on_log) cls.snapshot = GetBlockchain()._db.createSnapshot()
def setUpClass(cls): super(TestContract, cls).setUpClass() cls.dirname = '/'.join(os.path.abspath(__file__).split('/')[:-2]) def on_notif(evt): print(evt) cls.dispatched_events.append(evt) print("dispatched events %s " % cls.dispatched_events) def on_log(evt): print(evt) cls.dispatched_logs.append(evt) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notif) events.on(SmartContractEvent.RUNTIME_LOG, on_log)
def setUpClass(cls): super(TestContract, cls).setUpClass() def on_notif(evt): print(evt) cls.dispatched_events.append(evt) print("dispatched events %s " % cls.dispatched_events) def on_log(evt): print(evt) cls.dispatched_logs.append(evt) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notif) events.on(SmartContractEvent.RUNTIME_LOG, on_log) print("1:{}\n2:{}\n3:{}\n".format(BoaFixtureTest.wallet_1_script_hash.Data, BoaFixtureTest.wallet_2_script_hash.Data, BoaFixtureTest.wallet_3_script_hash.Data))
def test_c_sharp_storage_find(self): """ test that c# compiled storage find contract works as expected """ events_emitted = [] def on_notify(sc_event): events_emitted.append(sc_event) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notify) tx, results, total_ops, engine = TestBuild(self.script, [], self.GetWallet1(), '', 'ff') self.assertEqual(results, []) self.assertEqual(len(events_emitted), 4) self.assertEqual([b'Starting', b'my_prefixA', b'my_prefixB', b'Done'], [event.event_payload.Value[0].Value for event in events_emitted])
def test_c_sharp_storage_find(self): """ test that c# compiled storage find contract works as expected """ events_emitted = [] def on_notify(sc_event): events_emitted.append(sc_event) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notify) tx, results, total_ops, engine = TestBuild(self.script, [], self.GetWallet1(), '', 'ff') self.assertEqual(results, []) self.assertEqual(len(events_emitted), 4) self.assertEqual([b'Starting', b'my_prefixA', b'my_prefixB', b'Done'], [event.event_payload[0] for event in events_emitted])
def setUp(self): self.dispatched_events = [] self.execution_success = False events.on(SmartContractEvent.RUNTIME_NOTIFY, self.on_info_event) events.on(SmartContractEvent.RUNTIME_LOG, self.on_info_event) events.on(SmartContractEvent.EXECUTION, self.on_execution)
def setUp(self): self.dispatched_events = [] self.execution_success = False events.on(SmartContractEvent.RUNTIME_NOTIFY, self.on_info_event) events.on(SmartContractEvent.RUNTIME_LOG, self.on_info_event) events.on(SmartContractEvent.EXECUTION, self.on_execution)
def test_Event1(self): dispatched_events = [] def on_notif(evt): dispatched_events.append(evt) events.on(SmartContractEvent.RUNTIME_NOTIFY, on_notif) output = Compiler.instance().load( '%s/boa_test/example/blockchain/EventTest.py' % TestContract.dirname).default out = output.write() tx, results, total_ops, engine = TestBuild(out, [], self.GetWallet1(), '', '07') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBigInteger(), 7) events.off(SmartContractEvent.RUNTIME_NOTIFY, on_notif) self.assertEqual(len(dispatched_events), 2) transfer_event_payload = dispatched_events[0].event_payload payload = transfer_event_payload.Value self.assertEqual(len(payload), 4) self.assertEqual(payload[0].Value, b'transfer_test') self.assertEqual(payload[1].Value, '2') self.assertEqual(payload[2].Value, '5') self.assertEqual(payload[3].Value, '7') refund_event_payload = dispatched_events[1].event_payload.Value self.assertEqual(len(refund_event_payload), 3) self.assertEqual(refund_event_payload[0].Value, b'refund') self.assertEqual(refund_event_payload[1].Value, b'me') self.assertEqual( int.from_bytes(refund_event_payload[2].Value, 'little'), 52)
def test_build_contract_and_migrate(self): items = [] migrated_items = [] def on_created(sc_event): items.append(sc_event) def on_migrated(sc_event): migrated_items.append(sc_event) events.on(SmartContractEvent.CONTRACT_CREATED, on_created) events.on(SmartContractEvent.CONTRACT_MIGRATED, on_migrated) output = Compiler.instance().load('%s/MigrateTest1.py' % os.path.dirname(__file__)).default script = output.write() tx, results, total_ops, engine = TestBuild( script, ['store_data', bytearray(b'\x10')], self.GetWallet1(), '0705', '05') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBoolean(), True) self.assertEqual(len(items), 1) created_hash = items[0].contract_hash.ToBytes() script_table = engine._Table self.assertIsNotNone(script_table.GetScript(created_hash)) migrateScript = Compiler.instance().load( '%s/MigrateTest2.py' % os.path.dirname(__file__)).default.write() tx, results, total_ops, engine = TestBuild( script, ['do_migrate', migrateScript], self.GetWallet1(), '0705', '05') self.assertEqual(len(results), 1) new_contract = results[0].GetInterface() self.assertIsInstance(new_contract, ContractState) self.assertEqual(len(migrated_items), 1) self.assertEqual(new_contract, migrated_items[0].event_payload[0]) # now make sure the original contract isnt there script_table = engine._Table self.assertIsNone(script_table.GetScript(created_hash)) # and make sure the new one is there migrated_hash = migrated_items[0].contract_hash self.assertIsNotNone(script_table.GetScript(migrated_hash.ToBytes())) # now make sure the new contract has the same storage tx, results, total_ops, engine = TestBuild(migrateScript, ['i1'], self.GetWallet1(), '07', '05') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetByteArray(), bytearray(b'\x01')) tx, results, total_ops, engine = TestBuild(migrateScript, ['s2'], self.GetWallet1(), '07', '05') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetByteArray(), bytearray(b'hello world')) tx, results, total_ops, engine = TestBuild(migrateScript, ['i4'], self.GetWallet1(), '07', '05') self.assertEqual(len(results), 1) self.assertEqual(results[0].GetBigInteger(), 400000000000)