github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/core/vm/stack_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 //</624450083424833536> 11 12 13 package vm 14 15 import ( 16 "fmt" 17 18 "github.com/ethereum/go-ethereum/params" 19 ) 20 21 func makeStackFunc(pop, push int) stackValidationFunc { 22 return func(stack *Stack) error { 23 if err := stack.require(pop); err != nil { 24 return err 25 } 26 27 if stack.len()+push-pop > int(params.StackLimit) { 28 return fmt.Errorf("stack limit reached %d (%d)", stack.len(), params.StackLimit) 29 } 30 return nil 31 } 32 } 33 34 func makeDupStackFunc(n int) stackValidationFunc { 35 return makeStackFunc(n, n+1) 36 } 37 38 func makeSwapStackFunc(n int) stackValidationFunc { 39 return makeStackFunc(n, n) 40 } 41