Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
bf5cacfb
Unverified
Commit
bf5cacfb
authored
Apr 08, 2022
by
Tangui Clairet
Committed by
GitHub
Apr 08, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
accounts/abi: handle tuple arrays in ParseSelector (#24587)
Closes #24571
parent
92e3c56e
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
18 additions
and
1 deletion
+18
-1
selector_parser.go
accounts/abi/selector_parser.go
+9
-1
selector_parser_test.go
accounts/abi/selector_parser_test.go
+9
-0
No files found.
accounts/abi/selector_parser.go
View file @
bf5cacfb
...
@@ -86,6 +86,9 @@ func parseCompositeType(unescapedSelector string) ([]interface{}, string, error)
...
@@ -86,6 +86,9 @@ func parseCompositeType(unescapedSelector string) ([]interface{}, string, error)
if
len
(
rest
)
==
0
||
rest
[
0
]
!=
')'
{
if
len
(
rest
)
==
0
||
rest
[
0
]
!=
')'
{
return
nil
,
""
,
fmt
.
Errorf
(
"expected ')', got '%s'"
,
rest
)
return
nil
,
""
,
fmt
.
Errorf
(
"expected ')', got '%s'"
,
rest
)
}
}
if
len
(
rest
)
>=
3
&&
rest
[
1
]
==
'['
&&
rest
[
2
]
==
']'
{
return
append
(
result
,
"[]"
),
rest
[
3
:
],
nil
}
return
result
,
rest
[
1
:
],
nil
return
result
,
rest
[
1
:
],
nil
}
}
...
@@ -112,7 +115,12 @@ func assembleArgs(args []interface{}) ([]ArgumentMarshaling, error) {
...
@@ -112,7 +115,12 @@ func assembleArgs(args []interface{}) ([]ArgumentMarshaling, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to assemble components: %v"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to assemble components: %v"
,
err
)
}
}
arguments
=
append
(
arguments
,
ArgumentMarshaling
{
name
,
"tuple"
,
"tuple"
,
subArgs
,
false
})
tupleType
:=
"tuple"
if
len
(
subArgs
)
!=
0
&&
subArgs
[
len
(
subArgs
)
-
1
]
.
Type
==
"[]"
{
subArgs
=
subArgs
[
:
len
(
subArgs
)
-
1
]
tupleType
=
"tuple[]"
}
arguments
=
append
(
arguments
,
ArgumentMarshaling
{
name
,
tupleType
,
tupleType
,
subArgs
,
false
})
}
else
{
}
else
{
return
nil
,
fmt
.
Errorf
(
"failed to assemble args: unexpected type %T"
,
arg
)
return
nil
,
fmt
.
Errorf
(
"failed to assemble args: unexpected type %T"
,
arg
)
}
}
...
...
accounts/abi/selector_parser_test.go
View file @
bf5cacfb
...
@@ -16,6 +16,8 @@ func TestParseSelector(t *testing.T) {
...
@@ -16,6 +16,8 @@ func TestParseSelector(t *testing.T) {
result
=
append
(
result
,
ArgumentMarshaling
{
name
,
typeName
,
typeName
,
nil
,
false
})
result
=
append
(
result
,
ArgumentMarshaling
{
name
,
typeName
,
typeName
,
nil
,
false
})
}
else
if
components
,
ok
:=
typeOrComponents
.
([]
ArgumentMarshaling
);
ok
{
}
else
if
components
,
ok
:=
typeOrComponents
.
([]
ArgumentMarshaling
);
ok
{
result
=
append
(
result
,
ArgumentMarshaling
{
name
,
"tuple"
,
"tuple"
,
components
,
false
})
result
=
append
(
result
,
ArgumentMarshaling
{
name
,
"tuple"
,
"tuple"
,
components
,
false
})
}
else
if
components
,
ok
:=
typeOrComponents
.
([][]
ArgumentMarshaling
);
ok
{
result
=
append
(
result
,
ArgumentMarshaling
{
name
,
"tuple[]"
,
"tuple[]"
,
components
[
0
],
false
})
}
else
{
}
else
{
log
.
Fatalf
(
"unexpected type %T"
,
typeOrComponents
)
log
.
Fatalf
(
"unexpected type %T"
,
typeOrComponents
)
}
}
...
@@ -34,6 +36,13 @@ func TestParseSelector(t *testing.T) {
...
@@ -34,6 +36,13 @@ func TestParseSelector(t *testing.T) {
{
"singleNest(bytes32,uint8,(uint256,uint256),address)"
,
"singleNest"
,
mkType
(
"bytes32"
,
"uint8"
,
mkType
(
"uint256"
,
"uint256"
),
"address"
)},
{
"singleNest(bytes32,uint8,(uint256,uint256),address)"
,
"singleNest"
,
mkType
(
"bytes32"
,
"uint8"
,
mkType
(
"uint256"
,
"uint256"
),
"address"
)},
{
"multiNest(address,(uint256[],uint256),((address,bytes32),uint256))"
,
"multiNest"
,
{
"multiNest(address,(uint256[],uint256),((address,bytes32),uint256))"
,
"multiNest"
,
mkType
(
"address"
,
mkType
(
"uint256[]"
,
"uint256"
),
mkType
(
mkType
(
"address"
,
"bytes32"
),
"uint256"
))},
mkType
(
"address"
,
mkType
(
"uint256[]"
,
"uint256"
),
mkType
(
mkType
(
"address"
,
"bytes32"
),
"uint256"
))},
{
"arrayNest((uint256,uint256)[],bytes32)"
,
"arrayNest"
,
mkType
([][]
ArgumentMarshaling
{
mkType
(
"uint256"
,
"uint256"
)},
"bytes32"
)},
{
"multiArrayNest((uint256,uint256)[],(uint256,uint256)[])"
,
"multiArrayNest"
,
mkType
([][]
ArgumentMarshaling
{
mkType
(
"uint256"
,
"uint256"
)},
[][]
ArgumentMarshaling
{
mkType
(
"uint256"
,
"uint256"
)})},
{
"singleArrayNestAndArray((uint256,uint256)[],bytes32[])"
,
"singleArrayNestAndArray"
,
mkType
([][]
ArgumentMarshaling
{
mkType
(
"uint256"
,
"uint256"
)},
"bytes32[]"
)},
{
"singleArrayNestWithArrayAndArray((uint256[],address[2],uint8[4][][5])[],bytes32[])"
,
"singleArrayNestWithArrayAndArray"
,
mkType
([][]
ArgumentMarshaling
{
mkType
(
"uint256[]"
,
"address[2]"
,
"uint8[4][][5]"
)},
"bytes32[]"
)},
}
}
for
i
,
tt
:=
range
tests
{
for
i
,
tt
:=
range
tests
{
selector
,
err
:=
ParseSelector
(
tt
.
input
)
selector
,
err
:=
ParseSelector
(
tt
.
input
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment