Skip to content

test_gas_diff_pointer_vs_direct_call()

Documentation for tests/prague/eip7702_set_code_tx/test_set_code_txs_2.py::test_gas_diff_pointer_vs_direct_call@01f496f4.

Generate fixtures for these test cases for Prague with:

fill -v tests/prague/eip7702_set_code_tx/test_set_code_txs_2.py::test_gas_diff_pointer_vs_direct_call --fork Prague

Check the gas difference when calling the contract directly vs as a pointer Combine with AccessList and AuthTuple gas reductions scenarios.

Source code in tests/prague/eip7702_set_code_tx/test_set_code_txs_2.py
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
@pytest.mark.parametrize(
    "access_list_rule",
    [
        AccessListCall.NONE,
        AccessListCall.IN_BOTH_TX,
        AccessListCall.IN_NORMAL_TX_ONLY,
        AccessListCall.IN_POINTER_TX_ONLY,
    ],
)
@pytest.mark.parametrize(
    "pointer_definition",
    [
        PointerDefinition.SEPARATE,
        PointerDefinition.IN_BOTH_TX,
        PointerDefinition.IN_NORMAL_TX_ONLY,
        PointerDefinition.IN_POINTER_TX_ONLY,
    ],
)
@pytest.mark.parametrize(
    "access_list_to",
    [AccessListTo.POINTER_ADDRESS, AccessListTo.CONTRACT_ADDRESS],
)
@pytest.mark.valid_from("Prague")
def test_gas_diff_pointer_vs_direct_call(
    blockchain_test: BlockchainTestFiller,
    pre: Alloc,
    fork: Fork,
    access_list_rule: AccessListCall,
    pointer_definition: PointerDefinition,
    access_list_to: AccessListTo,
):
    """
    Check the gas difference when calling the contract directly vs as a pointer
    Combine with AccessList and AuthTuple gas reductions scenarios.
    """
    env = Environment()

    sender = pre.fund_eoa()
    pointer_a = pre.fund_eoa()
    call_worked = 1
    gas_costs: GasCosts = fork.gas_costs()

    opcodes_price = 37
    direct_call_gas: int = (
        # 20_000 + 2_600 + 2_100 + 37 = 24737
        gas_costs.G_STORAGE_SET
        + (
            # access account price
            # If storage and account is declared in access list then discount
            gas_costs.G_WARM_ACCOUNT_ACCESS + gas_costs.G_WARM_SLOAD
            if access_list_rule in [AccessListCall.IN_NORMAL_TX_ONLY, AccessListCall.IN_BOTH_TX]
            else gas_costs.G_COLD_ACCOUNT_ACCESS + gas_costs.G_COLD_SLOAD
        )
        + opcodes_price
    )

    pointer_call_gas: int = (
        # sstore + addr + addr + sload + op
        # no access list, no pointer, all accesses are hot
        # 20_000 + 2_600 * 2 + 2_100 + 37 = 27_337
        #
        # access list for pointer, pointer is set
        # additional 2_600 charged for access of contract
        # 20_000 + 100 + 2_600 + 100 + 37 = 22_837
        #
        # no access list, pointer is set
        # pointer access is hot, sload and contract are hot
        # 20_000 + 100 + 2_600 + 2_100 + 37 = 24_837
        #
        # access list for contract, pointer is set
        # contract call is hot, pointer call is call because pointer is set
        # only sload is hot because access list is for contract
        # 20_000 + 100 + 100 + 2100  + 37 = 22_337
        gas_costs.G_STORAGE_SET
        # pointer address access
        + (
            gas_costs.G_WARM_ACCOUNT_ACCESS
            if (
                pointer_definition
                in [PointerDefinition.IN_BOTH_TX, PointerDefinition.IN_POINTER_TX_ONLY]
                or access_list_rule
                in [AccessListCall.IN_BOTH_TX, AccessListCall.IN_POINTER_TX_ONLY]
                and access_list_to == AccessListTo.POINTER_ADDRESS
            )
            else gas_costs.G_COLD_ACCOUNT_ACCESS
        )
        # storage access
        + (
            gas_costs.G_WARM_SLOAD
            if (
                access_list_rule in [AccessListCall.IN_BOTH_TX, AccessListCall.IN_POINTER_TX_ONLY]
                and access_list_to == AccessListTo.POINTER_ADDRESS
            )
            else gas_costs.G_COLD_SLOAD
        )
        # contract address access
        + (
            gas_costs.G_WARM_ACCOUNT_ACCESS
            if (
                access_list_rule in [AccessListCall.IN_BOTH_TX, AccessListCall.IN_POINTER_TX_ONLY]
                and access_list_to == AccessListTo.CONTRACT_ADDRESS
            )
            else gas_costs.G_COLD_ACCOUNT_ACCESS
        )
        + opcodes_price
    )

    contract = pre.deploy_contract(code=Op.SSTORE(call_worked, Op.ADD(Op.SLOAD(call_worked), 1)))

    # Op.CALLDATASIZE() does not work with kwargs
    storage_normal: Storage = Storage()
    contract_test_normal = pre.deploy_contract(
        code=Op.GAS()
        + Op.POP(Op.CALL(gas=100_000, address=contract))
        + Op.SSTORE(
            storage_normal.store_next(direct_call_gas, "normal_call_price"),
            Op.SUB(Op.SWAP1(), Op.GAS()),
        )
    )

    storage_pointer: Storage = Storage()
    contract_test_pointer = pre.deploy_contract(
        code=Op.GAS()
        + Op.POP(Op.CALL(gas=100_000, address=pointer_a))
        + Op.SSTORE(
            storage_pointer.store_next(pointer_call_gas, "pointer_call_price"),
            Op.SUB(Op.SWAP1(), Op.GAS()),
        )
    )

    tx_0 = Transaction(
        to=1,
        gas_limit=3_000_000,
        data=b"",
        value=0,
        sender=sender,
        authorization_list=(
            [
                AuthorizationTuple(
                    address=contract,
                    nonce=0,
                    signer=pointer_a,
                )
            ]
            if pointer_definition == PointerDefinition.SEPARATE
            else None
        ),
    )

    tx = Transaction(
        to=contract_test_normal,
        gas_limit=3_000_000,
        data=b"",
        value=0,
        sender=sender,
        authorization_list=(
            [
                AuthorizationTuple(
                    address=contract,
                    nonce=0,
                    signer=pointer_a,
                )
            ]
            if pointer_definition == PointerDefinition.IN_BOTH_TX
            or pointer_definition == PointerDefinition.IN_NORMAL_TX_ONLY
            else None
        ),
        access_list=(
            [
                AccessList(
                    address=contract,
                    storage_keys=[call_worked],
                )
            ]
            if access_list_rule == AccessListCall.IN_BOTH_TX
            or access_list_rule == AccessListCall.IN_NORMAL_TX_ONLY
            else None
        ),
    )
    tx2 = Transaction(
        to=contract_test_pointer,
        gas_limit=3_000_000,
        data=b"",
        value=0,
        sender=sender,
        authorization_list=(
            [
                AuthorizationTuple(
                    address=contract,
                    nonce=0,
                    signer=pointer_a,
                )
            ]
            if pointer_definition == PointerDefinition.IN_BOTH_TX
            or pointer_definition == PointerDefinition.IN_POINTER_TX_ONLY
            else None
        ),
        access_list=(
            [
                AccessList(
                    address=(
                        pointer_a if access_list_to == AccessListTo.POINTER_ADDRESS else contract
                    ),
                    storage_keys=[call_worked],
                )
            ]
            if access_list_rule == AccessListCall.IN_BOTH_TX
            or access_list_rule == AccessListCall.IN_POINTER_TX_ONLY
            else None
        ),
    )

    post = {
        contract: Account(storage={call_worked: 1}),
        pointer_a: Account(storage={call_worked: 1}),
        contract_test_normal: Account(storage=storage_normal),
        contract_test_pointer: Account(storage=storage_pointer),
    }
    blockchain_test(
        genesis_environment=env,
        pre=pre,
        post=post,
        blocks=[Block(txs=[tx_0]), Block(txs=[tx]), Block(txs=[tx2])],
    )

Parametrized Test Cases

The interactive table below is also available as a standalone page.

Test ID (Abbreviated) access_list_to pointer_definition access_list_rule
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_POINTER_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_POINTER_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_POINTER_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_POINTER_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.NONE
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Prague-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.POINTER_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.POINTER_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.SEPARATE-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.SEPARATE AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_BOTH_TX-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_BOTH_TX AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_NORMAL_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_NORMAL_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.NONE AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.NONE
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_BOTH_TX AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_BOTH_TX
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_NORMAL_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_NORMAL_TX_ONLY
...fork_Osaka-blockchain_test-access_list_to_AccessListTo.CONTRACT_ADDRESS-pointer_definition_PointerDefinition.IN_POINTER_TX_ONLY-access_list_rule_AccessListCall.IN_POINTER_TX_ONLY AccessListTo.CONTRACT_ADDRESS PointerDefinition.IN_POINTER_TX_ONLY AccessListCall.IN_POINTER_TX_ONLY