github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/core/vm/memory_table.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:36</date>
    10  //</624450083043151872>
    11  
    12  
    13  package vm
    14  
    15  import (
    16  	"math/big"
    17  
    18  	"github.com/ethereum/go-ethereum/common/math"
    19  )
    20  
    21  func memorySha3(stack *Stack) *big.Int {
    22  	return calcMemSize(stack.Back(0), stack.Back(1))
    23  }
    24  
    25  func memoryCallDataCopy(stack *Stack) *big.Int {
    26  	return calcMemSize(stack.Back(0), stack.Back(2))
    27  }
    28  
    29  func memoryReturnDataCopy(stack *Stack) *big.Int {
    30  	return calcMemSize(stack.Back(0), stack.Back(2))
    31  }
    32  
    33  func memoryCodeCopy(stack *Stack) *big.Int {
    34  	return calcMemSize(stack.Back(0), stack.Back(2))
    35  }
    36  
    37  func memoryExtCodeCopy(stack *Stack) *big.Int {
    38  	return calcMemSize(stack.Back(1), stack.Back(3))
    39  }
    40  
    41  func memoryMLoad(stack *Stack) *big.Int {
    42  	return calcMemSize(stack.Back(0), big.NewInt(32))
    43  }
    44  
    45  func memoryMStore8(stack *Stack) *big.Int {
    46  	return calcMemSize(stack.Back(0), big.NewInt(1))
    47  }
    48  
    49  func memoryMStore(stack *Stack) *big.Int {
    50  	return calcMemSize(stack.Back(0), big.NewInt(32))
    51  }
    52  
    53  func memoryCreate(stack *Stack) *big.Int {
    54  	return calcMemSize(stack.Back(1), stack.Back(2))
    55  }
    56  
    57  func memoryCreate2(stack *Stack) *big.Int {
    58  	return calcMemSize(stack.Back(1), stack.Back(2))
    59  }
    60  
    61  func memoryCall(stack *Stack) *big.Int {
    62  	x := calcMemSize(stack.Back(5), stack.Back(6))
    63  	y := calcMemSize(stack.Back(3), stack.Back(4))
    64  
    65  	return math.BigMax(x, y)
    66  }
    67  
    68  func memoryDelegateCall(stack *Stack) *big.Int {
    69  	x := calcMemSize(stack.Back(4), stack.Back(5))
    70  	y := calcMemSize(stack.Back(2), stack.Back(3))
    71  
    72  	return math.BigMax(x, y)
    73  }
    74  
    75  func memoryStaticCall(stack *Stack) *big.Int {
    76  	x := calcMemSize(stack.Back(4), stack.Back(5))
    77  	y := calcMemSize(stack.Back(2), stack.Back(3))
    78  
    79  	return math.BigMax(x, y)
    80  }
    81  
    82  func memoryReturn(stack *Stack) *big.Int {
    83  	return calcMemSize(stack.Back(0), stack.Back(1))
    84  }
    85  
    86  func memoryRevert(stack *Stack) *big.Int {
    87  	return calcMemSize(stack.Back(0), stack.Back(1))
    88  }
    89  
    90  func memoryLog(stack *Stack) *big.Int {
    91  	mSize, mStart := stack.Back(1), stack.Back(0)
    92  	return calcMemSize(mStart, mSize)
    93  }
    94