Example #1
0
def apply(receiver, code, action):
    if action == N('sayhello'):
        from hello import sayhello
        sayhello.sayHello('mike')
    elif action == N('setcode'):
        data = read_action()
        #        print(struct.unapck)
        code_account, code_name, code_type = struct.unpack('QQB', data[:17])
        src_code = eoslib.unpack_bytes(data[17:])
        eoslib.set_code_ext(code_account, 1, code_name, src_code)
    elif action == N('auth'):
        data = read_action()
        code_owner, code_name, auth_to = struct.unpack('QQQ', data)
        code = N('eosio.code')
        scope = code
        itr = db.find_i64(code, code_owner, auth_to, code_name)
        print(itr)
        if itr >= 0:
            return
        payer = code_owner
        db.store_i64(code_owner, auth_to, payer, code_name, b'1')
    elif action == N('unauth'):
        data = read_action()
        code_owner, code_name, auth_to = struct.unpack('QQQ', data)
        code = N('eosio.code')
        scope = code
        itr = db.find_i64(code, code_owner, auth_to, code_name)
        if itr >= 0:
            db.remove_i64(itr)
    elif action == N('import'):
        from eosio.code import hello
Example #2
0
File: t.py Project: beaquant/pyeos
def deploy_mpy():
    src_dir = os.path.dirname(os.path.abspath(__file__))
    code = eosapi.N('backyard')
    for file_name in libs:
        print('deploy ', file_name)
        src_code = eosapi.mp_compile(os.path.join(src_dir, file_name))
        file_name = file_name.replace('.py', '.mpy')
        src_id = eosapi.hash64(file_name, 0)
        itr = db.find_i64(code, code, code, src_id)
        if itr >= 0:
            #Something went wrong in mp_compile.
            #Generating different bytecode each time with the same source code, walkaround this problem for now
            continue 
            old_src = db.get_i64(itr)
            if old_src[1:] == src_code:
                continue
        mod_name = file_name
        msg = int.to_bytes(len(mod_name), 1, 'little')
        msg += mod_name.encode('utf8')
        msg += int.to_bytes(1, 1, 'little') # compiled python bytecode
        msg += src_code

        print('++++++++++++++++deply:', file_name)
        r = eosapi.push_action('backyard','deploy',msg,{'backyard':'active'})
        assert r
Example #3
0
 def load(self):
     it = db.find_i64(self.code, self.scope, self.table_id,
                      self.get_primary_key())
     if it >= 0:
         data = db.get_i64(it)
         return self.unpack(data)
     return False
Example #4
0
    def __init__(self, _code, table_id=None, value_type=None):
        self.code = _code
        self._dict = {}
        if table_id:
            self.table_id = table_id
        else:
            SList.table_counter += 1
            table_id = hash64('list.%d' % (SList.table_counter, ))

#        print('current_receiver:', n2s(code))

        self.list_size_id = hash64('list.size%d')

        itr = db.find_i64(self.code, self.code, table_id, self.list_size_id)
        if itr >= 0:
            self.list_size = db.get_i64(itr)
            self.list_size = int.from_bytes(self.list_size, 'little')
        else:
            self.list_size = 0

        self.value_type = value_type

        itr = db.end_i64(self.code, self.code, table_id)
        if itr == -1:  #no value in table
            return
Example #5
0
def apply(receiver, code, action):
    print(n2s(code), n2s(action))
    if action == N('deploy'):
        require_auth(code)
        msg = read_action()
        print('++++++len(msg):', len(msg))
        scope = int.from_bytes(msg[:8], 'little')
        table = int.from_bytes(msg[8:16], 'little')
        id = int.from_bytes(msg[16:24], 'little')
        data = msg[24:]
        deploy(scope, table, id, data)
    elif action == N('delete'):
        require_auth(code)
        vm_name = read_action()
        vm_name = int.from_bytes(vm_name, 'little')
        itr = db.find_i64(code, code, code, vm_name)
        print('+++++++++++:', itr)
        if itr >= 0:
            db.remove_i64(itr)
        while True:
            itr = db.end_i64(code, code, vm_name)
            print('+++++++++++ end_i64 :', itr)
            if itr == -1:
                break
            itr, primary = db.previous_i64(itr)
            print('+++++++++++ previous_i64 :', itr)
            db.remove_i64(itr)
