| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | // Copyright 2016 The go-ethereum Authors | 
					
						
							|  |  |  | // This file is part of the go-ethereum library. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							|  |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							|  |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package bind | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2016-04-27 16:29:13 +03:00
										 |  |  | 	"errors" | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | 	"math/big" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum" | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/core/types" | 
					
						
							| 
									
										
										
										
											2015-12-16 04:26:23 +01:00
										 |  |  | 	"golang.org/x/net/context" | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | var ( | 
					
						
							|  |  |  | 	// ErrNoCode is returned by call and transact operations for which the requested | 
					
						
							|  |  |  | 	// recipient contract to operate on does not exist in the state db or does not | 
					
						
							|  |  |  | 	// have any code associated with it (i.e. suicided). | 
					
						
							|  |  |  | 	ErrNoCode = errors.New("no contract code at given address") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// This error is raised when attempting to perform a pending state action | 
					
						
							|  |  |  | 	// on a backend that doesn't implement PendingContractCaller. | 
					
						
							|  |  |  | 	ErrNoPendingState = errors.New("backend does not support pending state") | 
					
						
							| 
									
										
										
										
											2016-08-22 23:20:13 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// This error is returned by WaitDeployed if contract creation leaves an | 
					
						
							|  |  |  | 	// empty contract behind. | 
					
						
							|  |  |  | 	ErrNoCodeAfterDeploy = errors.New("no contract code after deployment") | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2016-04-27 16:29:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | // ContractCaller defines the methods needed to allow operating with contract on a read | 
					
						
							|  |  |  | // only basis. | 
					
						
							|  |  |  | type ContractCaller interface { | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | 	// CodeAt returns the code of the given account. This is needed to differentiate | 
					
						
							|  |  |  | 	// between contract internal errors and the local chain being out of sync. | 
					
						
							|  |  |  | 	CodeAt(ctx context.Context, contract common.Address, blockNumber *big.Int) ([]byte, error) | 
					
						
							|  |  |  | 	// ContractCall executes an Ethereum contract call with the specified data as the | 
					
						
							|  |  |  | 	// input. | 
					
						
							|  |  |  | 	CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-05-20 12:29:28 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-22 23:20:13 +02:00
										 |  |  | // DeployBackend wraps the operations needed by WaitMined and WaitDeployed. | 
					
						
							|  |  |  | type DeployBackend interface { | 
					
						
							|  |  |  | 	TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) | 
					
						
							|  |  |  | 	CodeAt(ctx context.Context, account common.Address, blockNumber *big.Int) ([]byte, error) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | // PendingContractCaller defines methods to perform contract calls on the pending state. | 
					
						
							|  |  |  | // Call will try to discover this interface when access to the pending state is requested. | 
					
						
							|  |  |  | // If the backend does not support the pending state, Call returns ErrNoPendingState. | 
					
						
							|  |  |  | type PendingContractCaller interface { | 
					
						
							|  |  |  | 	// PendingCodeAt returns the code of the given account in the pending state. | 
					
						
							|  |  |  | 	PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error) | 
					
						
							|  |  |  | 	// PendingCallContract executes an Ethereum contract call against the pending state. | 
					
						
							|  |  |  | 	PendingCallContract(ctx context.Context, call ethereum.CallMsg) ([]byte, error) | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ContractTransactor defines the methods needed to allow operating with contract | 
					
						
							|  |  |  | // on a write only basis. Beside the transacting method, the remainder are helpers | 
					
						
							|  |  |  | // used when the user does not provide some needed values, but rather leaves it up | 
					
						
							|  |  |  | // to the transactor to decide. | 
					
						
							|  |  |  | type ContractTransactor interface { | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | 	// PendingCodeAt returns the code of the given account in the pending state. | 
					
						
							|  |  |  | 	PendingCodeAt(ctx context.Context, account common.Address) ([]byte, error) | 
					
						
							|  |  |  | 	// PendingNonceAt retrieves the current pending nonce associated with an account. | 
					
						
							|  |  |  | 	PendingNonceAt(ctx context.Context, account common.Address) (uint64, error) | 
					
						
							| 
									
										
										
										
											2016-03-21 14:34:49 +02:00
										 |  |  | 	// SuggestGasPrice retrieves the currently suggested gas price to allow a timely | 
					
						
							|  |  |  | 	// execution of a transaction. | 
					
						
							| 
									
										
										
										
											2015-12-16 04:26:23 +01:00
										 |  |  | 	SuggestGasPrice(ctx context.Context) (*big.Int, error) | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | 	// EstimateGas tries to estimate the gas needed to execute a specific | 
					
						
							| 
									
										
										
										
											2016-03-21 14:34:49 +02:00
										 |  |  | 	// transaction based on the current pending state of the backend blockchain. | 
					
						
							|  |  |  | 	// There is no guarantee that this is the true gas limit requirement as other | 
					
						
							|  |  |  | 	// transactions may be added or removed by miners, but it should provide a basis | 
					
						
							|  |  |  | 	// for setting a reasonable default. | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | 	EstimateGas(ctx context.Context, call ethereum.CallMsg) (usedGas *big.Int, err error) | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | 	// SendTransaction injects the transaction into the pending pool for execution. | 
					
						
							| 
									
										
										
										
											2015-12-16 04:26:23 +01:00
										 |  |  | 	SendTransaction(ctx context.Context, tx *types.Transaction) error | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | // ContractBackend defines the methods needed to work with contracts on a read-write basis. | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | type ContractBackend interface { | 
					
						
							| 
									
										
										
										
											2016-08-22 14:01:28 +02:00
										 |  |  | 	ContractCaller | 
					
						
							|  |  |  | 	ContractTransactor | 
					
						
							| 
									
										
										
										
											2016-03-16 12:48:33 +02:00
										 |  |  | } |