Skip to content

Commit b4fef9a

Browse files
authored
Fix RemoveVerifiedDataCap and Account Method 3 (#415)
* fix: verifreg data cap params * fix: account methodNum 3 * fix: pass both param and return values * test: update test case * test: update test case
1 parent 3dbe0c3 commit b4fef9a

7 files changed

Lines changed: 70 additions & 50 deletions

File tree

actors/tests/verifiedregistry_test.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,7 @@ var verifiedRegistryWithParamsOrReturnTests = []struct {
4545
txType: parser.MethodRestoreBytes,
4646
key: parser.ParamsKey,
4747
},
48-
{
49-
name: "Remove Verified Client DataCap",
50-
txType: parser.MethodRemoveVerifiedClientDataCap,
51-
key: parser.ParamsKey,
52-
},
48+
5349
{
5450
name: "Deprecated1",
5551
txType: parser.MethodVerifiedDeprecated1,
@@ -106,6 +102,10 @@ var verifiedRegistryWithParamsAndReturnTests = []struct {
106102
name: "Remove Expired Claims Exported",
107103
txType: parser.MethodRemoveExpiredClaimsExported,
108104
},
105+
{
106+
name: "Remove Verified Client DataCap",
107+
txType: parser.MethodRemoveVerifiedClientDataCap,
108+
},
109109
}
110110

111111
func TestActorParserV1_VerifiedWithParamsOrReturn(t *testing.T) {
@@ -140,6 +140,12 @@ func TestActorParserV1_VerifiedWithParamsAndReturn(t *testing.T) {
140140

141141
for _, tt := range verifiedRegistryWithParamsAndReturnTests {
142142
t.Run(tt.name, func(t *testing.T) {
143+
// this is a legacy compatibility test, the RemoveVerifiedClientDataCap test params were incorrect,
144+
// the new Params and Return are correct and v1 test will fail.
145+
if tt.txType == parser.MethodRemoveVerifiedClientDataCap {
146+
return
147+
}
148+
143149
rawParams, rawReturn, err := getParamsAndReturn(manifest.VerifregKey, tt.txType)
144150
require.NoError(t, err)
145151
require.NotNil(t, rawParams)

actors/v2/account/account.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ import (
2828
"github.com/zondax/fil-parser/tools"
2929
)
3030

31+
func buggyMethods() map[abi.MethodNum]nonLegacyBuiltin.MethodMeta {
32+
a := Account{}
33+
// method 3 was changed in nv18(actors v10) to use the MustGenerateFRCMethodNum("") style
34+
// but in mainnet height 2683348, the method is still using the old style
35+
return map[abi.MethodNum]nonLegacyBuiltin.MethodMeta{
36+
3: {
37+
Name: "AuthenticateMessage",
38+
Method: a.AuthenticateMessage,
39+
},
40+
}
41+
}
42+
3143
var methods = map[string]map[abi.MethodNum]nonLegacyBuiltin.MethodMeta{
3244
tools.V0.String(): v1Methods(),
3345
tools.V1.String(): v1Methods(),
@@ -49,14 +61,14 @@ var methods = map[string]map[abi.MethodNum]nonLegacyBuiltin.MethodMeta{
4961
tools.V15.String(): v7Methods(),
5062
tools.V16.String(): actors.CopyMethods(accountv8.Methods),
5163
tools.V17.String(): actors.CopyMethods(accountv9.Methods),
52-
tools.V18.String(): actors.CopyMethods(accountv10.Methods),
53-
tools.V19.String(): actors.CopyMethods(accountv11.Methods),
54-
tools.V20.String(): actors.CopyMethods(accountv11.Methods),
55-
tools.V21.String(): actors.CopyMethods(accountv12.Methods),
56-
tools.V22.String(): actors.CopyMethods(accountv13.Methods),
57-
tools.V23.String(): actors.CopyMethods(accountv14.Methods),
58-
tools.V24.String(): actors.CopyMethods(accountv15.Methods),
59-
tools.V25.String(): actors.CopyMethods(accountv16.Methods),
64+
tools.V18.String(): actors.CopyMethods(accountv10.Methods, buggyMethods()),
65+
tools.V19.String(): actors.CopyMethods(accountv11.Methods, buggyMethods()),
66+
tools.V20.String(): actors.CopyMethods(accountv11.Methods, buggyMethods()),
67+
tools.V21.String(): actors.CopyMethods(accountv12.Methods, buggyMethods()),
68+
tools.V22.String(): actors.CopyMethods(accountv13.Methods, buggyMethods()),
69+
tools.V23.String(): actors.CopyMethods(accountv14.Methods, buggyMethods()),
70+
tools.V24.String(): actors.CopyMethods(accountv15.Methods, buggyMethods()),
71+
tools.V25.String(): actors.CopyMethods(accountv16.Methods, buggyMethods()),
6072
}
6173

6274
func (a *Account) Methods(_ context.Context, network string, height int64) (map[abi.MethodNum]nonLegacyBuiltin.MethodMeta, error) {

actors/v2/verifiedRegistry/params.go

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -220,38 +220,36 @@ var restoreBytesParams = map[string]func() cbg.CBORUnmarshaler{
220220
tools.V25.String(): func() cbg.CBORUnmarshaler { return new(verifregv16.RestoreBytesParams) },
221221
}
222222

223-
var dataCap = map[string]func() cbg.CBORUnmarshaler{
224-
tools.V0.String(): func() cbg.CBORUnmarshaler { return new(legacyv1.DataCap) },
225-
tools.V1.String(): func() cbg.CBORUnmarshaler { return new(legacyv1.DataCap) },
226-
tools.V2.String(): func() cbg.CBORUnmarshaler { return new(legacyv1.DataCap) },
227-
tools.V3.String(): func() cbg.CBORUnmarshaler { return new(legacyv1.DataCap) },
228-
229-
tools.V4.String(): func() cbg.CBORUnmarshaler { return new(legacyv2.DataCap) },
230-
tools.V5.String(): func() cbg.CBORUnmarshaler { return new(legacyv2.DataCap) },
231-
tools.V6.String(): func() cbg.CBORUnmarshaler { return new(legacyv2.DataCap) },
232-
tools.V7.String(): func() cbg.CBORUnmarshaler { return new(legacyv2.DataCap) },
233-
tools.V8.String(): func() cbg.CBORUnmarshaler { return new(legacyv2.DataCap) },
234-
tools.V9.String(): func() cbg.CBORUnmarshaler { return new(legacyv2.DataCap) },
235-
236-
tools.V10.String(): func() cbg.CBORUnmarshaler { return new(legacyv3.DataCap) },
237-
tools.V11.String(): func() cbg.CBORUnmarshaler { return new(legacyv3.DataCap) },
238-
239-
tools.V12.String(): func() cbg.CBORUnmarshaler { return new(legacyv4.DataCap) },
240-
tools.V13.String(): func() cbg.CBORUnmarshaler { return new(legacyv5.DataCap) },
241-
tools.V14.String(): func() cbg.CBORUnmarshaler { return new(legacyv6.DataCap) },
242-
tools.V15.String(): func() cbg.CBORUnmarshaler { return new(legacyv7.DataCap) },
243-
tools.V16.String(): func() cbg.CBORUnmarshaler { return new(verifregv8.DataCap) },
244-
tools.V17.String(): func() cbg.CBORUnmarshaler { return new(verifregv9.DataCap) },
245-
tools.V18.String(): func() cbg.CBORUnmarshaler { return new(verifregv10.DataCap) },
246-
247-
tools.V19.String(): func() cbg.CBORUnmarshaler { return new(verifregv11.DataCap) },
248-
tools.V20.String(): func() cbg.CBORUnmarshaler { return new(verifregv11.DataCap) },
249-
250-
tools.V21.String(): func() cbg.CBORUnmarshaler { return new(verifregv12.DataCap) },
251-
tools.V22.String(): func() cbg.CBORUnmarshaler { return new(verifregv13.DataCap) },
252-
tools.V23.String(): func() cbg.CBORUnmarshaler { return new(verifregv14.DataCap) },
253-
tools.V24.String(): func() cbg.CBORUnmarshaler { return new(verifregv15.DataCap) },
254-
tools.V25.String(): func() cbg.CBORUnmarshaler { return new(verifregv16.DataCap) },
223+
var removeDataCapParams = map[string]func() cbg.CBORUnmarshaler{
224+
tools.V15.String(): func() cbg.CBORUnmarshaler { return new(legacyv7.RemoveDataCapParams) },
225+
tools.V16.String(): func() cbg.CBORUnmarshaler { return new(verifregv8.RemoveDataCapParams) },
226+
tools.V17.String(): func() cbg.CBORUnmarshaler { return new(verifregv9.RemoveDataCapParams) },
227+
tools.V18.String(): func() cbg.CBORUnmarshaler { return new(verifregv10.RemoveDataCapParams) },
228+
229+
tools.V19.String(): func() cbg.CBORUnmarshaler { return new(verifregv11.RemoveDataCapParams) },
230+
tools.V20.String(): func() cbg.CBORUnmarshaler { return new(verifregv11.RemoveDataCapParams) },
231+
232+
tools.V21.String(): func() cbg.CBORUnmarshaler { return new(verifregv12.RemoveDataCapParams) },
233+
tools.V22.String(): func() cbg.CBORUnmarshaler { return new(verifregv13.RemoveDataCapParams) },
234+
tools.V23.String(): func() cbg.CBORUnmarshaler { return new(verifregv14.RemoveDataCapParams) },
235+
tools.V24.String(): func() cbg.CBORUnmarshaler { return new(verifregv15.RemoveDataCapParams) },
236+
tools.V25.String(): func() cbg.CBORUnmarshaler { return new(verifregv16.RemoveDataCapParams) },
237+
}
238+
239+
var removeDataCapReturn = map[string]func() cbg.CBORUnmarshaler{
240+
tools.V15.String(): func() cbg.CBORUnmarshaler { return new(legacyv7.RemoveDataCapReturn) },
241+
tools.V16.String(): func() cbg.CBORUnmarshaler { return new(verifregv8.RemoveDataCapReturn) },
242+
tools.V17.String(): func() cbg.CBORUnmarshaler { return new(verifregv9.RemoveDataCapReturn) },
243+
tools.V18.String(): func() cbg.CBORUnmarshaler { return new(verifregv10.RemoveDataCapReturn) },
244+
245+
tools.V19.String(): func() cbg.CBORUnmarshaler { return new(verifregv11.RemoveDataCapReturn) },
246+
tools.V20.String(): func() cbg.CBORUnmarshaler { return new(verifregv11.RemoveDataCapReturn) },
247+
248+
tools.V21.String(): func() cbg.CBORUnmarshaler { return new(verifregv12.RemoveDataCapReturn) },
249+
tools.V22.String(): func() cbg.CBORUnmarshaler { return new(verifregv13.RemoveDataCapReturn) },
250+
tools.V23.String(): func() cbg.CBORUnmarshaler { return new(verifregv14.RemoveDataCapReturn) },
251+
tools.V24.String(): func() cbg.CBORUnmarshaler { return new(verifregv15.RemoveDataCapReturn) },
252+
tools.V25.String(): func() cbg.CBORUnmarshaler { return new(verifregv16.RemoveDataCapReturn) },
255253
}
256254

257255
var removeExpiredAllocationsParams = map[string]func() cbg.CBORUnmarshaler{

actors/v2/verifiedRegistry/parse.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ func (p *VerifiedRegistry) Parse(_ context.Context, network string, height int64
3434
case parser.MethodRestoreBytes:
3535
resp, err := p.RestoreBytes(network, height, msg.Params)
3636
return resp, nil, err
37-
case parser.MethodRemoveVerifiedClientDataCap: // TODO: not tested
38-
resp, err := p.RemoveVerifiedClientDataCap(network, height, msg.Params)
37+
case parser.MethodRemoveVerifiedClientDataCap:
38+
resp, err := p.RemoveVerifiedClientDataCap(network, height, msg.Params, msgRct.Return)
3939
return resp, nil, err
4040
case parser.MethodRemoveExpiredAllocations, parser.MethodRemoveExpiredAllocationsExported:
4141
resp, err := p.RemoveExpiredAllocationsExported(network, height, msg.Params, msgRct.Return)

actors/v2/verifiedRegistry/verifiedRegistry.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,18 @@ func (*VerifiedRegistry) RestoreBytes(network string, height int64, raw []byte)
131131
return parse(raw, nil, false, params(), &abi.EmptyValue{})
132132
}
133133

134-
func (*VerifiedRegistry) RemoveVerifiedClientDataCap(network string, height int64, raw []byte) (map[string]interface{}, error) {
134+
func (*VerifiedRegistry) RemoveVerifiedClientDataCap(network string, height int64, rawParams, rawReturn []byte) (map[string]interface{}, error) {
135135
version := tools.VersionFromHeight(network, height)
136-
params, ok := dataCap[version.String()]
136+
params, ok := removeDataCapParams[version.String()]
137+
if !ok {
138+
return nil, fmt.Errorf("%w: %d", actors.ErrUnsupportedHeight, height)
139+
}
140+
returnValue, ok := removeDataCapReturn[version.String()]
137141
if !ok {
138142
return nil, fmt.Errorf("%w: %d", actors.ErrUnsupportedHeight, height)
139143
}
140144

141-
return parse(raw, nil, false, params(), &abi.EmptyValue{})
145+
return parse(rawParams, rawReturn, true, params(), returnValue())
142146
}
143147

144148
func (*VerifiedRegistry) RemoveExpiredAllocationsExported(network string, height int64, raw, rawReturn []byte) (map[string]interface{}, error) {
160 Bytes
Binary file not shown.
14 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)