admin_args.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. // Copyright 2015 The go-ethereum Authors
  2. // This file is part of the go-ethereum library.
  3. //
  4. // The go-ethereum library is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU Lesser General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // The go-ethereum library is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU Lesser General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU Lesser General Public License
  15. // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
  16. package api
  17. import (
  18. "encoding/json"
  19. "github.com/ethereum/go-ethereum/common/compiler"
  20. "github.com/ethereum/go-ethereum/rpc/shared"
  21. )
  22. type AddPeerArgs struct {
  23. Url string
  24. }
  25. func (args *AddPeerArgs) UnmarshalJSON(b []byte) (err error) {
  26. var obj []interface{}
  27. if err := json.Unmarshal(b, &obj); err != nil {
  28. return shared.NewDecodeParamError(err.Error())
  29. }
  30. if len(obj) != 1 {
  31. return shared.NewDecodeParamError("Expected enode as argument")
  32. }
  33. urlstr, ok := obj[0].(string)
  34. if !ok {
  35. return shared.NewInvalidTypeError("url", "not a string")
  36. }
  37. args.Url = urlstr
  38. return nil
  39. }
  40. type ImportExportChainArgs struct {
  41. Filename string
  42. }
  43. func (args *ImportExportChainArgs) UnmarshalJSON(b []byte) (err error) {
  44. var obj []interface{}
  45. if err := json.Unmarshal(b, &obj); err != nil {
  46. return shared.NewDecodeParamError(err.Error())
  47. }
  48. if len(obj) != 1 {
  49. return shared.NewDecodeParamError("Expected filename as argument")
  50. }
  51. filename, ok := obj[0].(string)
  52. if !ok {
  53. return shared.NewInvalidTypeError("filename", "not a string")
  54. }
  55. args.Filename = filename
  56. return nil
  57. }
  58. type VerbosityArgs struct {
  59. Level int
  60. }
  61. func (args *VerbosityArgs) UnmarshalJSON(b []byte) (err error) {
  62. var obj []interface{}
  63. if err := json.Unmarshal(b, &obj); err != nil {
  64. return shared.NewDecodeParamError(err.Error())
  65. }
  66. if len(obj) != 1 {
  67. return shared.NewDecodeParamError("Expected enode as argument")
  68. }
  69. level, err := numString(obj[0])
  70. if err == nil {
  71. args.Level = int(level.Int64())
  72. }
  73. return nil
  74. }
  75. type SetSolcArgs struct {
  76. Path string
  77. }
  78. func (args *SetSolcArgs) UnmarshalJSON(b []byte) (err error) {
  79. var obj []interface{}
  80. if err := json.Unmarshal(b, &obj); err != nil {
  81. return shared.NewDecodeParamError(err.Error())
  82. }
  83. if len(obj) != 1 {
  84. return shared.NewDecodeParamError("Expected path as argument")
  85. }
  86. if pathstr, ok := obj[0].(string); ok {
  87. args.Path = pathstr
  88. return nil
  89. }
  90. return shared.NewInvalidTypeError("path", "not a string")
  91. }
  92. type StartRPCArgs struct {
  93. ListenAddress string
  94. ListenPort uint
  95. CorsDomain string
  96. Apis string
  97. }
  98. func (args *StartRPCArgs) UnmarshalJSON(b []byte) (err error) {
  99. var obj []interface{}
  100. if err := json.Unmarshal(b, &obj); err != nil {
  101. return shared.NewDecodeParamError(err.Error())
  102. }
  103. args.ListenAddress = "127.0.0.1"
  104. args.ListenPort = 8545
  105. args.Apis = "net,eth,web3"
  106. if len(obj) >= 1 && obj[0] != nil {
  107. if addr, ok := obj[0].(string); ok {
  108. args.ListenAddress = addr
  109. } else {
  110. return shared.NewInvalidTypeError("listenAddress", "not a string")
  111. }
  112. }
  113. if len(obj) >= 2 && obj[1] != nil {
  114. if port, ok := obj[1].(float64); ok && port >= 0 && port <= 64*1024 {
  115. args.ListenPort = uint(port)
  116. } else {
  117. return shared.NewInvalidTypeError("listenPort", "not a valid port number")
  118. }
  119. }
  120. if len(obj) >= 3 && obj[2] != nil {
  121. if corsDomain, ok := obj[2].(string); ok {
  122. args.CorsDomain = corsDomain
  123. } else {
  124. return shared.NewInvalidTypeError("corsDomain", "not a string")
  125. }
  126. }
  127. if len(obj) >= 4 && obj[3] != nil {
  128. if apis, ok := obj[3].(string); ok {
  129. args.Apis = apis
  130. } else {
  131. return shared.NewInvalidTypeError("apis", "not a string")
  132. }
  133. }
  134. return nil
  135. }
  136. type SleepArgs struct {
  137. S int
  138. }
  139. func (args *SleepArgs) UnmarshalJSON(b []byte) (err error) {
  140. var obj []interface{}
  141. if err := json.Unmarshal(b, &obj); err != nil {
  142. return shared.NewDecodeParamError(err.Error())
  143. }
  144. if len(obj) >= 1 {
  145. if obj[0] != nil {
  146. if n, err := numString(obj[0]); err == nil {
  147. args.S = int(n.Int64())
  148. } else {
  149. return shared.NewInvalidTypeError("N", "not an integer: "+err.Error())
  150. }
  151. } else {
  152. return shared.NewInsufficientParamsError(0, 1)
  153. }
  154. }
  155. return nil
  156. }
  157. type SleepBlocksArgs struct {
  158. N int64
  159. Timeout int64
  160. }
  161. func (args *SleepBlocksArgs) UnmarshalJSON(b []byte) (err error) {
  162. var obj []interface{}
  163. if err := json.Unmarshal(b, &obj); err != nil {
  164. return shared.NewDecodeParamError(err.Error())
  165. }
  166. args.N = 1
  167. args.Timeout = 0
  168. if len(obj) >= 1 && obj[0] != nil {
  169. if n, err := numString(obj[0]); err == nil {
  170. args.N = n.Int64()
  171. } else {
  172. return shared.NewInvalidTypeError("N", "not an integer: "+err.Error())
  173. }
  174. }
  175. if len(obj) >= 2 && obj[1] != nil {
  176. if n, err := numString(obj[1]); err == nil {
  177. args.Timeout = n.Int64()
  178. } else {
  179. return shared.NewInvalidTypeError("Timeout", "not an integer: "+err.Error())
  180. }
  181. }
  182. return nil
  183. }
  184. type SetGlobalRegistrarArgs struct {
  185. NameReg string
  186. ContractAddress string
  187. }
  188. func (args *SetGlobalRegistrarArgs) UnmarshalJSON(b []byte) (err error) {
  189. var obj []interface{}
  190. if err := json.Unmarshal(b, &obj); err != nil {
  191. return shared.NewDecodeParamError(err.Error())
  192. }
  193. if len(obj) == 0 {
  194. return shared.NewDecodeParamError("Expected namereg address")
  195. }
  196. if len(obj) >= 1 {
  197. if namereg, ok := obj[0].(string); ok {
  198. args.NameReg = namereg
  199. } else {
  200. return shared.NewInvalidTypeError("NameReg", "not a string")
  201. }
  202. }
  203. if len(obj) >= 2 && obj[1] != nil {
  204. if addr, ok := obj[1].(string); ok {
  205. args.ContractAddress = addr
  206. } else {
  207. return shared.NewInvalidTypeError("ContractAddress", "not a string")
  208. }
  209. }
  210. return nil
  211. }
  212. type SetHashRegArgs struct {
  213. HashReg string
  214. Sender string
  215. }
  216. func (args *SetHashRegArgs) UnmarshalJSON(b []byte) (err error) {
  217. var obj []interface{}
  218. if err := json.Unmarshal(b, &obj); err != nil {
  219. return shared.NewDecodeParamError(err.Error())
  220. }
  221. if len(obj) >= 1 && obj[0] != nil {
  222. if hashreg, ok := obj[0].(string); ok {
  223. args.HashReg = hashreg
  224. } else {
  225. return shared.NewInvalidTypeError("HashReg", "not a string")
  226. }
  227. }
  228. if len(obj) >= 2 && obj[1] != nil {
  229. if sender, ok := obj[1].(string); ok {
  230. args.Sender = sender
  231. } else {
  232. return shared.NewInvalidTypeError("Sender", "not a string")
  233. }
  234. }
  235. return nil
  236. }
  237. type SetUrlHintArgs struct {
  238. UrlHint string
  239. Sender string
  240. }
  241. func (args *SetUrlHintArgs) UnmarshalJSON(b []byte) (err error) {
  242. var obj []interface{}
  243. if err := json.Unmarshal(b, &obj); err != nil {
  244. return shared.NewDecodeParamError(err.Error())
  245. }
  246. if len(obj) >= 1 && obj[0] != nil {
  247. if urlhint, ok := obj[0].(string); ok {
  248. args.UrlHint = urlhint
  249. } else {
  250. return shared.NewInvalidTypeError("UrlHint", "not a string")
  251. }
  252. }
  253. if len(obj) >= 2 && obj[1] != nil {
  254. if sender, ok := obj[1].(string); ok {
  255. args.Sender = sender
  256. } else {
  257. return shared.NewInvalidTypeError("Sender", "not a string")
  258. }
  259. }
  260. return nil
  261. }
  262. type SaveInfoArgs struct {
  263. ContractInfo compiler.ContractInfo
  264. Filename string
  265. }
  266. func (args *SaveInfoArgs) UnmarshalJSON(b []byte) (err error) {
  267. var obj []interface{}
  268. if err := json.Unmarshal(b, &obj); err != nil {
  269. return shared.NewDecodeParamError(err.Error())
  270. }
  271. if len(obj) < 2 {
  272. return shared.NewInsufficientParamsError(len(obj), 2)
  273. }
  274. if jsonraw, err := json.Marshal(obj[0]); err == nil {
  275. if err = json.Unmarshal(jsonraw, &args.ContractInfo); err != nil {
  276. return err
  277. }
  278. } else {
  279. return err
  280. }
  281. if filename, ok := obj[1].(string); ok {
  282. args.Filename = filename
  283. } else {
  284. return shared.NewInvalidTypeError("Filename", "not a string")
  285. }
  286. return nil
  287. }
  288. type RegisterArgs struct {
  289. Sender string
  290. Address string
  291. ContentHashHex string
  292. }
  293. func (args *RegisterArgs) UnmarshalJSON(b []byte) (err error) {
  294. var obj []interface{}
  295. if err := json.Unmarshal(b, &obj); err != nil {
  296. return shared.NewDecodeParamError(err.Error())
  297. }
  298. if len(obj) < 3 {
  299. return shared.NewInsufficientParamsError(len(obj), 3)
  300. }
  301. if len(obj) >= 1 {
  302. if sender, ok := obj[0].(string); ok {
  303. args.Sender = sender
  304. } else {
  305. return shared.NewInvalidTypeError("Sender", "not a string")
  306. }
  307. }
  308. if len(obj) >= 2 {
  309. if address, ok := obj[1].(string); ok {
  310. args.Address = address
  311. } else {
  312. return shared.NewInvalidTypeError("Address", "not a string")
  313. }
  314. }
  315. if len(obj) >= 3 {
  316. if hex, ok := obj[2].(string); ok {
  317. args.ContentHashHex = hex
  318. } else {
  319. return shared.NewInvalidTypeError("ContentHashHex", "not a string")
  320. }
  321. }
  322. return nil
  323. }
  324. type RegisterUrlArgs struct {
  325. Sender string
  326. ContentHash string
  327. Url string
  328. }
  329. func (args *RegisterUrlArgs) UnmarshalJSON(b []byte) (err error) {
  330. var obj []interface{}
  331. if err := json.Unmarshal(b, &obj); err != nil {
  332. return shared.NewDecodeParamError(err.Error())
  333. }
  334. if len(obj) >= 1 {
  335. if sender, ok := obj[0].(string); ok {
  336. args.Sender = sender
  337. } else {
  338. return shared.NewInvalidTypeError("Sender", "not a string")
  339. }
  340. }
  341. if len(obj) >= 2 {
  342. if sender, ok := obj[1].(string); ok {
  343. args.ContentHash = sender
  344. } else {
  345. return shared.NewInvalidTypeError("ContentHash", "not a string")
  346. }
  347. }
  348. if len(obj) >= 3 {
  349. if sender, ok := obj[2].(string); ok {
  350. args.Url = sender
  351. } else {
  352. return shared.NewInvalidTypeError("Url", "not a string")
  353. }
  354. }
  355. return nil
  356. }
  357. type GetContractInfoArgs struct {
  358. Contract string
  359. }
  360. func (args *GetContractInfoArgs) UnmarshalJSON(b []byte) (err error) {
  361. var obj []interface{}
  362. if err := json.Unmarshal(b, &obj); err != nil {
  363. return shared.NewDecodeParamError(err.Error())
  364. }
  365. if len(obj) < 1 {
  366. return shared.NewInsufficientParamsError(len(obj), 1)
  367. }
  368. if len(obj) >= 1 {
  369. if contract, ok := obj[0].(string); ok {
  370. args.Contract = contract
  371. } else {
  372. return shared.NewInvalidTypeError("Contract", "not a string")
  373. }
  374. }
  375. return nil
  376. }
  377. type HttpGetArgs struct {
  378. Uri string
  379. Path string
  380. }
  381. func (args *HttpGetArgs) UnmarshalJSON(b []byte) (err error) {
  382. var obj []interface{}
  383. if err := json.Unmarshal(b, &obj); err != nil {
  384. return shared.NewDecodeParamError(err.Error())
  385. }
  386. if len(obj) < 1 {
  387. return shared.NewInsufficientParamsError(len(obj), 1)
  388. }
  389. if len(obj) >= 1 {
  390. if uri, ok := obj[0].(string); ok {
  391. args.Uri = uri
  392. } else {
  393. return shared.NewInvalidTypeError("Uri", "not a string")
  394. }
  395. }
  396. if len(obj) >= 2 && obj[1] != nil {
  397. if path, ok := obj[1].(string); ok {
  398. args.Path = path
  399. } else {
  400. return shared.NewInvalidTypeError("Path", "not a string")
  401. }
  402. }
  403. return nil
  404. }