Example #6
0
def deploy(account, src_code):
    code = N('native')
    print('++++++++++++deploy:account', account)
    itr = db.find_i64(code, code, code, account)
    if itr < 0:
        db.store_i64(code, code, code, account, src_code)
    else:
        db.update_i64(itr, code, src_code)
Example #7
0
def deploy(mod_name, src_code):
    code = N('kitties')
    print('++++++++++++deploy:mod_name', mod_name)
    id = hash64(mod_name)
    itr = db.find_i64(code, code, code, id)
    if itr < 0:
        db.store_i64(code, code, code, id, src_code)
    else:
        db.update_i64(itr, code, src_code)

    if mod_name.endswith('.mpy'):
        #try to remove py source to prevent micropython loading the wrong source
        mod_name = mod_name[:-3] + 'py'
        id = hash64(mod_name)
        itr = db.find_i64(code, code, code, id)
        if itr >= 0:
            db.remove_i64(itr)
Example #8
0
 def store(self, payer):
     it = db.find_i64(self.code, self.scope, self.table_id,
                      self.get_primary_key())
     if it >= 0:
         db.update_i64(it, payer, self.pack())
     else:
         db.store_i64(self.scope, self.table_id, payer,
                      self.get_primary_key(), self.pack())
Example #9
0
 def remove(self, index):
     print('+++append:', value)
     itr = db.find_i64(self.code, self.scope, self.table_id, index)
     if itr <= 0:
         raise Exception('index not found', index)
     db.remove_i64(itr)
     self.count -= 1
     print('+++append return:', self.count)
Example #10
0
def load(key):
    id = get_hash(key)
    itr = db.find_i64(receiver, receiver, g_table_id, id)
    value = None
    if itr >= 0:
        value = db.get_i64(itr)
        return from_raw_value(value)
    return None
Example #11
0
 def update_size(self):
     _value = int.to_bytes(self.list_size, 4, 'little')
     itr = db.find_i64(self.code, self.code, self.table_id,
                       self.list_size_id)
     if itr < 0:
         db.store_i64(self.code, self.table_id, self.code,
                      self.list_size_id, _value)
     else:
         db.update_i64(itr, self.code, _value)
Example #12
0
def deploy(scope, table, id, data):
    code = N('vmstore')
    payer = code
    print('++++++++++++deploy:scope', n2s(scope), n2s(table))
    itr = db.find_i64(code, scope, table, id)
    if itr < 0:
        db.store_i64(scope, table, payer, id, data)
    else:
        db.update_i64(itr, payer, data)
Example #13
0
def store(key, value):
    id = get_hash(key)
    value = to_raw_value(value)
    code = contract_owner
    itr = db.find_i64(receiver, receiver, g_table_id, id)
    if itr >= 0:
        value = db.update_i64(itr, receiver, value)
    else:
        db.store_i64(receiver, g_table_id, receiver, id, value)
Example #14
0
 def __getitem__(self, index):
     if index < 0 or index >= self.count:
         raise IndexError('list index out of range')
     print('index', index)
     itr = db.find_i64(self.code, self.scope, self.table_id, index)
     if itr < 0:
         raise Exception('index not found!')
     print('index', index, 'it', itr)
     value = db.get_i64(itr)
     return self.unpack(value)
