mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 23:26:44 +00:00
fix(trace): change codeHash to code (#44)
This commit is contained in:
parent
f07050dd0d
commit
a5999cee90
2 changed files with 18 additions and 18 deletions
|
|
@ -47,7 +47,7 @@ type ExtraData struct {
|
|||
// CREATE: sender nonce
|
||||
Nonce *uint64 `json:"nonce,omitempty"`
|
||||
// CALL | CALLCODE | DELEGATECALL | STATICCALL: [tx.to address’s code_hash, stack.nth_last(1) address’s code_hash]
|
||||
CodeHashList []common.Hash `json:"codeHashList,omitempty"`
|
||||
CodeList [][]byte `json:"codeList,omitempty"`
|
||||
// SSTORE | SLOAD: [storageProof]
|
||||
// SELFDESTRUCT: [contract address’s accountProof, stack.nth_last(0) address’s accountProof]
|
||||
// SELFBALANCE: [contract address’s accountProof]
|
||||
|
|
@ -60,20 +60,20 @@ type ExtraData struct {
|
|||
// NewExtraData create, init and return ExtraData
|
||||
func NewExtraData() *ExtraData {
|
||||
return &ExtraData{
|
||||
CodeHashList: make([]common.Hash, 0),
|
||||
ProofList: make([][]string, 0),
|
||||
CodeList: make([][]byte, 0),
|
||||
ProofList: make([][]string, 0),
|
||||
}
|
||||
}
|
||||
|
||||
// SealExtraData doesn't show empty fields.
|
||||
func (e *ExtraData) SealExtraData() *ExtraData {
|
||||
if len(e.CodeHashList) == 0 {
|
||||
e.CodeHashList = nil
|
||||
if len(e.CodeList) == 0 {
|
||||
e.CodeList = nil
|
||||
}
|
||||
if len(e.ProofList) == 0 {
|
||||
e.ProofList = nil
|
||||
}
|
||||
if e.From == nil && e.Nonce == nil && e.CodeHashList == nil && e.ProofList == nil {
|
||||
if e.From == nil && e.Nonce == nil && e.CodeList == nil && e.ProofList == nil {
|
||||
return nil
|
||||
}
|
||||
return e
|
||||
|
|
|
|||
|
|
@ -13,10 +13,10 @@ type traceFunc func(l *StructLogger, scope *ScopeContext, extraData *types.Extra
|
|||
var (
|
||||
// OpcodeExecs the map to load opcodes' trace funcs.
|
||||
OpcodeExecs = map[OpCode][]traceFunc{
|
||||
CALL: {traceToAddressCodeHash, traceLastNAddressCodeHash(1), traceCallerProof, traceLastNAddressProof(1)},
|
||||
CALLCODE: {traceToAddressCodeHash, traceLastNAddressCodeHash(1), traceCallerProof, traceLastNAddressProof(1)},
|
||||
DELEGATECALL: {traceToAddressCodeHash, traceLastNAddressCodeHash(1)},
|
||||
STATICCALL: {traceToAddressCodeHash, traceLastNAddressCodeHash(1)},
|
||||
CALL: {traceToAddressCode, traceLastNAddressCode(1), traceCallerProof, traceLastNAddressProof(1)},
|
||||
CALLCODE: {traceToAddressCode, traceLastNAddressCode(1), traceCallerProof, traceLastNAddressProof(1)},
|
||||
DELEGATECALL: {traceToAddressCode, traceLastNAddressCode(1)},
|
||||
STATICCALL: {traceToAddressCode, traceLastNAddressCode(1)},
|
||||
CREATE: {traceSenderAddress, traceCreatedContractProof, traceNonce},
|
||||
CREATE2: {traceSenderAddress, traceCreatedContractProof},
|
||||
SSTORE: {traceStorageProof},
|
||||
|
|
@ -28,26 +28,26 @@ var (
|
|||
}
|
||||
)
|
||||
|
||||
// traceToAddressCodeHash gets tx.to address’s code_hash
|
||||
func traceToAddressCodeHash(l *StructLogger, scope *ScopeContext, extraData *types.ExtraData) error {
|
||||
// traceToAddressCode gets tx.to address’s code
|
||||
func traceToAddressCode(l *StructLogger, scope *ScopeContext, extraData *types.ExtraData) error {
|
||||
if l.env.To == nil {
|
||||
return nil
|
||||
}
|
||||
codeHash := l.env.StateDB.GetCodeHash(*l.env.To)
|
||||
extraData.CodeHashList = append(extraData.CodeHashList, codeHash)
|
||||
code := l.env.StateDB.GetCode(*l.env.To)
|
||||
extraData.CodeList = append(extraData.CodeList, code)
|
||||
return nil
|
||||
}
|
||||
|
||||
// traceLastNAddressCodeHash
|
||||
func traceLastNAddressCodeHash(n int) traceFunc {
|
||||
// traceLastNAddressCode
|
||||
func traceLastNAddressCode(n int) traceFunc {
|
||||
return func(l *StructLogger, scope *ScopeContext, extraData *types.ExtraData) error {
|
||||
stack := scope.Stack
|
||||
if stack.len() <= n {
|
||||
return nil
|
||||
}
|
||||
address := common.Address(stack.data[stack.len()-1-n].Bytes20())
|
||||
codeHash := l.env.StateDB.GetCodeHash(address)
|
||||
extraData.CodeHashList = append(extraData.CodeHashList, codeHash)
|
||||
code := l.env.StateDB.GetCode(address)
|
||||
extraData.CodeList = append(extraData.CodeList, code)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue