| 
									
										
										
										
											2014-10-23 14:04:00 +02:00
										 |  |  | package vm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2015-04-02 05:17:15 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/params" | 
					
						
							| 
									
										
										
										
											2014-10-23 14:04:00 +02:00
										 |  |  | 	"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 { | 
					
						
							| 
									
										
										
										
											2015-04-02 05:17:15 +02:00
										 |  |  | 	return fmt.Sprintf("Max call depth exceeded (%d)", params.CallCreateDepth) | 
					
						
							| 
									
										
										
										
											2014-10-23 14:04:00 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func IsDepthErr(err error) bool { | 
					
						
							|  |  |  | 	_, ok := err.(DepthError) | 
					
						
							|  |  |  | 	return ok | 
					
						
							|  |  |  | } |