utils.go 3.96 KB
Newer Older
1 2 3 4 5 6 7 8 9
package api

import (
	"strings"

	"fmt"

	"github.com/ethereum/go-ethereum/eth"
	"github.com/ethereum/go-ethereum/rpc/codec"
10
	"github.com/ethereum/go-ethereum/rpc/shared"
11 12 13
	"github.com/ethereum/go-ethereum/xeth"
)

14 15 16 17 18 19 20 21 22 23 24 25 26
var (
	// Mapping between the different methods each api supports
	AutoCompletion = map[string][]string{
		"admin": []string{
			"addPeer",
			"peers",
			"nodeInfo",
			"exportChain",
			"importChain",
			"verbosity",
			"chainSyncStatus",
			"setSolc",
			"datadir",
27 28
			"startRPC",
			"stopRPC",
29
		},
Bas van Kervel's avatar
Bas van Kervel committed
30 31 32 33 34 35
		"db": []string{
			"getString",
			"putString",
			"getHex",
			"putHex",
		},
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
		"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",
Nick Dodson's avatar
Nick Dodson committed
63
			"sendRawTransaction",
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
			"sendTransaction",
			"transact",
			"estimateGas",
			"call",
			"flush",
			"getBlockByHash",
			"getBlockByNumber",
			"getTransactionByHash",
			"getTransactionByBlockHashAndIndex",
			"getUncleByBlockHashAndIndex",
			"getUncleByBlockNumberAndIndex",
			"getCompilers",
			"compileSolidity",
			"newFilter",
			"newBlockFilter",
			"newPendingTransactionFilter",
			"uninstallFilter",
			"getFilterChanges",
			"getFilterLogs",
			"getLogs",
			"hashrate",
			"getWork",
			"submitWork",
87
			"pendingTransactions",
Bas van Kervel's avatar
Bas van Kervel committed
88
			"resend",
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
		},
		"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",
		},
	}
)

136
// Parse a comma separated API string to individual api's
137
func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.Ethereum) ([]shared.EthereumApi, error) {
138 139 140 141 142
	if len(strings.TrimSpace(apistr)) == 0 {
		return nil, fmt.Errorf("Empty apistr provided")
	}

	names := strings.Split(apistr, ",")
143
	apis := make([]shared.EthereumApi, len(names))
144 145 146

	for i, name := range names {
		switch strings.ToLower(strings.TrimSpace(name)) {
147
		case shared.AdminApiName:
Bas van Kervel's avatar
Bas van Kervel committed
148
			apis[i] = NewAdminApi(xeth, eth, codec)
149
		case shared.DebugApiName:
Bas van Kervel's avatar
Bas van Kervel committed
150
			apis[i] = NewDebugApi(xeth, eth, codec)
151
		case shared.DbApiName:
Bas van Kervel's avatar
Bas van Kervel committed
152
			apis[i] = NewDbApi(xeth, eth, codec)
153
		case shared.EthApiName:
154
			apis[i] = NewEthApi(xeth, eth, codec)
155
		case shared.MinerApiName:
Bas van Kervel's avatar
Bas van Kervel committed
156
			apis[i] = NewMinerApi(eth, codec)
157
		case shared.NetApiName:
Bas van Kervel's avatar
Bas van Kervel committed
158
			apis[i] = NewNetApi(xeth, eth, codec)
159
		case shared.ShhApiName:
Bas van Kervel's avatar
Bas van Kervel committed
160
			apis[i] = NewShhApi(xeth, eth, codec)
161
		case shared.TxPoolApiName:
Bas van Kervel's avatar
Bas van Kervel committed
162
			apis[i] = NewTxPoolApi(xeth, eth, codec)
163
		case shared.PersonalApiName:
Bas van Kervel's avatar
Bas van Kervel committed
164
			apis[i] = NewPersonalApi(xeth, eth, codec)
165
		case shared.Web3ApiName:
Bas van Kervel's avatar
Bas van Kervel committed
166
			apis[i] = NewWeb3Api(xeth, codec)
167 168 169 170 171 172 173
		default:
			return nil, fmt.Errorf("Unknown API '%s'", name)
		}
	}

	return apis, nil
}
Bas van Kervel's avatar
Bas van Kervel committed
174 175 176

func Javascript(name string) string {
	switch strings.ToLower(strings.TrimSpace(name)) {
177
	case shared.AdminApiName:
Bas van Kervel's avatar
Bas van Kervel committed
178
		return Admin_JS
179
	case shared.DebugApiName:
Bas van Kervel's avatar
Bas van Kervel committed
180
		return Debug_JS
181
	case shared.DbApiName:
Bas van Kervel's avatar
Bas van Kervel committed
182
		return Db_JS
183 184
	case shared.EthApiName:
		return Eth_JS
185
	case shared.MinerApiName:
Bas van Kervel's avatar
Bas van Kervel committed
186
		return Miner_JS
187
	case shared.NetApiName:
Bas van Kervel's avatar
Bas van Kervel committed
188
		return Net_JS
189
	case shared.ShhApiName:
Bas van Kervel's avatar
Bas van Kervel committed
190
		return Shh_JS
191
	case shared.TxPoolApiName:
Bas van Kervel's avatar
Bas van Kervel committed
192
		return TxPool_JS
193
	case shared.PersonalApiName:
Bas van Kervel's avatar
Bas van Kervel committed
194
		return Personal_JS
Bas van Kervel's avatar
Bas van Kervel committed
195 196 197 198
	}

	return ""
}