utils.go 3.68 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
		"debug": []string{
			"dumpBlock",
			"getBlockRlp",
39
			"metrics",
40 41 42 43 44 45 46 47
			"printBlock",
			"processBlock",
			"seedHash",
			"setHead",
		},
		"eth": []string{
			"accounts",
			"blockNumber",
48 49
			"call",
			"contract",
50
			"coinbase",
51 52 53 54 55 56 57 58 59 60 61 62 63 64
			"compile.lll",
			"compile.serpent",
			"compile.solidity",
			"contract",
			"defaultAccount",
			"defaultBlock",
			"estimateGas",
			"filter",
			"getBalance",
			"getBlock",
			"getBlockTransactionCount",
			"getBlockUncleCount",
			"getCode",
			"getCompilers",
65 66
			"gasPrice",
			"getStorageAt",
67
			"getTransaction",
68
			"getTransactionCount",
69 70 71
			"getTransactionFromBlock",
			"getTransactionReceipt",
			"getUncle",
72
			"hashrate",
73 74
			"mining",
			"namereg",
75
			"pendingTransactions",
Bas van Kervel's avatar
Bas van Kervel committed
76
			"resend",
77 78 79
			"sendRawTransaction",
			"sendTransaction",
			"sign",
80 81 82 83 84 85 86 87 88 89 90 91 92 93
		},
		"miner": []string{
			"hashrate",
			"makeDAG",
			"setExtra",
			"setGasPrice",
			"startAutoDAG",
			"start",
			"stopAutoDAG",
			"stop",
		},
		"net": []string{
			"peerCount",
			"listening",
94 95
			"version",
			"peers",
96 97 98 99 100 101 102 103 104
		},
		"personal": []string{
			"listAccounts",
			"newAccount",
			"deleteAccount",
			"unlockAccount",
		},
		"shh": []string{
			"post",
105
			"newIdentify",
106
			"hasIdentity",
107 108 109
			"newGroup",
			"addToGroup",
			"filter",
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
		},
		"txpool": []string{
			"status",
		},
		"web3": []string{
			"sha3",
			"version",
			"fromWei",
			"toWei",
			"toHex",
			"toAscii",
			"fromAscii",
			"toBigNumber",
			"isAddress",
		},
	}
)

128
// Parse a comma separated API string to individual api's
129
func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.Ethereum) ([]shared.EthereumApi, error) {
130 131 132 133 134
	if len(strings.TrimSpace(apistr)) == 0 {
		return nil, fmt.Errorf("Empty apistr provided")
	}

	names := strings.Split(apistr, ",")
135
	apis := make([]shared.EthereumApi, len(names))
136 137 138

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

	return apis, nil
}
Bas van Kervel's avatar
Bas van Kervel committed
166 167 168

func Javascript(name string) string {
	switch strings.ToLower(strings.TrimSpace(name)) {
169
	case shared.AdminApiName:
Bas van Kervel's avatar
Bas van Kervel committed
170
		return Admin_JS
171
	case shared.DebugApiName:
Bas van Kervel's avatar
Bas van Kervel committed
172
		return Debug_JS
173
	case shared.DbApiName:
Bas van Kervel's avatar
Bas van Kervel committed
174
		return Db_JS
Bas van Kervel's avatar
Bas van Kervel committed
175 176
	case shared.EthApiName:
		return Eth_JS
177
	case shared.MinerApiName:
Bas van Kervel's avatar
Bas van Kervel committed
178
		return Miner_JS
179
	case shared.NetApiName:
Bas van Kervel's avatar
Bas van Kervel committed
180
		return Net_JS
181
	case shared.ShhApiName:
Bas van Kervel's avatar
Bas van Kervel committed
182
		return Shh_JS
183
	case shared.TxPoolApiName:
Bas van Kervel's avatar
Bas van Kervel committed
184
		return TxPool_JS
185
	case shared.PersonalApiName:
Bas van Kervel's avatar
Bas van Kervel committed
186
		return Personal_JS
Bas van Kervel's avatar
Bas van Kervel committed
187 188 189 190
	}

	return ""
}