120 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			120 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // 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 ethapi implements the general Ethereum API functions. | ||
|  | package ethapi | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"math/big" | ||
|  | 
 | ||
|  | 	"github.com/ethereum/go-ethereum/accounts" | ||
|  | 	"github.com/ethereum/go-ethereum/common" | ||
|  | 	"github.com/ethereum/go-ethereum/common/compiler" | ||
|  | 	"github.com/ethereum/go-ethereum/core" | ||
|  | 	"github.com/ethereum/go-ethereum/core/types" | ||
|  | 	"github.com/ethereum/go-ethereum/core/vm" | ||
|  | 	"github.com/ethereum/go-ethereum/eth/downloader" | ||
|  | 	"github.com/ethereum/go-ethereum/ethdb" | ||
|  | 	"github.com/ethereum/go-ethereum/event" | ||
|  | 	"github.com/ethereum/go-ethereum/rpc" | ||
|  | 	"golang.org/x/net/context" | ||
|  | ) | ||
|  | 
 | ||
|  | // Backend interface provides the common API services (that are provided by | ||
|  | // both full and light clients) with access to necessary functions. | ||
|  | type Backend interface { | ||
|  | 	// general Ethereum API | ||
|  | 	Downloader() *downloader.Downloader | ||
|  | 	ProtocolVersion() int | ||
|  | 	SuggestPrice(ctx context.Context) (*big.Int, error) | ||
|  | 	ChainDb() ethdb.Database | ||
|  | 	EventMux() *event.TypeMux | ||
|  | 	AccountManager() *accounts.Manager | ||
|  | 	// BlockChain API | ||
|  | 	SetHead(number uint64) | ||
|  | 	HeaderByNumber(blockNr rpc.BlockNumber) *types.Header | ||
|  | 	BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error) | ||
|  | 	StateAndHeaderByNumber(blockNr rpc.BlockNumber) (State, *types.Header, error) | ||
|  | 	GetBlock(ctx context.Context, blockHash common.Hash) (*types.Block, error) | ||
|  | 	GetReceipts(ctx context.Context, blockHash common.Hash) (types.Receipts, error) | ||
|  | 	GetTd(blockHash common.Hash) *big.Int | ||
|  | 	GetVMEnv(ctx context.Context, msg core.Message, state State, header *types.Header) (vm.Environment, func() error, error) | ||
|  | 	// TxPool API | ||
|  | 	SendTx(ctx context.Context, signedTx *types.Transaction) error | ||
|  | 	RemoveTx(txHash common.Hash) | ||
|  | 	GetPoolTransactions() types.Transactions | ||
|  | 	GetPoolTransaction(txHash common.Hash) *types.Transaction | ||
|  | 	GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error) | ||
|  | 	Stats() (pending int, queued int) | ||
|  | 	TxPoolContent() (map[common.Address]map[uint64][]*types.Transaction, map[common.Address]map[uint64][]*types.Transaction) | ||
|  | } | ||
|  | 
 | ||
|  | type State interface { | ||
|  | 	GetBalance(ctx context.Context, addr common.Address) (*big.Int, error) | ||
|  | 	GetCode(ctx context.Context, addr common.Address) ([]byte, error) | ||
|  | 	GetState(ctx context.Context, a common.Address, b common.Hash) (common.Hash, error) | ||
|  | 	GetNonce(ctx context.Context, addr common.Address) (uint64, error) | ||
|  | } | ||
|  | 
 | ||
|  | func GetAPIs(apiBackend Backend, solcPath *string, solc **compiler.Solidity) []rpc.API { | ||
|  | 	return []rpc.API{ | ||
|  | 		{ | ||
|  | 			Namespace: "eth", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPublicEthereumAPI(apiBackend, solcPath, solc), | ||
|  | 			Public:    true, | ||
|  | 		}, { | ||
|  | 			Namespace: "eth", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPublicBlockChainAPI(apiBackend), | ||
|  | 			Public:    true, | ||
|  | 		}, { | ||
|  | 			Namespace: "eth", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPublicTransactionPoolAPI(apiBackend), | ||
|  | 			Public:    true, | ||
|  | 		}, { | ||
|  | 			Namespace: "txpool", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPublicTxPoolAPI(apiBackend), | ||
|  | 			Public:    true, | ||
|  | 		}, { | ||
|  | 			Namespace: "admin", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPrivateAdminAPI(apiBackend, solcPath, solc), | ||
|  | 		}, { | ||
|  | 			Namespace: "debug", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPublicDebugAPI(apiBackend), | ||
|  | 			Public:    true, | ||
|  | 		}, { | ||
|  | 			Namespace: "debug", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPrivateDebugAPI(apiBackend), | ||
|  | 		}, { | ||
|  | 			Namespace: "eth", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPublicAccountAPI(apiBackend.AccountManager()), | ||
|  | 			Public:    true, | ||
|  | 		}, { | ||
|  | 			Namespace: "personal", | ||
|  | 			Version:   "1.0", | ||
|  | 			Service:   NewPrivateAccountAPI(apiBackend), | ||
|  | 			Public:    false, | ||
|  | 		}, | ||
|  | 	} | ||
|  | } |