Esempio n. 1
0
def get_logs(filter: Dict) -> List:
    # {
    #     "fromBlock":"0x6341",
    #     "toBlock":"latest",
    #     "address":"0xce2951d57b56a928b75f577f0dd53bcf0843fdf6",
    #     "topics":[
    #         "0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82",
    #         "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae",
    #     ],
    # }
    from_block = int(filter['fromBlock'], 0)
    to_block = filter['toBlock']
    to_block = None if to_block == 'latest' else int(to_block, 0)
    address = filter['address']
    topics = filter['topics']
    if isinstance(topics[0], list):
        topics = topics[0]
    # {
    #   "logIndex": "0x1", // 1
    #   "blockNumber":"0x1b4", // 436
    #   "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
    #   "transactionHash":  "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
    #   "transactionIndex": "0x0", // 0
    #   "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
    #   "data":"0x0000000000000000000000000000000000000000000000000000000000000000",
    #   "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
    # }
    logs = send_jsonrpc(
        polyjuice_rpc_url,
        'get_logs',
        [from_block, to_block, address, topics, None],
    )
    return [{
        'logIndex':
        '0x1',
        'blockNumber':
        hex(info['block_number']),
        'blockHash':
        send_jsonrpc(ckb_rpc_url, 'get_block_hash',
                     [hex(info['block_number'])]),
        'transactionHash':
        '0x3333111111111111111111111111111111111111111111111111111111333333',
        'transactionIndex':
        hex(info['tx_index']),
        'address':
        info['log']['address'],
        'data':
        info['log']['data'],
        'topics':
        info['log']['topics'],
    } for info in logs]
Esempio n. 2
0
def get_code(address: str, tag: Union[int, str]) -> str:
    address = address.lower()
    print(address, tag)
    if address == '0x0000000000000000000000000000000000000000':
        return '0x'
    else:
        return send_jsonrpc(polyjuice_rpc_url, 'get_code', [address])['code']
Esempio n. 3
0
def send_transaction(tx: Dict) -> str:
    # {
    #     "from": "0xc8328aabcd9b9e8e64fbc566c4385c3bdeb219d7",
    #     "data": "0xf14fcbc8c60fbd965d0b23eef5aea591a101ede8911c60d31776b9ab524cd20c594f155d",
    #     "to": "0xC20E5Fa5A5D92915452bf27BeB7D06E7CeC75652",
    #     "gas": "0x1"
    # }
    sender = tx['from'].lower()
    contract_address = tx['to'].lower()
    input_data = tx['data'].lower()
    value = int(tx.get('value', '0x0'), base=16)
    receipt = call_contract(polyjuice_rpc_url,
                            contract_address,
                            input_data,
                            sender=SENDER1,
                            value=value)
    commit_tx(
        target_dir,
        ckb_bin_path,
        ckb_dir,
        ckb_rpc_url,
        privkey1_path,
        receipt,
        polyjuice_rpc_url,
        'call-{}-{}'.format(contract_address, input_data)[:60],
    )
    tx_hash = receipt['tx_hash']
    block_hash = send_jsonrpc(ckb_rpc_url, 'get_transaction',
                              [tx_hash])['tx_status']['block_hash']
    tx_receipts[tx_hash] = {
        'receipt': receipt,
        'block_hash': block_hash,
        'header': send_jsonrpc(ckb_rpc_url, 'get_header', [block_hash]),
        'sender': sender,
        'contract_address': contract_address,
        'input_data': input_data,
    }
    return receipt['tx_hash']
Esempio n. 4
0
def get_block_by_hash(block_hash: str, full_tx: bool) -> Dict:
    result = send_jsonrpc(ckb_rpc_url, 'get_block', [block_hash])
    return make_eth_block(result)
Esempio n. 5
0
def get_block_by_number(number: str, full_tx: bool) -> Dict:
    if number == 'latest':
        number = send_jsonrpc(ckb_rpc_url, 'get_tip_block_number')
    result = send_jsonrpc(ckb_rpc_url, 'get_block_by_number', [number])
    return make_eth_block(result)
Esempio n. 6
0
def tip_number() -> str:
    return send_jsonrpc(ckb_rpc_url, 'get_tip_block_number')
Esempio n. 7
0
def eth_call(program: Dict, tag: Union[int, str]) -> str:
    destination = program['to'].lower()
    data = program['data']
    eoa_account = eoa_accounts[SENDER1][0]
    return send_jsonrpc(polyjuice_rpc_url, 'static_call',
                        [eoa_account, destination, data])['return_data']