70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import pydantic
 | 
						|
 | 
						|
from mev_inspect import decode
 | 
						|
from mev_inspect.schemas import abi
 | 
						|
 | 
						|
 | 
						|
def test_decode_function_with_simple_argument():
 | 
						|
    test_function_name = "testFunction"
 | 
						|
    test_parameter_name = "testParameter"
 | 
						|
    test_abi = pydantic.parse_obj_as(
 | 
						|
        abi.ABI,
 | 
						|
        [
 | 
						|
            {
 | 
						|
                "name": test_function_name,
 | 
						|
                "type": "function",
 | 
						|
                "inputs": [{"name": test_parameter_name, "type": "uint256"}],
 | 
						|
            }
 | 
						|
        ],
 | 
						|
    )
 | 
						|
    # 4byte signature of the test function.
 | 
						|
    # https://www.4byte.directory/signatures/?bytes4_signature=0x350c530b
 | 
						|
    test_function_selector = "350c530b"
 | 
						|
    test_function_argument = (
 | 
						|
        "0000000000000000000000000000000000000000000000000000000000000001"
 | 
						|
    )
 | 
						|
    abi_decoder = decode.ABIDecoder(test_abi)
 | 
						|
    call_data = abi_decoder.decode(
 | 
						|
        "0x" + test_function_selector + test_function_argument
 | 
						|
    )
 | 
						|
    assert call_data.function_name == test_function_name
 | 
						|
    assert call_data.function_signature == "testFunction(uint256)"
 | 
						|
    assert call_data.inputs == {test_parameter_name: 1}
 | 
						|
 | 
						|
 | 
						|
def test_decode_function_with_tuple_argument():
 | 
						|
    test_function_name = "testFunction"
 | 
						|
    test_tuple_name = "testTuple"
 | 
						|
    test_parameter_name = "testParameter"
 | 
						|
    test_abi = pydantic.parse_obj_as(
 | 
						|
        abi.ABI,
 | 
						|
        [
 | 
						|
            {
 | 
						|
                "name": test_function_name,
 | 
						|
                "type": "function",
 | 
						|
                "inputs": [
 | 
						|
                    {
 | 
						|
                        "name": test_tuple_name,
 | 
						|
                        "type": "tuple",
 | 
						|
                        "components": [
 | 
						|
                            {"name": test_parameter_name, "type": "uint256"}
 | 
						|
                        ],
 | 
						|
                    }
 | 
						|
                ],
 | 
						|
            }
 | 
						|
        ],
 | 
						|
    )
 | 
						|
    # 4byte signature of the test function.
 | 
						|
    # https://www.4byte.directory/signatures/?bytes4_signature=0x98568079
 | 
						|
    test_function_selector = "98568079"
 | 
						|
    test_function_argument = (
 | 
						|
        "0000000000000000000000000000000000000000000000000000000000000001"
 | 
						|
    )
 | 
						|
    abi_decoder = decode.ABIDecoder(test_abi)
 | 
						|
    call_data = abi_decoder.decode(
 | 
						|
        "0x" + test_function_selector + test_function_argument
 | 
						|
    )
 | 
						|
    assert call_data.function_name == test_function_name
 | 
						|
    assert call_data.function_signature == "testFunction((uint256))"
 | 
						|
    assert call_data.inputs == {test_tuple_name: (1,)}
 |