Example #15
0
def test2(count=100):
    import time
    import json

    code = N('counter')
    counter_id = N('counter')
    counter_begin = 0
    itr = db.find_i64(code, code, code, counter_id)
    if itr >= 0:
        counter_begin = db.get_i64(itr)
        counter_begin = int.from_bytes(counter_begin, 'little')

    print('counter begin: ', counter_begin)

    actions = []
    for i in range(count):
        action = ['hello', 'sayhello', {'hello':'active'}, str(i)]
        actions.append(action)

    ret, cost = eosapi.push_actions(actions, True)
    assert ret
    print('total cost time:%.3f s, cost per action: %.3f ms, actions per second: %.3f'%(cost/1e6, cost/count/1000, 1*1e6/(cost/count)))
    eosapi.produce_block()
    
    actions = []
    for i in range(count):
        action = ['counter', 'count', {'counter':'active'}, str(i)]
        actions.append(action)

    ret, cost = eosapi.push_actions(actions, True)
    assert ret
    print('total cost time:%.3f s, cost per action: %.3f ms, actions per second: %.3f'%(cost/1e6, cost/count/1000, 1*1e6/(cost/count)))
    eosapi.produce_block()

    counter_end = 0
    itr = db.find_i64(code, code, code, counter_id)
    if itr >= 0:
        counter_end = db.get_i64(itr)
        counter_end = int.from_bytes(counter_end, 'little')
    print('counter end: ', counter_end)
    assert counter_begin + count == counter_end
Example #16
0
    def setitem(self, index, val):
        id = index
        if self.value_type:
            _value = self.value_type.pack(val)
        else:
            _value = self.pack(val)

        itr = db.find_i64(self.code, self.code, self.table_id, id)
        if itr < 0:
            db.store_i64(self.code, self.table_id, self.code, id, _value)
        else:
            db.update_i64(itr, self.code, _value)
Example #17
0
    def __getitem__(self, index):
        if index < 0 or index >= self.list_size:
            raise IndexError('list assignment index out of range')
        if index in self._dict:
            return self._dict[index]

        itr = db.find_i64(self.code, self.code, self.table_id, index)
        if itr >= 0:
            value = db.get_i64(itr)
            value = self.unpack(value)
            self._dict[index] = value
            return value
        raise Exception('unkown error!')  # code should never go here!
Example #18
0
def count():
    code = N('counter')
    counter_id = N('counter')

    itr = db.find_i64(code, code, code, counter_id)
    if itr >= 0: # value exists, update it
        counter = db.get_i64(itr)
#        print('old counter', int.from_bytes(counter, 'little'))
        counter = int.from_bytes(counter, 'little')
        counter += 1
        counter = int.to_bytes(counter, 4, 'little')
        db.update_i64(itr, code, counter)
    else:
        counter = int.to_bytes(1, 4, 'little')
        db.store_i64(code, code, code, counter_id, counter)

    itr = db.find_i64(code, code, code, N('msg'))
    if itr >= 0: # value exists, update it
        counter = db.get_i64(itr)
        db.update_i64(itr, code, b'py')
    else:
        db.store_i64(code, code, code, N('msg'), b'py')
Example #19
0
def test(name=None):
    code = N('counter')
    counter_id = N('counter')
    counter_begin = 0
    itr = db.find_i64(code, code, code, counter_id)
    if itr >= 0:
        counter_begin = db.get_i64(itr)
        counter_begin = int.from_bytes(counter_begin, 'little')

    print('counter begin: ', counter_begin)

    with producer:
        r = eosapi.push_action('counter', 'count', '', {'counter':'active'})
        assert r

    counter_end = 0
    itr = db.find_i64(code, code, code, counter_id)
    if itr >= 0:
        counter_end = db.get_i64(itr)
        counter_end = int.from_bytes(counter_end, 'little')

    print('counter end: ', counter_end)

    assert counter_begin + 1 == counter_end
Example #20
0
def deploy(mod_name, src_code):
    code = N('backyard')
    print('++++++++++++deploy:mod_name', mod_name)
    id = hash64(mod_name)
    itr = db.find_i64(code, code, code, id)
    if itr < 0:
        db.store_i64(code, code, code, id, src_code)
    else:
        db.update_i64(itr, code, src_code)

    mod_name = mod_name.decode('utf8')
    if mod_name.endswith('.mpy'):
        __import__('backyard.' + mod_name[:-4])
    elif mod_name.endswith('.py'):
        __import__('backyard.' + mod_name[:-3])
