Example #1
0
    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)
Example #2
0
    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))
Example #3
0
    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()
Example #5
0
    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)
Example #6
0
    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))
Example #7
0
    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])
Example #8
0
    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)
Example #10
0
    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)
Example #11
0
    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)
Example #12
0
    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)