utils.go 3.99 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
			"getTransactionReceipt",
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 136
		},
		"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",
		},
	}
)

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

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

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

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

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

	return ""
}