mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
add delegation designator to witness
This commit is contained in:
parent
9db178c799
commit
75a43aed6c
4 changed files with 11 additions and 2 deletions
|
|
@ -86,7 +86,7 @@ func blockTestCmd(ctx *cli.Context) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
test := tests[name]
|
test := tests[name]
|
||||||
if err := test.Run(false, rawdb.HashScheme, false, tracer, func(res error, chain *core.BlockChain) {
|
if err := test.Run(false, rawdb.HashScheme, true, tracer, func(res error, chain *core.BlockChain) {
|
||||||
if ctx.Bool(DumpFlag.Name) {
|
if ctx.Bool(DumpFlag.Name) {
|
||||||
if state, _ := chain.State(); state != nil {
|
if state, _ := chain.State(); state != nil {
|
||||||
fmt.Println(string(state.Dump(nil)))
|
fmt.Println(string(state.Dump(nil)))
|
||||||
|
|
|
||||||
|
|
@ -479,8 +479,11 @@ func (st *StateTransition) TransitionDb() (*ExecutionResult, error) {
|
||||||
}
|
}
|
||||||
// Check the authority account 1) doesn't have code or has exisiting
|
// Check the authority account 1) doesn't have code or has exisiting
|
||||||
// delegation 2) matches the auth's nonce
|
// delegation 2) matches the auth's nonce
|
||||||
st.state.AddAddressToAccessList(authority)
|
|
||||||
code := st.state.GetCode(authority)
|
code := st.state.GetCode(authority)
|
||||||
|
st.state.AddAddressToAccessList(authority)
|
||||||
|
if witness := st.state.Witness(); witness != nil {
|
||||||
|
witness.AddCode(code)
|
||||||
|
}
|
||||||
if _, ok := types.ParseDelegation(code); len(code) != 0 && !ok {
|
if _, ok := types.ParseDelegation(code); len(code) != 0 && !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,7 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas
|
||||||
// The contract is a scoped environment for this execution context only.
|
// The contract is a scoped environment for this execution context only.
|
||||||
code := evm.StateDB.ResolveCode(addr)
|
code := evm.StateDB.ResolveCode(addr)
|
||||||
if witness := evm.StateDB.Witness(); witness != nil {
|
if witness := evm.StateDB.Witness(); witness != nil {
|
||||||
|
witness.AddCode(evm.StateDB.GetCode(addr))
|
||||||
witness.AddCode(code)
|
witness.AddCode(code)
|
||||||
}
|
}
|
||||||
if len(code) == 0 {
|
if len(code) == 0 {
|
||||||
|
|
@ -302,6 +303,7 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte,
|
||||||
// The contract is a scoped environment for this execution context only.
|
// The contract is a scoped environment for this execution context only.
|
||||||
contract := NewContract(caller, AccountRef(caller.Address()), value, gas)
|
contract := NewContract(caller, AccountRef(caller.Address()), value, gas)
|
||||||
if witness := evm.StateDB.Witness(); witness != nil {
|
if witness := evm.StateDB.Witness(); witness != nil {
|
||||||
|
witness.AddCode(evm.StateDB.GetCode(addrCopy))
|
||||||
witness.AddCode(evm.StateDB.ResolveCode(addrCopy))
|
witness.AddCode(evm.StateDB.ResolveCode(addrCopy))
|
||||||
}
|
}
|
||||||
contract.SetCallCode(&addrCopy, evm.StateDB.ResolveCodeHash(addrCopy), evm.StateDB.ResolveCode(addrCopy))
|
contract.SetCallCode(&addrCopy, evm.StateDB.ResolveCodeHash(addrCopy), evm.StateDB.ResolveCode(addrCopy))
|
||||||
|
|
@ -352,6 +354,7 @@ func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []by
|
||||||
// Initialise a new contract and make initialise the delegate values
|
// Initialise a new contract and make initialise the delegate values
|
||||||
contract := NewContract(caller, AccountRef(caller.Address()), nil, gas).AsDelegate()
|
contract := NewContract(caller, AccountRef(caller.Address()), nil, gas).AsDelegate()
|
||||||
if witness := evm.StateDB.Witness(); witness != nil {
|
if witness := evm.StateDB.Witness(); witness != nil {
|
||||||
|
witness.AddCode(evm.StateDB.GetCode(addrCopy))
|
||||||
witness.AddCode(evm.StateDB.ResolveCode(addrCopy))
|
witness.AddCode(evm.StateDB.ResolveCode(addrCopy))
|
||||||
}
|
}
|
||||||
contract.SetCallCode(&addrCopy, evm.StateDB.ResolveCodeHash(addrCopy), evm.StateDB.ResolveCode(addrCopy))
|
contract.SetCallCode(&addrCopy, evm.StateDB.ResolveCodeHash(addrCopy), evm.StateDB.ResolveCode(addrCopy))
|
||||||
|
|
@ -410,6 +413,7 @@ func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte
|
||||||
// The contract is a scoped environment for this execution context only.
|
// The contract is a scoped environment for this execution context only.
|
||||||
contract := NewContract(caller, AccountRef(addrCopy), new(uint256.Int), gas)
|
contract := NewContract(caller, AccountRef(addrCopy), new(uint256.Int), gas)
|
||||||
if witness := evm.StateDB.Witness(); witness != nil {
|
if witness := evm.StateDB.Witness(); witness != nil {
|
||||||
|
witness.AddCode(evm.StateDB.GetCode(addrCopy))
|
||||||
witness.AddCode(evm.StateDB.ResolveCode(addrCopy))
|
witness.AddCode(evm.StateDB.ResolveCode(addrCopy))
|
||||||
}
|
}
|
||||||
contract.SetCallCode(&addrCopy, evm.StateDB.ResolveCodeHash(addrCopy), evm.StateDB.ResolveCode(addrCopy))
|
contract.SetCallCode(&addrCopy, evm.StateDB.ResolveCodeHash(addrCopy), evm.StateDB.ResolveCode(addrCopy))
|
||||||
|
|
|
||||||
|
|
@ -342,6 +342,7 @@ func opExtCodeSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext)
|
||||||
slot := scope.Stack.peek()
|
slot := scope.Stack.peek()
|
||||||
address := slot.Bytes20()
|
address := slot.Bytes20()
|
||||||
if witness := interpreter.evm.StateDB.Witness(); witness != nil {
|
if witness := interpreter.evm.StateDB.Witness(); witness != nil {
|
||||||
|
witness.AddCode(interpreter.evm.StateDB.GetCode(address))
|
||||||
witness.AddCode(interpreter.evm.StateDB.ResolveCode(address))
|
witness.AddCode(interpreter.evm.StateDB.ResolveCode(address))
|
||||||
}
|
}
|
||||||
slot.SetUint64(uint64(len(interpreter.evm.StateDB.ResolveCode(slot.Bytes20()))))
|
slot.SetUint64(uint64(len(interpreter.evm.StateDB.ResolveCode(slot.Bytes20()))))
|
||||||
|
|
@ -384,6 +385,7 @@ func opExtCodeCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext)
|
||||||
addr := common.Address(a.Bytes20())
|
addr := common.Address(a.Bytes20())
|
||||||
code := interpreter.evm.StateDB.ResolveCode(addr)
|
code := interpreter.evm.StateDB.ResolveCode(addr)
|
||||||
if witness := interpreter.evm.StateDB.Witness(); witness != nil {
|
if witness := interpreter.evm.StateDB.Witness(); witness != nil {
|
||||||
|
witness.AddCode(interpreter.evm.StateDB.GetCode(addr))
|
||||||
witness.AddCode(code)
|
witness.AddCode(code)
|
||||||
}
|
}
|
||||||
codeCopy := getData(code, uint64CodeOffset, length.Uint64())
|
codeCopy := getData(code, uint64CodeOffset, length.Uint64())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue