Beispiel #1
0
    def test_serialize_basic_types_int8(self):
        self.assertEqual(ABI.serialize('int8', 0x10), b'\0' * 31 + b'\x10')
        self.assertEqual(ABI.deserialize('int8', b'\0' * 31 + b'\x10'), 0x10)

        self.assertEqual(ABI.serialize('int8', -0x10), b'\x00' * 31 + b'\xf0')
        self.assertEqual(ABI.deserialize('int8', b'\x00' * 31 + b'\xf0'),
                         -0x10)
Beispiel #2
0
    def test_serialize_basic_types_int(self):
        self.assertEqual(ABI.serialize('int256', 0x10), '\0' * 31 + '\x10')
        self.assertEqual(ABI.deserialize('int256', '\0' * 31 + '\x10'), 0x10)

        self.assertEqual(ABI.serialize('int256', -0x10), '\xff' * 31 + '\xf0')
        self.assertEqual(ABI.deserialize('int256', '\xff' * 31 + '\xf0'),
                         -0x10)
Beispiel #3
0
 def test_serialize_tuple(self):
     self.assertEqual(ABI.serialize('(int256)', 0x10), b'\0' * 31 + b'\x10')
     self.assertEqual(ABI.serialize('(int256,int256)', 0x10, 0x20),
                      b'\0' * 31 + b'\x10' + b'\0' * 31 + b'\x20')
     self.assertEqual(
         ABI.serialize('(int256,(int256,int256))', 0x10, (0x20, 0x30)),
         b'\0' * 31 + b'\x10' + b'\0' * 31 + b'\x20' + b'\0' * 31 + b'\x30')
Beispiel #4
0
    def test_serialize_basic_types_int16(self):
        self.assertEqual(ABI.serialize('int16', 0x100), '\0' * 30 + '\x01\x00')
        self.assertEqual(ABI.deserialize('int16', '\0' * 30 + '\x01\x00'),
                         0x100)

        self.assertEqual(ABI.serialize('int16', -0x10),
                         '\x00' * 30 + '\xff\xf0')
        self.assertEqual(ABI.deserialize('int16', '\x00' * 30 + '\xff\xf0'),
                         -0x10)
Beispiel #5
0
    def test_serialize_basic_types_uint(self):
        self.assertEqual(ABI.serialize('uint256', 0x10), b'\0' * 31 + b'\x10')
        self.assertEqual(ABI.deserialize('uint256', b'\0' * 31 + b'\x10'), 0x10)

        self.assertEqual(ABI.serialize('uint256', -0x10), b'\xff' * 31 + b'\xf0')
        self.assertEqual(ABI.deserialize('uint256', b'\xff' * 31 + b'\xf0'),
                         0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0)
        self.assertEqual(ABI.deserialize('uint256', b'\xff' * 31 + b'\xf0'),
                         0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0)
        self.assertNotEqual(ABI.deserialize('uint256', b'\xff' * 31 + b'\xf0'), -0x10)
Beispiel #6
0
 def test_simple_types_ints_symbolic1(self):
     cs = ConstraintSet()
     x = cs.new_bitvec(256, name="x")
     # Something is terribly wrong x,y = 10,20
     my_ser = ABI.serialize('uint', x)
     self.assertTrue(
         solver.must_be_true(cs,
                             my_ser[0] == operators.EXTRACT(x, 256 - 8, 8)))
Beispiel #7
0
 def test_simple_types_ints_symbolic(self):
     cs = ConstraintSet()
     x = cs.new_bitvec(256, name="x")
     y = cs.new_bitvec(256, name="y")
     # Something is terribly wrong x,y = 10,20
     my_ser = ABI.serialize('(uint,uint)', x, y)
     x_, y_ = ABI.deserialize('(uint,uint)', my_ser)
     self.assertTrue(solver.must_be_true(cs, x == x_))
     self.assertTrue(solver.must_be_true(cs, y == y_))
Beispiel #8
0
    def test_serialize_bytes_symbolic(self):
        cs = ConstraintSet()
        buf = cs.new_array(index_max=17)
        ret = ABI.serialize('bytes', buf)

        # does the offset field look right?
        self.assertTrue(solver.must_be_true(cs, ret[0:32] == bytearray(b'\x00'*31 + b'\x20')))

        # does the size field look right?
        self.assertTrue(solver.must_be_true(cs, ret[32:64] == bytearray(b'\x00'*31 + b'\x11')))

        # does the data field look right?
        self.assertTrue(solver.must_be_true(cs, ret[64:64+32] == buf + bytearray(b'\x00'*15)))
Beispiel #9
0
 def test_serialize_bytesM_symbolic(self):
     cs = ConstraintSet()
     buf = cs.new_array(index_max=17)
     ret = ABI.serialize('bytes32', buf)
     self.assertEqual(solver.minmax(cs, ret[0]), (0, 255))
     self.assertEqual(solver.minmax(cs, ret[17]), (0, 0))
Beispiel #10
0
 def test_serialize_fixed_bytes_too_big(self):
     with self.assertRaises(EthereumError):
         ABI.serialize('bytes2', b'hii')
Beispiel #11
0
 def test_serialize_fixed_bytes_less_data(self):
     ret = ABI.serialize('bytes4', b'aa')
     self.assertEqual(ret, b'aa'.ljust(32, b'\x00'))
Beispiel #12
0
 def test_serialize_fixed_bytes32(self):
     ret = ABI.serialize('bytes32', b'hi')
     self.assertEqual(ret, b'hi'.ljust(32, b'\x00'))