|
|
@@ -384,7 +384,7 @@ func opSAR(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *
|
|
|
|
|
|
func opSha3(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {
|
|
|
offset, size := stack.pop(), stack.pop()
|
|
|
- data := memory.Get(offset.Int64(), size.Int64())
|
|
|
+ data := memory.GetPtr(offset.Int64(), size.Int64())
|
|
|
|
|
|
if interpreter.hasher == nil {
|
|
|
interpreter.hasher = sha3.NewLegacyKeccak256().(keccakState)
|
|
|
@@ -602,11 +602,9 @@ func opPop(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *
|
|
|
}
|
|
|
|
|
|
func opMload(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {
|
|
|
- offset := stack.pop()
|
|
|
- val := interpreter.intPool.get().SetBytes(memory.Get(offset.Int64(), 32))
|
|
|
- stack.push(val)
|
|
|
-
|
|
|
- interpreter.intPool.put(offset)
|
|
|
+ v := stack.peek()
|
|
|
+ offset := v.Int64()
|
|
|
+ v.SetBytes(memory.GetPtr(offset, 32))
|
|
|
return nil, nil
|
|
|
}
|
|
|
|
|
|
@@ -691,7 +689,7 @@ func opCreate(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memor
|
|
|
var (
|
|
|
value = stack.pop()
|
|
|
offset, size = stack.pop(), stack.pop()
|
|
|
- input = memory.Get(offset.Int64(), size.Int64())
|
|
|
+ input = memory.GetCopy(offset.Int64(), size.Int64())
|
|
|
gas = contract.Gas
|
|
|
)
|
|
|
if interpreter.evm.chainRules.IsEIP150 {
|
|
|
@@ -725,7 +723,7 @@ func opCreate2(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memo
|
|
|
endowment = stack.pop()
|
|
|
offset, size = stack.pop(), stack.pop()
|
|
|
salt = stack.pop()
|
|
|
- input = memory.Get(offset.Int64(), size.Int64())
|
|
|
+ input = memory.GetCopy(offset.Int64(), size.Int64())
|
|
|
gas = contract.Gas
|
|
|
)
|
|
|
|
|
|
@@ -757,7 +755,7 @@ func opCall(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory
|
|
|
toAddr := common.BigToAddress(addr)
|
|
|
value = math.U256(value)
|
|
|
// Get the arguments from the memory.
|
|
|
- args := memory.Get(inOffset.Int64(), inSize.Int64())
|
|
|
+ args := memory.GetPtr(inOffset.Int64(), inSize.Int64())
|
|
|
|
|
|
if value.Sign() != 0 {
|
|
|
gas += params.CallStipend
|
|
|
@@ -786,7 +784,7 @@ func opCallCode(pc *uint64, interpreter *EVMInterpreter, contract *Contract, mem
|
|
|
toAddr := common.BigToAddress(addr)
|
|
|
value = math.U256(value)
|
|
|
// Get arguments from the memory.
|
|
|
- args := memory.Get(inOffset.Int64(), inSize.Int64())
|
|
|
+ args := memory.GetPtr(inOffset.Int64(), inSize.Int64())
|
|
|
|
|
|
if value.Sign() != 0 {
|
|
|
gas += params.CallStipend
|
|
|
@@ -814,7 +812,7 @@ func opDelegateCall(pc *uint64, interpreter *EVMInterpreter, contract *Contract,
|
|
|
addr, inOffset, inSize, retOffset, retSize := stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop()
|
|
|
toAddr := common.BigToAddress(addr)
|
|
|
// Get arguments from the memory.
|
|
|
- args := memory.Get(inOffset.Int64(), inSize.Int64())
|
|
|
+ args := memory.GetPtr(inOffset.Int64(), inSize.Int64())
|
|
|
|
|
|
ret, returnGas, err := interpreter.evm.DelegateCall(contract, toAddr, args, gas)
|
|
|
if err != nil {
|
|
|
@@ -839,7 +837,7 @@ func opStaticCall(pc *uint64, interpreter *EVMInterpreter, contract *Contract, m
|
|
|
addr, inOffset, inSize, retOffset, retSize := stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop()
|
|
|
toAddr := common.BigToAddress(addr)
|
|
|
// Get arguments from the memory.
|
|
|
- args := memory.Get(inOffset.Int64(), inSize.Int64())
|
|
|
+ args := memory.GetPtr(inOffset.Int64(), inSize.Int64())
|
|
|
|
|
|
ret, returnGas, err := interpreter.evm.StaticCall(contract, toAddr, args, gas)
|
|
|
if err != nil {
|
|
|
@@ -895,7 +893,7 @@ func makeLog(size int) executionFunc {
|
|
|
topics[i] = common.BigToHash(stack.pop())
|
|
|
}
|
|
|
|
|
|
- d := memory.Get(mStart.Int64(), mSize.Int64())
|
|
|
+ d := memory.GetCopy(mStart.Int64(), mSize.Int64())
|
|
|
interpreter.evm.StateDB.AddLog(&types.Log{
|
|
|
Address: contract.Address(),
|
|
|
Topics: topics,
|