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
6e3aa86a
Unverified
Commit
6e3aa86a
authored
May 16, 2023
by
Delweng
Committed by
GitHub
May 16, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
internal/ethapi: minor refactor in block serialization (#27268)
parent
c2148c64
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
107 additions
and
19 deletions
+107
-19
api.go
internal/ethapi/api.go
+5
-18
api_test.go
internal/ethapi/api_test.go
+102
-1
No files found.
internal/ethapi/api.go
View file @
6e3aa86a
...
@@ -1263,21 +1263,18 @@ func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool, config *param
...
@@ -1263,21 +1263,18 @@ func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool, config *param
fields
[
"size"
]
=
hexutil
.
Uint64
(
block
.
Size
())
fields
[
"size"
]
=
hexutil
.
Uint64
(
block
.
Size
())
if
inclTx
{
if
inclTx
{
formatTx
:=
func
(
tx
*
types
.
Transaction
)
(
interface
{},
error
)
{
formatTx
:=
func
(
idx
int
,
tx
*
types
.
Transaction
)
interface
{}
{
return
tx
.
Hash
()
,
nil
return
tx
.
Hash
()
}
}
if
fullTx
{
if
fullTx
{
formatTx
=
func
(
tx
*
types
.
Transaction
)
(
interface
{},
error
)
{
formatTx
=
func
(
idx
int
,
tx
*
types
.
Transaction
)
interface
{}
{
return
newRPCTransactionFromBlock
Hash
(
block
,
tx
.
Hash
(),
config
),
nil
return
newRPCTransactionFromBlock
Index
(
block
,
uint64
(
idx
),
config
)
}
}
}
}
txs
:=
block
.
Transactions
()
txs
:=
block
.
Transactions
()
transactions
:=
make
([]
interface
{},
len
(
txs
))
transactions
:=
make
([]
interface
{},
len
(
txs
))
var
err
error
for
i
,
tx
:=
range
txs
{
for
i
,
tx
:=
range
txs
{
if
transactions
[
i
],
err
=
formatTx
(
tx
);
err
!=
nil
{
transactions
[
i
]
=
formatTx
(
i
,
tx
)
return
nil
,
err
}
}
}
fields
[
"transactions"
]
=
transactions
fields
[
"transactions"
]
=
transactions
}
}
...
@@ -1424,16 +1421,6 @@ func newRPCRawTransactionFromBlockIndex(b *types.Block, index uint64) hexutil.By
...
@@ -1424,16 +1421,6 @@ func newRPCRawTransactionFromBlockIndex(b *types.Block, index uint64) hexutil.By
return
blob
return
blob
}
}
// newRPCTransactionFromBlockHash returns a transaction that will serialize to the RPC representation.
func
newRPCTransactionFromBlockHash
(
b
*
types
.
Block
,
hash
common
.
Hash
,
config
*
params
.
ChainConfig
)
*
RPCTransaction
{
for
idx
,
tx
:=
range
b
.
Transactions
()
{
if
tx
.
Hash
()
==
hash
{
return
newRPCTransactionFromBlockIndex
(
b
,
uint64
(
idx
),
config
)
}
}
return
nil
}
// accessListResult returns an optional accesslist
// accessListResult returns an optional accesslist
// It's the result of the `debug_createAccessList` RPC call.
// It's the result of the `debug_createAccessList` RPC call.
// It contains an error if the transaction itself failed.
// It contains an error if the transaction itself failed.
...
...
internal/ethapi/api_test.go
View file @
6e3aa86a
...
@@ -22,6 +22,7 @@ import (
...
@@ -22,6 +22,7 @@ import (
"crypto/ecdsa"
"crypto/ecdsa"
"encoding/json"
"encoding/json"
"errors"
"errors"
"hash"
"math/big"
"math/big"
"reflect"
"reflect"
"sort"
"sort"
...
@@ -45,6 +46,7 @@ import (
...
@@ -45,6 +46,7 @@ import (
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/rpc"
"golang.org/x/crypto/sha3"
)
)
func
TestTransaction_RoundTripRpcJSON
(
t
*
testing
.
T
)
{
func
TestTransaction_RoundTripRpcJSON
(
t
*
testing
.
T
)
{
...
@@ -549,7 +551,7 @@ func TestCall(t *testing.T) {
...
@@ -549,7 +551,7 @@ func TestCall(t *testing.T) {
overrides
:
StateOverride
{
overrides
:
StateOverride
{
randomAccounts
[
2
]
.
addr
:
OverrideAccount
{
randomAccounts
[
2
]
.
addr
:
OverrideAccount
{
Code
:
hex2Bytes
(
"6080604052348015600f57600080fd5b506004361060285760003560e01c80638381f58a14602d575b600080fd5b60336049565b6040518082815260200191505060405180910390f35b6000548156fea2646970667358221220eab35ffa6ab2adfe380772a48b8ba78e82a1b820a18fcb6f59aa4efb20a5f60064736f6c63430007040033"
),
Code
:
hex2Bytes
(
"6080604052348015600f57600080fd5b506004361060285760003560e01c80638381f58a14602d575b600080fd5b60336049565b6040518082815260200191505060405180910390f35b6000548156fea2646970667358221220eab35ffa6ab2adfe380772a48b8ba78e82a1b820a18fcb6f59aa4efb20a5f60064736f6c63430007040033"
),
StateDiff
:
&
map
[
common
.
Hash
]
common
.
Hash
{
common
.
Hash
{}
:
common
.
BigToHash
(
big
.
NewInt
(
123
))},
StateDiff
:
&
map
[
common
.
Hash
]
common
.
Hash
{{}
:
common
.
BigToHash
(
big
.
NewInt
(
123
))},
},
},
},
},
want
:
"0x000000000000000000000000000000000000000000000000000000000000007b"
,
want
:
"0x000000000000000000000000000000000000000000000000000000000000007b"
,
...
@@ -624,3 +626,102 @@ func hex2Bytes(str string) *hexutil.Bytes {
...
@@ -624,3 +626,102 @@ func hex2Bytes(str string) *hexutil.Bytes {
rpcBytes
:=
hexutil
.
Bytes
(
common
.
Hex2Bytes
(
str
))
rpcBytes
:=
hexutil
.
Bytes
(
common
.
Hex2Bytes
(
str
))
return
&
rpcBytes
return
&
rpcBytes
}
}
// testHasher is the helper tool for transaction/receipt list hashing.
// The original hasher is trie, in order to get rid of import cycle,
// use the testing hasher instead.
type
testHasher
struct
{
hasher
hash
.
Hash
}
func
newHasher
()
*
testHasher
{
return
&
testHasher
{
hasher
:
sha3
.
NewLegacyKeccak256
()}
}
func
(
h
*
testHasher
)
Reset
()
{
h
.
hasher
.
Reset
()
}
func
(
h
*
testHasher
)
Update
(
key
,
val
[]
byte
)
error
{
h
.
hasher
.
Write
(
key
)
h
.
hasher
.
Write
(
val
)
return
nil
}
func
(
h
*
testHasher
)
Hash
()
common
.
Hash
{
return
common
.
BytesToHash
(
h
.
hasher
.
Sum
(
nil
))
}
func
TestRPCMarshalBlock
(
t
*
testing
.
T
)
{
var
(
txs
[]
*
types
.
Transaction
to
=
common
.
BytesToAddress
([]
byte
{
0x11
})
)
for
i
:=
uint64
(
1
);
i
<=
4
;
i
++
{
var
tx
*
types
.
Transaction
if
i
%
2
==
0
{
tx
=
types
.
NewTx
(
&
types
.
LegacyTx
{
Nonce
:
i
,
GasPrice
:
big
.
NewInt
(
11111
),
Gas
:
1111
,
To
:
&
to
,
Value
:
big
.
NewInt
(
111
),
Data
:
[]
byte
{
0x11
,
0x11
,
0x11
},
})
}
else
{
tx
=
types
.
NewTx
(
&
types
.
AccessListTx
{
ChainID
:
big
.
NewInt
(
1337
),
Nonce
:
i
,
GasPrice
:
big
.
NewInt
(
11111
),
Gas
:
1111
,
To
:
&
to
,
Value
:
big
.
NewInt
(
111
),
Data
:
[]
byte
{
0x11
,
0x11
,
0x11
},
})
}
txs
=
append
(
txs
,
tx
)
}
block
:=
types
.
NewBlock
(
&
types
.
Header
{
Number
:
big
.
NewInt
(
100
)},
txs
,
nil
,
nil
,
newHasher
())
var
testSuite
=
[]
struct
{
inclTx
bool
fullTx
bool
want
string
}{
// without txs
{
inclTx
:
false
,
fullTx
:
false
,
want
:
`{"difficulty":"0x0","extraData":"0x","gasLimit":"0x0","gasUsed":"0x0","hash":"0x9b73c83b25d0faf7eab854e3684c7e394336d6e135625aafa5c183f27baa8fee","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x0000000000000000000000000000000000000000","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","number":"0x64","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x296","stateRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","timestamp":"0x0","transactionsRoot":"0x661a9febcfa8f1890af549b874faf9fa274aede26ef489d9db0b25daa569450e","uncles":[]}`
,
},
// only tx hashes
{
inclTx
:
true
,
fullTx
:
false
,
want
:
`{"difficulty":"0x0","extraData":"0x","gasLimit":"0x0","gasUsed":"0x0","hash":"0x9b73c83b25d0faf7eab854e3684c7e394336d6e135625aafa5c183f27baa8fee","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x0000000000000000000000000000000000000000","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","number":"0x64","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x296","stateRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","timestamp":"0x0","transactions":["0x7d39df979e34172322c64983a9ad48302c2b889e55bda35324afecf043a77605","0x9bba4c34e57c875ff57ac8d172805a26ae912006985395dc1bdf8f44140a7bf4","0x98909ea1ff040da6be56bc4231d484de1414b3c1dac372d69293a4beb9032cb5","0x12e1f81207b40c3bdcc13c0ee18f5f86af6d31754d57a0ea1b0d4cfef21abef1"],"transactionsRoot":"0x661a9febcfa8f1890af549b874faf9fa274aede26ef489d9db0b25daa569450e","uncles":[]}`
,
},
// full tx details
{
inclTx
:
true
,
fullTx
:
true
,
want
:
`{"difficulty":"0x0","extraData":"0x","gasLimit":"0x0","gasUsed":"0x0","hash":"0x9b73c83b25d0faf7eab854e3684c7e394336d6e135625aafa5c183f27baa8fee","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x0000000000000000000000000000000000000000","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","number":"0x64","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x296","stateRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","timestamp":"0x0","transactions":[{"blockHash":"0x9b73c83b25d0faf7eab854e3684c7e394336d6e135625aafa5c183f27baa8fee","blockNumber":"0x64","from":"0x0000000000000000000000000000000000000000","gas":"0x457","gasPrice":"0x2b67","hash":"0x7d39df979e34172322c64983a9ad48302c2b889e55bda35324afecf043a77605","input":"0x111111","nonce":"0x1","to":"0x0000000000000000000000000000000000000011","transactionIndex":"0x0","value":"0x6f","type":"0x1","accessList":[],"chainId":"0x539","v":"0x0","r":"0x0","s":"0x0"},{"blockHash":"0x9b73c83b25d0faf7eab854e3684c7e394336d6e135625aafa5c183f27baa8fee","blockNumber":"0x64","from":"0x0000000000000000000000000000000000000000","gas":"0x457","gasPrice":"0x2b67","hash":"0x9bba4c34e57c875ff57ac8d172805a26ae912006985395dc1bdf8f44140a7bf4","input":"0x111111","nonce":"0x2","to":"0x0000000000000000000000000000000000000011","transactionIndex":"0x1","value":"0x6f","type":"0x0","chainId":"0x7fffffffffffffee","v":"0x0","r":"0x0","s":"0x0"},{"blockHash":"0x9b73c83b25d0faf7eab854e3684c7e394336d6e135625aafa5c183f27baa8fee","blockNumber":"0x64","from":"0x0000000000000000000000000000000000000000","gas":"0x457","gasPrice":"0x2b67","hash":"0x98909ea1ff040da6be56bc4231d484de1414b3c1dac372d69293a4beb9032cb5","input":"0x111111","nonce":"0x3","to":"0x0000000000000000000000000000000000000011","transactionIndex":"0x2","value":"0x6f","type":"0x1","accessList":[],"chainId":"0x539","v":"0x0","r":"0x0","s":"0x0"},{"blockHash":"0x9b73c83b25d0faf7eab854e3684c7e394336d6e135625aafa5c183f27baa8fee","blockNumber":"0x64","from":"0x0000000000000000000000000000000000000000","gas":"0x457","gasPrice":"0x2b67","hash":"0x12e1f81207b40c3bdcc13c0ee18f5f86af6d31754d57a0ea1b0d4cfef21abef1","input":"0x111111","nonce":"0x4","to":"0x0000000000000000000000000000000000000011","transactionIndex":"0x3","value":"0x6f","type":"0x0","chainId":"0x7fffffffffffffee","v":"0x0","r":"0x0","s":"0x0"}],"transactionsRoot":"0x661a9febcfa8f1890af549b874faf9fa274aede26ef489d9db0b25daa569450e","uncles":[]}`
,
},
}
for
i
,
tc
:=
range
testSuite
{
resp
,
err
:=
RPCMarshalBlock
(
block
,
tc
.
inclTx
,
tc
.
fullTx
,
params
.
MainnetChainConfig
)
if
err
!=
nil
{
t
.
Errorf
(
"test %d: got error %v"
,
i
,
err
)
continue
}
out
,
err
:=
json
.
Marshal
(
resp
)
if
err
!=
nil
{
t
.
Errorf
(
"test %d: json marshal error: %v"
,
i
,
err
)
continue
}
if
have
:=
string
(
out
);
have
!=
tc
.
want
{
t
.
Errorf
(
"test %d: want: %s have: %s"
,
i
,
tc
.
want
,
have
)
}
}
}
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