Skip to content

Commit 2bae8dd

Browse files
committed
refactor(core/types): use pseudo.Accessor
1 parent 02b51d0 commit 2bae8dd

File tree

2 files changed

+54
-48
lines changed

2 files changed

+54
-48
lines changed

core/types/rlp_payload.libevm.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ func RegisterExtras[SA any]() ExtraPayloads[SA] {
4040
if registeredExtras != nil {
4141
panic("re-registration of Extras")
4242
}
43-
var extra ExtraPayloads[SA]
43+
44+
extra := ExtraPayloads[SA]{
45+
Account: pseudo.NewAccessor[ExtraPayloadCarrier, SA](
46+
func(a ExtraPayloadCarrier) *pseudo.Type { return a.extra().payload() },
47+
func(a ExtraPayloadCarrier, t *pseudo.Type) { a.extra().t = t },
48+
),
49+
}
4450
registeredExtras = &extraConstructors{
4551
stateAccountType: func() string {
4652
var x SA
@@ -85,7 +91,7 @@ func (e *StateAccountExtra) clone() *StateAccountExtra {
8591
// [StateAccount] and [SlimAccount] structs. The only valid way to construct an
8692
// instance is by a call to [RegisterExtras].
8793
type ExtraPayloads[SA any] struct {
88-
_ struct{} // make godoc show unexported fields so nobody tries to make their own instance ;)
94+
Account pseudo.Accessor[ExtraPayloadCarrier, SA]
8995
}
9096

9197
func (ExtraPayloads[SA]) cloneStateAccount(s *StateAccountExtra) *StateAccountExtra {
@@ -108,8 +114,10 @@ var _ = []ExtraPayloadCarrier{
108114
}
109115

110116
// FromPayloadCarrier returns the carriers's payload.
111-
func (ExtraPayloads[SA]) FromPayloadCarrier(a ExtraPayloadCarrier) SA {
112-
return pseudo.MustNewValue[SA](a.extra().payload()).Get()
117+
//
118+
// Deprecated: use the equivalent [ExtraPayloads.Account] method.
119+
func (e ExtraPayloads[SA]) FromPayloadCarrier(a ExtraPayloadCarrier) SA {
120+
return e.Account.Get(a)
113121
}
114122

115123
// PointerFromPayloadCarrier returns a pointer to the carriers's extra payload.
@@ -119,13 +127,17 @@ func (ExtraPayloads[SA]) FromPayloadCarrier(a ExtraPayloadCarrier) SA {
119127
// pointer will result in a shallow copy and that the *SA returned here will
120128
// therefore be shared by all copies. If this is not the desired behaviour, use
121129
// [StateAccount.Copy] or [ExtraPayloads.SetOnPayloadCarrier].
122-
func (ExtraPayloads[SA]) PointerFromPayloadCarrier(a ExtraPayloadCarrier) *SA {
123-
return pseudo.MustPointerTo[SA](a.extra().payload()).Value.Get()
130+
//
131+
// Deprecated: use the equivalent [ExtraPayloads.Account] method.
132+
func (e ExtraPayloads[SA]) PointerFromPayloadCarrier(a ExtraPayloadCarrier) *SA {
133+
return e.Account.GetPointer(a)
124134
}
125135

126136
// SetOnPayloadCarrier sets the carriers's payload.
127-
func (ExtraPayloads[SA]) SetOnPayloadCarrier(a ExtraPayloadCarrier, val SA) {
128-
a.extra().t = pseudo.From(val).Type
137+
//
138+
// Deprecated: use the equivalent [ExtraPayloads.Account] method.
139+
func (e ExtraPayloads[SA]) SetOnPayloadCarrier(a ExtraPayloadCarrier, val SA) {
140+
e.Account.Set(a, val)
129141
}
130142

131143
// A StateAccountExtra carries the extra payload, if any, registered with

core/types/state_account_storage.libevm_test.go

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -51,72 +51,66 @@ func TestStateAccountExtraViaTrieStorage(t *testing.T) {
5151
arbitrary = common.HexToHash("0x94eecff1444ab69437636630918c15596e001b30b973f03e06006ae20aa6e307")
5252
)
5353

54+
// An assertion is the actual test to be performed. It is returned upon
55+
// registration, instead of being a standalone field in the test, because
56+
// each one uses a different generic parameter.
57+
type assertion func(*testing.T, *types.StateAccount)
5458
tests := []struct {
5559
name string
56-
registerAndSetExtra func(*types.StateAccount) *types.StateAccount
57-
assertExtra func(*testing.T, *types.StateAccount)
60+
registerAndSetExtra func(*types.StateAccount) (*types.StateAccount, assertion)
5861
wantTrieHash common.Hash
5962
}{
6063
{
6164
name: "vanilla geth",
62-
registerAndSetExtra: func(a *types.StateAccount) *types.StateAccount {
63-
return a
64-
},
65-
assertExtra: func(t *testing.T, a *types.StateAccount) {
66-
t.Helper()
67-
assert.Truef(t, a.Extra.Equal(nil), "%T.%T.IsEmpty()", a, a.Extra)
65+
registerAndSetExtra: func(a *types.StateAccount) (*types.StateAccount, assertion) {
66+
return a, func(t *testing.T, got *types.StateAccount) {
67+
assert.Truef(t, a.Extra.Equal(nil), "%T.%T.IsEmpty()", a, a.Extra)
68+
}
6869
},
6970
wantTrieHash: vanillaGeth,
7071
},
7172
{
7273
name: "true-boolean payload",
73-
registerAndSetExtra: func(a *types.StateAccount) *types.StateAccount {
74-
types.RegisterExtras[bool]().SetOnPayloadCarrier(a, true)
75-
return a
76-
},
77-
assertExtra: func(t *testing.T, sa *types.StateAccount) {
78-
t.Helper()
79-
assert.Truef(t, types.ExtraPayloads[bool]{}.FromPayloadCarrier(sa), "")
74+
registerAndSetExtra: func(a *types.StateAccount) (*types.StateAccount, assertion) {
75+
e := types.RegisterExtras[bool]()
76+
e.SetOnPayloadCarrier(a, true)
77+
return a, func(t *testing.T, got *types.StateAccount) {
78+
assert.Truef(t, e.FromPayloadCarrier(got), "")
79+
}
8080
},
8181
wantTrieHash: trueBool,
8282
},
8383
{
8484
name: "explicit false-boolean payload",
85-
registerAndSetExtra: func(a *types.StateAccount) *types.StateAccount {
86-
p := types.RegisterExtras[bool]()
87-
p.SetOnPayloadCarrier(a, false) // the explicit part
88-
return a
89-
},
90-
assertExtra: func(t *testing.T, sa *types.StateAccount) {
91-
t.Helper()
92-
assert.Falsef(t, types.ExtraPayloads[bool]{}.FromPayloadCarrier(sa), "")
85+
registerAndSetExtra: func(a *types.StateAccount) (*types.StateAccount, assertion) {
86+
e := types.RegisterExtras[bool]()
87+
e.SetOnPayloadCarrier(a, false) // the explicit part
88+
return a, func(t *testing.T, got *types.StateAccount) {
89+
assert.Falsef(t, e.FromPayloadCarrier(got), "")
90+
}
9391
},
9492
wantTrieHash: falseBool,
9593
},
9694
{
9795
name: "implicit false-boolean payload",
98-
registerAndSetExtra: func(a *types.StateAccount) *types.StateAccount {
99-
types.RegisterExtras[bool]()
96+
registerAndSetExtra: func(a *types.StateAccount) (*types.StateAccount, assertion) {
97+
e := types.RegisterExtras[bool]()
10098
// Note that `a` is reflected, unchanged (the implicit part).
101-
return a
102-
},
103-
assertExtra: func(t *testing.T, sa *types.StateAccount) {
104-
t.Helper()
105-
assert.Falsef(t, types.ExtraPayloads[bool]{}.FromPayloadCarrier(sa), "")
99+
return a, func(t *testing.T, got *types.StateAccount) {
100+
assert.Falsef(t, e.FromPayloadCarrier(got), "")
101+
}
106102
},
107103
wantTrieHash: falseBool,
108104
},
109105
{
110106
name: "arbitrary payload",
111-
registerAndSetExtra: func(a *types.StateAccount) *types.StateAccount {
107+
registerAndSetExtra: func(a *types.StateAccount) (*types.StateAccount, assertion) {
108+
e := types.RegisterExtras[arbitraryPayload]()
112109
p := arbitraryPayload{arbitraryData}
113-
types.RegisterExtras[arbitraryPayload]().SetOnPayloadCarrier(a, p)
114-
return a
115-
},
116-
assertExtra: func(t *testing.T, sa *types.StateAccount) {
117-
t.Helper()
118-
got := types.ExtraPayloads[arbitraryPayload]{}.FromPayloadCarrier(sa)
119-
assert.Equalf(t, arbitraryPayload{arbitraryData}, got, "")
110+
e.SetOnPayloadCarrier(a, p)
111+
return a, func(t *testing.T, got *types.StateAccount) {
112+
assert.Equalf(t, arbitraryPayload{arbitraryData}, e.FromPayloadCarrier(got), "")
113+
}
120114
},
121115
wantTrieHash: arbitrary,
122116
},
@@ -127,7 +121,7 @@ func TestStateAccountExtraViaTrieStorage(t *testing.T) {
127121
types.TestOnlyClearRegisteredExtras()
128122
t.Cleanup(types.TestOnlyClearRegisteredExtras)
129123

130-
acct := tt.registerAndSetExtra(&types.StateAccount{
124+
acct, asserter := tt.registerAndSetExtra(&types.StateAccount{
131125
Nonce: 42,
132126
Balance: uint256.NewInt(314159),
133127
Root: types.EmptyRootHash,
@@ -147,7 +141,7 @@ func TestStateAccountExtraViaTrieStorage(t *testing.T) {
147141
if diff := cmp.Diff(acct, got); diff != "" {
148142
t.Errorf("%T.GetAccount() not equal to value passed to %[1]T.UpdateAccount(); diff (-want +got):\n%s", state, diff)
149143
}
150-
tt.assertExtra(t, got)
144+
asserter(t, got)
151145
})
152146
}
153147
}

0 commit comments

Comments
 (0)