Exemplo n.º 1
0
def call_mpy_with_setcode(sign=True):
    _src_dir = os.path.dirname(__file__)
    actions = []
    for i in range(TRX_COUNT):
        code = struct.pack('QBB', N('actiontest'), 1, 0)
        py_file = os.path.join(_src_dir, 'actiontest.py')
        with open(py_file, 'rb') as f:
            src_code = f.read()
        src_code += b'\n1==(%d)' % (i, )

        with open(py_file[:-3] + '2.py', 'wb') as f:
            f.write(src_code)

        mpy_code = eosapi.mp_compile(py_file[:-3] + '2.py')
        code += eosapi.pack_bytes(b'\x01' + mpy_code)

        act = [
            N('eosio'),
            N('setcode'), [[N('actiontest'), N('active')]], code
        ]
        setabi_action = gen_setabi_action()
        actions.append([act, setabi_action])

    cost_time = eosapi.push_transactions2(actions, sign)

    start = time.time()
    eosapi.produce_block()
    print('produce_block: ', time.time() - start)

    print(1e6 / (cost_time / TRX_COUNT))
    return 1e6 / (cost_time / TRX_COUNT)
Exemplo n.º 2
0
def init(mpy=True):
    with producer:
        if not eosapi.get_account('backyard').permissions:
            r = eosapi.create_account('eosio', 'backyard', initeos.key1,
                                      initeos.key2)
            assert r

    with producer:
        if mpy:
            with open('../../programs/pyeos/contracts/backyard/backyard.mpy',
                      'wb') as f:
                f.write(
                    eosapi.mp_compile(
                        '../../programs/pyeos/contracts/backyard/backyard.py'))
            r = eosapi.set_contract(
                'backyard',
                '../../programs/pyeos/contracts/backyard/backyard.mpy',
                '../../programs/pyeos/contracts/backyard/backyard.abi', 1)
        else:
            r = eosapi.set_contract(
                'backyard',
                '../../programs/pyeos/contracts/backyard/backyard.py',
                '../../programs/pyeos/contracts/backyard/backyard.abi', 1)
            #        r = eosapi.set_contract('currency', '../../build/contracts/currency/currency.wast', '../../build/contracts/currency/currency.abi',0)
            assert r
Exemplo n.º 3
0
Arquivo: t.py Projeto: 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
Exemplo n.º 4
0
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 = eoslib.db_find_i64(code, code, code, src_id)
        if itr >= 0:
            old_src = eoslib.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 code
        msg += src_code

        print('++++++++++++++++deply:', file_name)
        r = eosapi.push_message('backyard', 'deploy', msg,
                                {'backyard': 'active'})
        assert r

    producer.produce_block()
Exemplo n.º 5
0
Arquivo: t.py Projeto: shuke0327/pyeos
def deploy_contract(currency, contract_type=0):
    if contract_type <= 0:
        return
    if contract_type == 1:
        r = eosapi.set_contract(
            currency, '../../programs/pyeos/contracts/currency/currency.py',
            '../../contracts/currency/currency.abi', 1)
    elif contract_type == 2:
        with open('../../programs/pyeos/contracts/currency/currency.mpy',
                  'wb') as f:
            data = eosapi.mp_compile(
                '../../programs/pyeos/contracts/currency/currency.py')
            f.write(data)
        r = eosapi.set_contract(
            currency, '../../programs/pyeos/contracts/currency/currency.mpy',
            '../../contracts/currency/currency.abi', 1)
    elif contract_type == 3:
        wast = '../../build/contracts/eosio.token/eosio.token.wast'
        key_words = b"hello,world\\00"
        wast = '../../build/contracts/eosio.token/eosio.token.wast'
        with open(wast, 'rb') as f:
            data = f.read()
            #data.find(key_words)
            replace_str = b"%s\\00" % (currency.encode('utf8'), )
            replace_str.zfill(len(key_words))
            #replace key works with custom words to break the effect of code cache mechanism
            data = data.replace(key_words, replace_str)
            with open('currency2.wast', 'wb') as f:
                f.write(data)
        r = eosapi.set_contract(
            currency, 'currency2.wast',
            '../../build/contracts/eosio.token/eosio.token.abi', 0)
    else:
        assert 0
Exemplo n.º 6
0
def test3(count, d=0):
    keys = list(wallet.list_keys().keys())
    for i in range(0, count):
        currency = 'curre'+n2s(i)
