@@ -5,13 +5,15 @@ package arbtest
55
66import (
77 "context"
8+ "crypto/sha256"
89 "math/big"
910 "strings"
1011 "testing"
1112
1213 "github.com/ethereum/go-ethereum/common"
1314 "github.com/ethereum/go-ethereum/crypto"
1415
16+ "github.com/offchainlabs/nitro/restrictedaddr"
1517 "github.com/offchainlabs/nitro/solgen/go/localgen"
1618 "github.com/offchainlabs/nitro/txfilter"
1719)
@@ -23,6 +25,19 @@ func isFilteredError(err error) bool {
2325 return strings .Contains (err .Error (), "internal error" )
2426}
2527
28+ func newHashedChecker (addrs []common.Address ) * txfilter.HashedAddressChecker {
29+ store := restrictedaddr .NewHashStore ()
30+ if len (addrs ) > 0 {
31+ salt := []byte ("test-salt" )
32+ hashes := make ([][32 ]byte , len (addrs ))
33+ for i , addr := range addrs {
34+ hashes [i ] = sha256 .Sum256 (append (salt , addr .Bytes ()... ))
35+ }
36+ store .Load (salt , hashes , "test" )
37+ }
38+ return txfilter .NewDefaultHashedAddressChecker (store )
39+ }
40+
2641func TestAddressFilterDirectTransfer (t * testing.T ) {
2742 ctx , cancel := context .WithCancel (context .Background ())
2843 defer cancel ()
@@ -42,7 +57,7 @@ func TestAddressFilterDirectTransfer(t *testing.T) {
4257
4358 // Set up address filter to block FilteredUser
4459 filteredAddr := builder .L2Info .GetAddress ("FilteredUser" )
45- filter := txfilter . NewStaticAsyncChecker ([]common.Address {filteredAddr })
60+ filter := newHashedChecker ([]common.Address {filteredAddr })
4661 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (filter )
4762
4863 // Test 1: Transaction TO a filtered address should fail
@@ -105,7 +120,7 @@ func TestAddressFilterCall(t *testing.T) {
105120 targetAddr , _ := deployAddressFilterTestContract (t , ctx , builder )
106121
107122 // Set up filter to block the target contract
108- filter := txfilter . NewStaticAsyncChecker ([]common.Address {targetAddr })
123+ filter := newHashedChecker ([]common.Address {targetAddr })
109124 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (filter )
110125
111126 // Test: CALL to filtered address should fail
@@ -143,7 +158,7 @@ func TestAddressFilterStaticCall(t *testing.T) {
143158 targetAddr , _ := deployAddressFilterTestContract (t , ctx , builder )
144159
145160 // Set up filter to block the target contract
146- filter := txfilter . NewStaticAsyncChecker ([]common.Address {targetAddr })
161+ filter := newHashedChecker ([]common.Address {targetAddr })
147162 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (filter )
148163
149164 // Test: STATICCALL to filtered address within a transaction should fail
@@ -180,7 +195,7 @@ func TestAddressFilterDisabled(t *testing.T) {
180195 builder .L2 .TransferBalance (t , "Owner" , "TestUser" , big .NewInt (1e18 ), builder .L2Info )
181196
182197 // Set up an empty filter (disabled)
183- filter := txfilter . NewStaticAsyncChecker ([]common.Address {})
198+ filter := newHashedChecker ([]common.Address {})
184199 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (filter )
185200
186201 // All transactions should succeed when filter is disabled
@@ -215,7 +230,7 @@ func TestAddressFilterCreate2(t *testing.T) {
215230 Require (t , err )
216231
217232 // Set up filter to block the computed address
218- filter := txfilter . NewStaticAsyncChecker ([]common.Address {create2Addr })
233+ filter := newHashedChecker ([]common.Address {create2Addr })
219234 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (filter )
220235
221236 // Test: CREATE2 to filtered address should fail
@@ -257,7 +272,7 @@ func TestAddressFilterCreate(t *testing.T) {
257272 createAddr := crypto .CreateAddress (callerAddr , nonce )
258273
259274 // Set up filter to block the computed address
260- filter := txfilter . NewStaticAsyncChecker ([]common.Address {createAddr })
275+ filter := newHashedChecker ([]common.Address {createAddr })
261276 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (filter )
262277
263278 // Test: CREATE to filtered address should fail
@@ -272,7 +287,7 @@ func TestAddressFilterCreate(t *testing.T) {
272287
273288 // Test: CREATE to non-filtered address (after nonce incremented) should succeed
274289 // Clear the filter to allow the next CREATE
275- emptyChecker := txfilter . NewStaticAsyncChecker ([]common.Address {})
290+ emptyChecker := newHashedChecker ([]common.Address {})
276291 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (emptyChecker )
277292
278293 auth = builder .L2Info .GetDefaultTransactOpts ("Owner" , ctx )
@@ -299,7 +314,7 @@ func TestAddressFilterSelfdestruct(t *testing.T) {
299314 filteredAddr := builder .L2Info .GetAddress ("FilteredBeneficiary" )
300315
301316 // Set up filter to block the beneficiary
302- filter := txfilter . NewStaticAsyncChecker ([]common.Address {filteredAddr })
317+ filter := newHashedChecker ([]common.Address {filteredAddr })
303318 builder .L2 .ExecNode .ExecEngine .SetAddressChecker (filter )
304319
305320 // Test: SELFDESTRUCT to filtered beneficiary should fail
0 commit comments