andelf / tronpy

TRON Python Client Library.
MIT License
204 stars 96 forks source link

Function get_function_by_selector returning None #117

Closed d1ksim closed 10 months ago

d1ksim commented 10 months ago
contract = await self.client.get_contract(TRC20_CONTRACT_ADDRESS)
        txn = await contract.functions.transfer(to_address, sun)
        with_owner = await txn.with_owner(owner_address).fee_limit(5_000_000).build()

        value = with_owner.to_json()["raw_data"]["contract"][0]["parameter"]["value"]
        data = bytes.fromhex(value['data'])

        function = contract.get_function_by_selector(data[4:])  # Returning None
        params = trx_abi.decode(["address", "uint256"], data[4:])

I want to use function._prepare_parameter(*params), but I get None in function

d1ksim commented 10 months ago

I fixed it and did so, but I get REVERT opcode executed

contract = await self.client.get_contract(TRC20_CONTRACT_ADDRESS)
        txn = await contract.functions.transfer(to_address, amount * 1000000)
        with_owner = await txn.with_owner(owner_address).fee_limit(25_000_000).build()

        value = with_owner.to_json()["raw_data"]["contract"][0]["parameter"]["value"]
        data = bytes.fromhex(value['data'])

        function = contract.get_function_by_selector(data[:4])
        params = trx_abi.decode(["address", "uint256"], data[4:])

        await self.client.trigger_constant_contract(
            owner_address=owner_address,
            contract_address=TRC20_CONTRACT_ADDRESS,
            function_selector='transfer (address, uint256)',
            parameter=function._prepare_parameter(*params)
        )