#        currency = 'currency'

        key1 = keys[i]
        key2 = keys[10000+i]

        if not eosapi.get_account(currency).permissions:
            r = eosapi.create_account('eosio', currency, key1, key2)
            assert r
        if d:
            if d==1:
                r = eosapi.set_contract(currency,'../../programs/pyeos/contracts/currency/currency.py','../../contracts/currency/currency.abi', 1)
            elif d == 2:
                with open('../../programs/pyeos/contracts/currency/currency.mpy', 'wb') as f:
                    data = eosapi.mp_compile('../../programs/pyeos/contracts/currency/currency.py')
                    f.write(data)
                r = eosapi.set_contract(currency,'../../programs/pyeos/contracts/currency/currency.mpy','../../contracts/currency/currency.abi', 1)
            elif d == 3:
                wast = '../../build/contracts/currency/currency.wast'
                key_words = b"hello,world\\00"
                wast = '../../build/contracts/currency/currency.wast'
                with open(wast, 'rb') as f:
                    data = f.read()
                    #data.find(key_words)
                    replace_str = b"%s\\00"%(currency.encode('utf8'),)
                    replace_str.zfill(len(key_words))
                    #replace key works with custom words to break the effect of code cache mechanism
                    data = data.replace(key_words, replace_str)
                    with open('currency2.wast', 'wb') as f:
                        f.write(data)
                r = eosapi.set_contract(currency, 'currency2.wast', '../../build/contracts/currency/currency.abi',0)
            else:
                assert 0

    eosapi.produce_block()

    accounts = []
    functions = []
    args = []
    per = []
    
    for i in range(0, count):
        currency = 'curre'+n2s(i)
        accounts.append(currency)
        per.append({currency:'active'})
        functions.append('issue')
        arg = str(i)
        args.append({"to":currency,"quantity":"1000.0000 CUR","memo":""})
    ret = eosapi.push_messages(accounts, functions, args, per, True, rawargs=False)

    assert ret
    if ret:
        cost = ret['cost_time']
    eosapi.produce_block()

    print('total cost time:%.3f s, cost per action: %.3f ms, actions per second: %.3f'%(cost/1e6, cost/count/1000, 1*1e6/(cost/count)))
Exemplo n.º 7
0
def deploy_mpy():
    src_dir = os.path.dirname(os.path.abspath(__file__))
    file_name = 'hello.py'

    src_code = eosapi.mp_compile(os.path.join(src_dir, file_name))
    file_name = file_name.replace('.py', '.mpy')
    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 code
    msg += src_code

    print('++++++++++++++++deply:', file_name)
    r = eosapi.push_action('kitties', 'deploy', msg, {'kitties': 'active'})
    assert r
Exemplo n.º 8
0
def prepare_(name, src, abi, full_src_path):
    _src_dir = os.path.dirname(os.path.abspath(full_src_path))
    if src.endswith('.wast'):
        code_type = CODE_TYPE_WAST
    elif src.endswith('.py'):
        code_type = CODE_TYPE_PY
    else:
        raise Exception('unknown code type')

    if code_type == 0:
        cpp2wast.set_src_path(_src_dir)
        cpp_src_file = src.replace('.wast', '.cpp')
        if not cpp2wast.build(cpp_src_file):
            raise Exception("build {0} failed".format(cpp_src_file))

    if src.find('/') < 0:
        src = os.path.join(_src_dir, src)

    if abi and abi.find('/') < 0:
        abi = os.path.join(_src_dir, abi)

    if not eosapi.get_account(name):
        print('*' * 20, 'create_account')
        r = eosapi.create_account('eosio', name, initeos.key1, initeos.key2)
        assert r

    old_code = eosapi.get_code(name)
    need_update = True
    if old_code:
        old_code = old_code[0]
        with open(src, 'rb') as f:
            code = f.read()
        if code_type == CODE_TYPE_WAST:
            code = eosapi.wast2wasm(code)
            old_code = eosapi.wast2wasm(old_code)
            if code == old_code:
                need_update = False
        elif CODE_TYPE_PY == code_type:
            code = eosapi.mp_compile(src)
            if code == old_code[1:]:
                need_update = False
        elif (code == old_code[1:] or code == old_code):
            need_update = False

    if need_update:
        print('Updating contract', src)
        r = eosapi.set_contract(name, src, abi, code_type)
        assert r, 'set_contract failed'