Example #21
0
def sayHello():
    n = N('hello')
    id = N('name')

    name = read_action()
    print('hello', name)
    code = n
    scope = n
    table = n
    payer = n
    itr = db.find_i64(code, scope, table, id)
    if itr >= 0: # value exist, update it
        old_name = db.get_i64(itr)
        print('hello,', old_name)
        db.update_i64(itr, payer, name)
    else:
        db.store_i64(scope, table, payer, id, name)
Example #22
0
def test2(count=100):
    actions = []
    for i in range(count):
        action = ['greeter', 'setgreeting', str(i), {'greeter':'active'}]
        actions.append(action)

    ret, cost = eosapi.push_actions(actions, True)
    assert ret
    print('total cost time:%.3f s, cost per action: %.3f ms, actions per second: %.3f'%(cost/1e6, cost/count/1000, 1*1e6/(cost/count)))
    eosapi.produce_block()

    code = eosapi.N('greeter')
    id = eosapi.hash64('greeting', 0)
    greeting = 0
    itr = db.find_i64(code, code, code, id)
    if itr >= 0:
        greeting = db.get_i64(itr)
        print(greeting[1:])
Example #23
0
File: t.py Project: beaquant/pyeos
def deploy():
    src_dir = os.path.dirname(os.path.abspath(__file__))

    code = eosapi.N('backyard')
    for file_name in libs:
        src_code = open(os.path.join(src_dir, file_name), 'rb').read()
        src_id = eosapi.hash64(file_name, 0)
        itr = db.find_i64(code, code, code, src_id)
        if itr >= 0:
            old_src = db.get_i64(itr)
            if old_src[1:] == src_code:
                continue
        mod_name = file_name
        msg = int.to_bytes(len(mod_name), 1, 'little')
        msg += mod_name.encode('utf8')
        msg += int.to_bytes(0, 1, 'little') # source code
        msg += src_code
    
        print('++++++++++++++++deply:', file_name)
        r = eosapi.push_action('backyard','deploy',msg,{'backyard':'active'})
        assert r

    producer.produce_block()
Example #24
0
File: t.py Project: beaquant/pyeos
def deploy_wast():
    src_dir = os.path.dirname(os.path.abspath(__file__))
    code = eosapi.N('backyard')
    for file_name in ('math.wast',):
        print('deploy ', file_name)
        bin_code = None
        with open(os.path.join(src_dir, file_name), 'rb') as f:
            bin_code = eosapi.wast2wasm(f.read())

        src_id = eosapi.hash64(file_name, 0)
        itr = db.find_i64(code, code, code, src_id)
        if itr >= 0:
            old_src = db.get_i64(itr)
            if old_src[1:] == bin_code:
                continue
        mod_name = file_name
        msg = int.to_bytes(len(mod_name), 1, 'little')
        msg += mod_name.encode('utf8')
        msg += int.to_bytes(3, 1, 'little')# compiled cpp bytecode
        msg += bin_code
        print(msg)
        print('++++++++++++++++deply:', file_name)
        r = eosapi.push_action('backyard','deploy',msg,{'backyard':'active'})
        assert r
Example #25
0
 def erase(self):
     it = db.find_i64(self.code, self.scope, self.table_id,
                      self.get_primary_key())
     if it >= 0:
         db.remove_i64(it)
Example #26
0
def storage_remove(code, table_id, key):
    itr = db.find_i64(code, code, table_id, key)
    if itr >= 0:
        db.remove_i64(itr)
Example #27
0
def storage_set(code, table_id, key, value):
    itr = db.find_i64(code, code, table_id, key)
    if itr >= 0:
        db.update_i64(itr, code, value)
    else:
        db.store_i64(code, table_id, code, key, value)
Example #28
0
def storage_find(code, table_id, id):
    itr = db.find_i64(code, code, table_id, id)
    if itr >= 0:
        return db.get_i64(itr)
    return None