| 
									
										
										
										
											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", | 
					
						
							|  |  |  | 			"peers", | 
					
						
							|  |  |  | 			"nodeInfo", | 
					
						
							|  |  |  | 			"exportChain", | 
					
						
							|  |  |  | 			"importChain", | 
					
						
							|  |  |  | 			"verbosity", | 
					
						
							|  |  |  | 			"chainSyncStatus", | 
					
						
							|  |  |  | 			"setSolc", | 
					
						
							|  |  |  | 			"datadir", | 
					
						
							| 
									
										
										
										
											2015-06-22 12:47:32 +02:00
										 |  |  | 			"startRPC", | 
					
						
							|  |  |  | 			"stopRPC", | 
					
						
							| 
									
										
										
										
											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", | 
					
						
							|  |  |  | 			"printBlock", | 
					
						
							|  |  |  | 			"processBlock", | 
					
						
							|  |  |  | 			"seedHash", | 
					
						
							|  |  |  | 			"setHead", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"eth": []string{ | 
					
						
							|  |  |  | 			"accounts", | 
					
						
							|  |  |  | 			"blockNumber", | 
					
						
							|  |  |  | 			"getBalance", | 
					
						
							|  |  |  | 			"protocolVersion", | 
					
						
							|  |  |  | 			"coinbase", | 
					
						
							|  |  |  | 			"mining", | 
					
						
							|  |  |  | 			"gasPrice", | 
					
						
							|  |  |  | 			"getStorage", | 
					
						
							|  |  |  | 			"storageAt", | 
					
						
							|  |  |  | 			"getStorageAt", | 
					
						
							|  |  |  | 			"getTransactionCount", | 
					
						
							|  |  |  | 			"getBlockTransactionCountByHash", | 
					
						
							|  |  |  | 			"getBlockTransactionCountByNumber", | 
					
						
							|  |  |  | 			"getUncleCountByBlockHash", | 
					
						
							|  |  |  | 			"getUncleCountByBlockNumber", | 
					
						
							|  |  |  | 			"getData", | 
					
						
							|  |  |  | 			"getCode", | 
					
						
							|  |  |  | 			"sign", | 
					
						
							| 
									
										
										
										
											2015-06-16 00:06:28 -04:00
										 |  |  | 			"sendRawTransaction", | 
					
						
							| 
									
										
										
										
											2015-06-08 10:23:54 +02:00
										 |  |  | 			"sendTransaction", | 
					
						
							|  |  |  | 			"transact", | 
					
						
							|  |  |  | 			"estimateGas", | 
					
						
							|  |  |  | 			"call", | 
					
						
							|  |  |  | 			"flush", | 
					
						
							|  |  |  | 			"getBlockByHash", | 
					
						
							|  |  |  | 			"getBlockByNumber", | 
					
						
							|  |  |  | 			"getTransactionByHash", | 
					
						
							|  |  |  | 			"getTransactionByBlockHashAndIndex", | 
					
						
							|  |  |  | 			"getUncleByBlockHashAndIndex", | 
					
						
							|  |  |  | 			"getUncleByBlockNumberAndIndex", | 
					
						
							|  |  |  | 			"getCompilers", | 
					
						
							|  |  |  | 			"compileSolidity", | 
					
						
							|  |  |  | 			"newFilter", | 
					
						
							|  |  |  | 			"newBlockFilter", | 
					
						
							|  |  |  | 			"newPendingTransactionFilter", | 
					
						
							|  |  |  | 			"uninstallFilter", | 
					
						
							|  |  |  | 			"getFilterChanges", | 
					
						
							|  |  |  | 			"getFilterLogs", | 
					
						
							|  |  |  | 			"getLogs", | 
					
						
							|  |  |  | 			"hashrate", | 
					
						
							|  |  |  | 			"getWork", | 
					
						
							|  |  |  | 			"submitWork", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"miner": []string{ | 
					
						
							|  |  |  | 			"hashrate", | 
					
						
							|  |  |  | 			"makeDAG", | 
					
						
							|  |  |  | 			"setExtra", | 
					
						
							|  |  |  | 			"setGasPrice", | 
					
						
							|  |  |  | 			"startAutoDAG", | 
					
						
							|  |  |  | 			"start", | 
					
						
							|  |  |  | 			"stopAutoDAG", | 
					
						
							|  |  |  | 			"stop", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"net": []string{ | 
					
						
							|  |  |  | 			"peerCount", | 
					
						
							|  |  |  | 			"listening", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"personal": []string{ | 
					
						
							|  |  |  | 			"listAccounts", | 
					
						
							|  |  |  | 			"newAccount", | 
					
						
							|  |  |  | 			"deleteAccount", | 
					
						
							|  |  |  | 			"unlockAccount", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"shh": []string{ | 
					
						
							|  |  |  | 			"version", | 
					
						
							|  |  |  | 			"post", | 
					
						
							|  |  |  | 			"hasIdentity", | 
					
						
							|  |  |  | 			"newIdentity", | 
					
						
							|  |  |  | 			"newFilter", | 
					
						
							|  |  |  | 			"uninstallFilter", | 
					
						
							|  |  |  | 			"getFilterChanges", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		"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-08 10:23:54 +02:00
										 |  |  | 			apis[i] = NewEthApi(xeth, 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 "" | 
					
						
							|  |  |  | } |