| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2015 The go-ethereum Authors | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // This file is part of the go-ethereum library. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-23 18:35:11 +02:00
										 |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // 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. | 
					
						
							|  |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/eth" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/rpc/codec" | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/rpc/shared" | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/xeth" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | var ( | 
					
						
							|  |  |  | 	// Mapping between the different methods each api supports | 
					
						
							|  |  |  | 	AutoCompletion = map[string][]string{ | 
					
						
							|  |  |  | 		"admin": []string{ | 
					
						
							|  |  |  | 			"addPeer", | 
					
						
							| 
									
										
										
										
											2015-07-31 12:46:16 +03:00
										 |  |  | 			"chainSyncStatus", | 
					
						
							|  |  |  | 			"datadir", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"exportChain", | 
					
						
							| 
									
										
										
										
											2015-07-31 12:46:16 +03:00
										 |  |  | 			"getContractInfo", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"importChain", | 
					
						
							| 
									
										
										
										
											2015-07-31 12:46:16 +03:00
										 |  |  | 			"nodeInfo", | 
					
						
							|  |  |  | 			"peers", | 
					
						
							|  |  |  | 			"register", | 
					
						
							|  |  |  | 			"registerUrl", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"setSolc", | 
					
						
							| 
									
										
										
										
											2015-07-31 12:46:16 +03:00
										 |  |  | 			"sleepBlocks", | 
					
						
							|  |  |  | 			"startNatSpec", | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 			"startRPC", | 
					
						
							| 
									
										
										
										
											2015-07-31 12:46:16 +03:00
										 |  |  | 			"stopNatSpec", | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 			"stopRPC", | 
					
						
							| 
									
										
										
										
											2015-07-31 12:46:16 +03:00
										 |  |  | 			"verbosity", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2015-06-16 14:59:39 +02:00
										 |  |  | 		"db": []string{ | 
					
						
							|  |  |  | 			"getString", | 
					
						
							|  |  |  | 			"putString", | 
					
						
							|  |  |  | 			"getHex", | 
					
						
							|  |  |  | 			"putHex", | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		"debug": []string{ | 
					
						
							|  |  |  | 			"dumpBlock", | 
					
						
							|  |  |  | 			"getBlockRlp", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"metrics", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"printBlock", | 
					
						
							|  |  |  | 			"processBlock", | 
					
						
							|  |  |  | 			"seedHash", | 
					
						
							|  |  |  | 			"setHead", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"eth": []string{ | 
					
						
							|  |  |  | 			"accounts", | 
					
						
							|  |  |  | 			"blockNumber", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"call", | 
					
						
							|  |  |  | 			"contract", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"coinbase", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"compile.lll", | 
					
						
							|  |  |  | 			"compile.serpent", | 
					
						
							|  |  |  | 			"compile.solidity", | 
					
						
							|  |  |  | 			"contract", | 
					
						
							|  |  |  | 			"defaultAccount", | 
					
						
							|  |  |  | 			"defaultBlock", | 
					
						
							|  |  |  | 			"estimateGas", | 
					
						
							|  |  |  | 			"filter", | 
					
						
							|  |  |  | 			"getBalance", | 
					
						
							|  |  |  | 			"getBlock", | 
					
						
							|  |  |  | 			"getBlockTransactionCount", | 
					
						
							|  |  |  | 			"getBlockUncleCount", | 
					
						
							|  |  |  | 			"getCode", | 
					
						
							|  |  |  | 			"getCompilers", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"gasPrice", | 
					
						
							|  |  |  | 			"getStorageAt", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"getTransaction", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"getTransactionCount", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"getTransactionFromBlock", | 
					
						
							|  |  |  | 			"getTransactionReceipt", | 
					
						
							|  |  |  | 			"getUncle", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"hashrate", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"mining", | 
					
						
							|  |  |  | 			"namereg", | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 			"pendingTransactions", | 
					
						
							| 
									
										
										
										
											2015-06-24 14:56:53 +02:00
										 |  |  | 			"resend", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"sendRawTransaction", | 
					
						
							|  |  |  | 			"sendTransaction", | 
					
						
							|  |  |  | 			"sign", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		"miner": []string{ | 
					
						
							|  |  |  | 			"hashrate", | 
					
						
							|  |  |  | 			"makeDAG", | 
					
						
							| 
									
										
										
										
											2015-07-31 12:46:16 +03:00
										 |  |  | 			"setEtherbase", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"setExtra", | 
					
						
							|  |  |  | 			"setGasPrice", | 
					
						
							|  |  |  | 			"startAutoDAG", | 
					
						
							|  |  |  | 			"start", | 
					
						
							|  |  |  | 			"stopAutoDAG", | 
					
						
							|  |  |  | 			"stop", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"net": []string{ | 
					
						
							|  |  |  | 			"peerCount", | 
					
						
							|  |  |  | 			"listening", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"personal": []string{ | 
					
						
							|  |  |  | 			"listAccounts", | 
					
						
							|  |  |  | 			"newAccount", | 
					
						
							|  |  |  | 			"deleteAccount", | 
					
						
							|  |  |  | 			"unlockAccount", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"shh": []string{ | 
					
						
							|  |  |  | 			"post", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"newIdentify", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"hasIdentity", | 
					
						
							| 
									
										
										
										
											2015-07-06 13:08:08 +02:00
										 |  |  | 			"newGroup", | 
					
						
							|  |  |  | 			"addToGroup", | 
					
						
							|  |  |  | 			"filter", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		"txpool": []string{ | 
					
						
							|  |  |  | 			"status", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"web3": []string{ | 
					
						
							|  |  |  | 			"sha3", | 
					
						
							|  |  |  | 			"version", | 
					
						
							|  |  |  | 			"fromWei", | 
					
						
							|  |  |  | 			"toWei", | 
					
						
							|  |  |  | 			"toHex", | 
					
						
							|  |  |  | 			"toAscii", | 
					
						
							|  |  |  | 			"fromAscii", | 
					
						
							|  |  |  | 			"toBigNumber", | 
					
						
							|  |  |  | 			"isAddress", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | // Parse a comma separated API string to individual api's | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.Ethereum) ([]shared.EthereumApi, error) { | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 	if len(strings.TrimSpace(apistr)) == 0 { | 
					
						
							|  |  |  | 		return nil, fmt.Errorf("Empty apistr provided") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	names := strings.Split(apistr, ",") | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	apis := make([]shared.EthereumApi, len(names)) | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	for i, name := range names { | 
					
						
							|  |  |  | 		switch strings.ToLower(strings.TrimSpace(name)) { | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.AdminApiName: | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 			apis[i] = NewAdminApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.DebugApiName: | 
					
						
							| 
									
										
										
										
											2015-06-09 09:48:18 +02:00
										 |  |  | 			apis[i] = NewDebugApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.DbApiName: | 
					
						
							| 
									
										
										
										
											2015-06-16 14:59:39 +02:00
										 |  |  | 			apis[i] = NewDbApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.EthApiName: | 
					
						
							| 
									
										
										
										
											2015-06-24 13:53:37 +02:00
										 |  |  | 			apis[i] = NewEthApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.MinerApiName: | 
					
						
							| 
									
										
										
										
											2015-06-08 14:42:15 +02:00
										 |  |  | 			apis[i] = NewMinerApi(eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.NetApiName: | 
					
						
							| 
									
										
										
										
											2015-06-08 14:50:11 +02:00
										 |  |  | 			apis[i] = NewNetApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.ShhApiName: | 
					
						
							| 
									
										
										
										
											2015-06-10 12:35:12 +02:00
										 |  |  | 			apis[i] = NewShhApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.TxPoolApiName: | 
					
						
							| 
									
										
										
										
											2015-06-10 10:37:10 +02:00
										 |  |  | 			apis[i] = NewTxPoolApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.PersonalApiName: | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 			apis[i] = NewPersonalApi(xeth, eth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 		case shared.Web3ApiName: | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 			apis[i] = NewWeb3Api(xeth, codec) | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 		default: | 
					
						
							|  |  |  | 			return nil, fmt.Errorf("Unknown API '%s'", name) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return apis, nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-06-08 14:42:15 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | func Javascript(name string) string { | 
					
						
							|  |  |  | 	switch strings.ToLower(strings.TrimSpace(name)) { | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.AdminApiName: | 
					
						
							| 
									
										
										
										
											2015-06-09 16:06:51 +02:00
										 |  |  | 		return Admin_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.DebugApiName: | 
					
						
							| 
									
										
										
										
											2015-06-09 09:48:18 +02:00
										 |  |  | 		return Debug_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.DbApiName: | 
					
						
							| 
									
										
										
										
											2015-06-16 14:59:39 +02:00
										 |  |  | 		return Db_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 13:19:59 +02:00
										 |  |  | 	case shared.EthApiName: | 
					
						
							|  |  |  | 		return Eth_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.MinerApiName: | 
					
						
							| 
									
										
										
										
											2015-06-08 14:42:15 +02:00
										 |  |  | 		return Miner_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.NetApiName: | 
					
						
							| 
									
										
										
										
											2015-06-08 14:50:11 +02:00
										 |  |  | 		return Net_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.ShhApiName: | 
					
						
							| 
									
										
										
										
											2015-06-10 12:35:12 +02:00
										 |  |  | 		return Shh_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.TxPoolApiName: | 
					
						
							| 
									
										
										
										
											2015-06-10 10:37:10 +02:00
										 |  |  | 		return TxPool_JS | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 	case shared.PersonalApiName: | 
					
						
							| 
									
										
										
										
											2015-06-09 10:59:44 +02:00
										 |  |  | 		return Personal_JS | 
					
						
							| 
									
										
										
										
											2015-06-08 14:42:15 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return "" | 
					
						
							|  |  |  | } |