utils.go 3.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
package api

import (
	"strings"

	"fmt"

	"github.com/ethereum/go-ethereum/eth"
	"github.com/ethereum/go-ethereum/rpc/codec"
	"github.com/ethereum/go-ethereum/xeth"
)

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
var (
	// Mapping between the different methods each api supports
	AutoCompletion = map[string][]string{
		"admin": []string{
			"addPeer",
			"peers",
			"nodeInfo",
			"exportChain",
			"importChain",
			"verbosity",
			"chainSyncStatus",
			"setSolc",
			"datadir",
		},
		"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
54
			"sendRawTransaction",
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 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
			"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",
		},
	}
)

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

	names := strings.Split(apistr, ",")
	apis := make([]EthereumApi, len(names))

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

	return apis, nil
}
Bas van Kervel's avatar
Bas van Kervel committed
161 162 163

func Javascript(name string) string {
	switch strings.ToLower(strings.TrimSpace(name)) {
Bas van Kervel's avatar
Bas van Kervel committed
164 165
	case AdminApiName:
		return Admin_JS
Bas van Kervel's avatar
Bas van Kervel committed
166 167
	case DebugApiName:
		return Debug_JS
Bas van Kervel's avatar
Bas van Kervel committed
168 169
	case MinerApiName:
		return Miner_JS
Bas van Kervel's avatar
Bas van Kervel committed
170 171
	case NetApiName:
		return Net_JS
Bas van Kervel's avatar
Bas van Kervel committed
172 173 174
	case ShhApiName:
		return Shh_JS
	case TxPoolApiName:
Bas van Kervel's avatar
Bas van Kervel committed
175
		return TxPool_JS
Bas van Kervel's avatar
Bas van Kervel committed
176 177
	case PersonalApiName:
		return Personal_JS
Bas van Kervel's avatar
Bas van Kervel committed
178 179 180 181
	}

	return ""
}