52 lines
		
	
	
		
			884 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			884 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package vm
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"fmt"
							 | 
						||
| 
								 | 
							
									"math/big"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type OutOfGasError struct {
							 | 
						||
| 
								 | 
							
									req, has *big.Int
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func OOG(req, has *big.Int) OutOfGasError {
							 | 
						||
| 
								 | 
							
									return OutOfGasError{req, has}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (self OutOfGasError) Error() string {
							 | 
						||
| 
								 | 
							
									return fmt.Sprintf("out of gas! require %v, have %v", self.req, self.has)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func IsOOGErr(err error) bool {
							 | 
						||
| 
								 | 
							
									_, ok := err.(OutOfGasError)
							 | 
						||
| 
								 | 
							
									return ok
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type StackError struct {
							 | 
						||
| 
								 | 
							
									req, has int
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func StackErr(req, has int) StackError {
							 | 
						||
| 
								 | 
							
									return StackError{req, has}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (self StackError) Error() string {
							 | 
						||
| 
								 | 
							
									return fmt.Sprintf("stack error! require %v, have %v", self.req, self.has)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func IsStack(err error) bool {
							 | 
						||
| 
								 | 
							
									_, ok := err.(StackError)
							 | 
						||
| 
								 | 
							
									return ok
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type DepthError struct{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (self DepthError) Error() string {
							 | 
						||
| 
								 | 
							
									return fmt.Sprintf("Max call depth exceeded (%d)", MaxCallDepth)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func IsDepthErr(err error) bool {
							 | 
						||
| 
								 | 
							
									_, ok := err.(DepthError)
							 | 
						||
| 
								 | 
							
									return ok
							 | 
						||
| 
								 | 
							
								}
							 |