@@ -474,6 +474,60 @@ def test_cache_non_checksum_address(chain, vyper_contract_instance):
474
474
assert chain .contracts [vyper_contract_instance .address ] == vyper_contract_instance .contract_type
475
475
476
476
477
+ def test_get_when_proxy (chain , owner , minimal_proxy_container , vyper_contract_instance ):
478
+ placeholder = "0xBEbeBeBEbeBebeBeBEBEbebEBeBeBebeBeBebebe"
479
+ if placeholder in chain .contracts :
480
+ del chain .contracts [placeholder ]
481
+
482
+ minimal_proxy = owner .deploy (minimal_proxy_container , sender = owner )
483
+ chain .provider .network .__dict__ ["explorer" ] = None # Ensure no explorer, messes up test.
484
+
485
+ actual = chain .contracts .get (minimal_proxy .address )
486
+ assert actual == minimal_proxy .contract_type
487
+
488
+
489
+ def test_get_when_proxy_but_implementation_missing (chain , owner , vyper_contract_container ):
490
+ """
491
+ Proxy is cached but implementation is missing.
492
+ """
493
+ placeholder = vyper_contract_container .deploy (1001 , sender = owner )
494
+ assert chain .contracts [placeholder .address ] # This must be cached!
495
+
496
+ proxy_container = _make_minimal_proxy (placeholder .address )
497
+ minimal_proxy = owner .deploy (proxy_container , sender = owner )
498
+ chain .provider .network .__dict__ ["explorer" ] = None # Ensure no explorer, messes up test.
499
+
500
+ if minimal_proxy .address in chain .contracts :
501
+ # Delete the proxy but make sure it does not delete the implementation!
502
+ # (which it normally does here).
503
+ del chain .contracts [minimal_proxy .address ]
504
+ chain .contracts [placeholder .address ] = placeholder
505
+
506
+ actual = chain .contracts .get (minimal_proxy .address )
507
+ assert actual == minimal_proxy .contract_type
508
+
509
+
510
+ def test_get_pass_along_proxy_info (chain , owner , minimal_proxy_container , ethereum ):
511
+ placeholder = "0xBEbeBeBEbeBebeBeBEBEbebEBeBeBebeBeBebebe"
512
+ if placeholder in chain .contracts :
513
+ del chain .contracts [placeholder ]
514
+
515
+ minimal_proxy = owner .deploy (minimal_proxy_container , sender = owner )
516
+ chain .provider .network .__dict__ ["explorer" ] = None # Ensure no explorer, messes up test.
517
+ info = ethereum .get_proxy_info (minimal_proxy .address )
518
+ assert info
519
+
520
+ # Ensure not already cached.
521
+ if minimal_proxy .address in chain .contracts :
522
+ del chain .contracts [minimal_proxy .address ]
523
+
524
+ actual = chain .contracts .get (minimal_proxy .address , proxy_info = info )
525
+ assert actual is None # It can't find the contact anymore.
526
+
527
+ # Ensure it does store 'None' (was a bug where it did).
528
+ assert minimal_proxy .address not in chain .contracts .contract_types
529
+
530
+
477
531
def test_get_creation_metadata (chain , vyper_contract_instance , owner ):
478
532
address = vyper_contract_instance .address
479
533
creation = chain .contracts .get_creation_metadata (address )
0 commit comments