Exemplo n.º 9
0
    def deploy_mpy(self, file_name):
        _abs_file_path = os.path.join(self.src_dir, file_name)
        if not self.need_update(self.src_dir, file_name, mpy=True):
            print('++++++++++:', file_name, "up to date")
            return

        src_code = eosapi.mp_compile(_abs_file_path)
        file_name = file_name.replace('.py', '.mpy')
        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 code
        msg += src_code

        print('++++++++++++++++deply:', file_name)
        r = eosapi.push_action(self.account,'deploy',msg,{self.account:'active'})
        assert r
Exemplo n.º 10
0
def deploy_mpy():
    src_dir = '../../programs/pyeos/contracts/hello'
    file_name = 'hello.py'
    
    src_code = eosapi.mp_compile(os.path.join(src_dir, file_name))
    file_name = file_name.replace('.py', '.mpy')
    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 code
    msg += src_code

    print('++++++++++++++++deply:', file_name)
    r = eosapi.push_message('kitties','deploy',msg,{'kitties':'active'},rawargs=True)
    assert r

    producer.produce_block()
Exemplo n.º 11
0
def prepare(name, src, abi, code_type, full_src_path):
    _src_dir = os.path.dirname(os.path.abspath(full_src_path))
    if code_type == 0:
        cpp2wast.set_src_path(_src_dir)
        cpp_src_file = src.replace('.wast', '.cpp')
        if not cpp2wast.build(cpp_src_file):
            raise Exception("build {0} failed".format(cpp_src_file))

    if src.find('/') < 0:
        src = os.path.join(_src_dir, src)

    if abi and abi.find('/') < 0:
        abi = os.path.join(_src_dir, abi)

    if code_type == CODE_TYPE_MPY:
        mpy_file = src[:-3] + '.mpy'
        with open(mpy_file, 'wb') as f:
            f.write(eosapi.mp_compile(src))
        src = mpy_file

    if not eosapi.get_account(name).permissions:
        r = eosapi.create_account('eosio', name, initeos.key1, initeos.key2)
        assert r

    old_code = eosapi.get_code(name)
    need_update = True
    if old_code:
        old_code = old_code[0]
        with open(src, 'rb') as f:
            code = f.read()
        if code_type == CODE_TYPE_WAST:
            code = eosapi.wast2wasm(code)
            old_code = eosapi.wast2wasm(old_code)
            if code == old_code:
                need_update = False
        elif (code == old_code[1:] or code == old_code):
            need_update = False

    if need_update:
        with producer:
            if code_type == 0:
                r = eosapi.set_contract(name, src, abi, 0)
            else:
                r = eosapi.set_contract(name, src, abi, 1)
            assert r, 'set_contract failed'
Exemplo n.º 12
0
def deploy_mpy():
    src_dir = os.path.dirname(os.path.abspath(__file__))
    file_name = 'garden.py'

    src_code = eosapi.mp_compile(os.path.join(src_dir, file_name))
    file_name = file_name.replace('.py', '.mpy')
    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 code
    msg += src_code

    print('++++++++++++++++deply:', file_name)
    r = eosapi.push_message('backyard',
                            'deploy',
                            msg, {'backyard': 'active'},
                            rawargs=True)
    assert r

    producer.produce_block()
Exemplo n.º 13
0
    def deploy_mpy(self, file_name):
        _abs_file_path = os.path.join(self.src_dir, file_name)
        if not self.need_update(self.src_dir, file_name, mpy=True):
            print('++++++++++:', file_name, "up to date")
            return

        src_code = eosapi.mp_compile(_abs_file_path)
        file_name = file_name.replace('.py', '.mpy')
        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 code
        msg += src_code

        print('++++++++++++++++deply:', file_name)
        r = eosapi.push_message('kitties', 'deploy', msg,
                                {'kitties': 'active'})
        assert r

        producer.produce_block()
        time.sleep(0.2)
Exemplo n.º 14
0
    def need_update(self, src_dir, src_file, mpy=False):
        if mpy:
            id = eosapi.hash64(src_file.replace('.py', '.mpy'))
        else:
            id = eosapi.hash64(src_file)

        code = eosapi.N(self.account)
        itr = eoslib.db_find_i64(code, code, code, id)
        if itr < 0:
            return True

        old_src = eoslib.db_get_i64(itr)
        _full_file_path = os.path.join(src_dir, src_file)

        if not mpy:
            with open(_full_file_path, 'rb') as f:
                if old_src[1:] == f.read():
                    return False
        else:
            src_code = eosapi.mp_compile(_full_file_path)
            if old_src[1:] == src_code:
                return False
        return True