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
72045dff
Unverified
Commit
72045dff
authored
Sep 05, 2019
by
Martin Holst Swende
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core/state: optimize some internals during encoding
parent
67bfc930
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
82 additions
and
1 deletion
+82
-1
bytes.go
common/bytes.go
+11
-0
state_object.go
core/state/state_object.go
+1
-1
state_object_test.go
core/state/state_object_test.go
+70
-0
No files found.
common/bytes.go
View file @
72045dff
...
...
@@ -134,3 +134,14 @@ func LeftPadBytes(slice []byte, l int) []byte {
return
padded
}
// TrimLeftZeroes returns a subslice of s without leading zeroes
func
TrimLeftZeroes
(
s
[]
byte
)
[]
byte
{
idx
:=
0
for
;
idx
<
len
(
s
);
idx
++
{
if
s
[
idx
]
!=
0
{
break
}
}
return
s
[
idx
:
]
}
core/state/state_object.go
View file @
72045dff
...
...
@@ -274,7 +274,7 @@ func (s *stateObject) updateTrie(db Database) Trie {
continue
}
// Encoding []byte cannot fail, ok to ignore the error.
v
,
_
:=
rlp
.
EncodeToBytes
(
bytes
.
TrimLeft
(
value
[
:
],
"
\x00
"
))
v
,
_
:=
rlp
.
EncodeToBytes
(
common
.
TrimLeftZeroes
(
value
[
:
]
))
s
.
setError
(
tr
.
TryUpdate
(
key
[
:
],
v
))
}
return
tr
...
...
core/state/state_object_test.go
0 → 100644
View file @
72045dff
// Copyright 2019 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package
state
import
(
"bytes"
"fmt"
"math/rand"
"testing"
"time"
"github.com/ethereum/go-ethereum/common"
)
func
BenchmarkCutOriginal
(
b
*
testing
.
B
)
{
value
:=
common
.
HexToHash
(
"0x01"
)
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
bytes
.
TrimLeft
(
value
[
:
],
"
\x00
"
)
}
}
func
BenchmarkCutsetterFn
(
b
*
testing
.
B
)
{
value
:=
common
.
HexToHash
(
"0x01"
)
cutSetFn
:=
func
(
r
rune
)
bool
{
return
int32
(
r
)
==
int32
(
0
)
}
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
bytes
.
TrimLeftFunc
(
value
[
:
],
cutSetFn
)
}
}
func
BenchmarkCutCustomTrim
(
b
*
testing
.
B
)
{
value
:=
common
.
HexToHash
(
"0x01"
)
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
common
.
TrimLeftZeroes
(
value
[
:
])
}
}
func
xTestFuzzCutter
(
t
*
testing
.
T
)
{
rand
.
Seed
(
time
.
Now
()
.
Unix
())
for
{
v
:=
make
([]
byte
,
20
)
zeroes
:=
rand
.
Intn
(
21
)
rand
.
Read
(
v
[
zeroes
:
])
exp
:=
bytes
.
TrimLeft
(
v
[
:
],
"
\x00
"
)
got
:=
common
.
TrimLeftZeroes
(
v
)
if
!
bytes
.
Equal
(
exp
,
got
)
{
fmt
.
Printf
(
"Input %x
\n
"
,
v
)
fmt
.
Printf
(
"Exp %x
\n
"
,
exp
)
fmt
.
Printf
(
"Got %x
\n
"
,
got
)
t
.
Fatalf
(
"Error"
)
}
//break
}
}
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