args.go 10.6 KB
Newer Older
1 2
package rpc

T
Taylor Gerring 已提交
3
import (
T
Taylor Gerring 已提交
4
	"bytes"
T
Taylor Gerring 已提交
5 6
	"encoding/json"
	"math/big"
7

T
Taylor Gerring 已提交
8 9
	"github.com/ethereum/go-ethereum/ethutil"
)
10

O
obscuren 已提交
11 12 13
func blockNumber(raw json.RawMessage, number *int64) (err error) {
	var str string
	if err = json.Unmarshal(raw, &str); err != nil {
O
obscuren 已提交
14 15 16
		return errDecodeArgs
	}

O
obscuren 已提交
17 18 19 20 21 22 23
	switch str {
	case "latest":
		*number = -1
	case "pending":
		*number = 0
	default:
		*number = ethutil.String2Big(str).Int64()
O
obscuren 已提交
24 25 26 27
	}
	return nil
}

T
Taylor Gerring 已提交
28 29 30
type GetBlockByHashArgs struct {
	BlockHash    string
	Transactions bool
31 32
}

T
Taylor Gerring 已提交
33 34 35 36 37 38 39 40 41
func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []interface{}
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errArguments
42
	}
T
Taylor Gerring 已提交
43 44 45 46 47 48

	argstr, ok := obj[0].(string)
	if !ok {
		return errDecodeArgs
	}
	args.BlockHash = argstr
T
Taylor Gerring 已提交
49 50 51

	if len(obj) > 1 {
		args.Transactions = obj[1].(bool)
52
	}
T
Taylor Gerring 已提交
53 54

	return nil
55 56
}

T
Taylor Gerring 已提交
57
type GetBlockByNumberArgs struct {
T
Taylor Gerring 已提交
58
	BlockNumber  int64
T
Taylor Gerring 已提交
59
	Transactions bool
60 61
}

T
Taylor Gerring 已提交
62 63 64 65 66
func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []interface{}
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
67 68
	}

T
Taylor Gerring 已提交
69 70 71
	if len(obj) < 1 {
		return errArguments
	}
T
Taylor Gerring 已提交
72 73 74 75 76 77

	if v, ok := obj[0].(float64); ok {
		args.BlockNumber = int64(v)
	} else {
		args.BlockNumber = ethutil.Big(obj[0].(string)).Int64()
	}
78

T
Taylor Gerring 已提交
79 80
	if len(obj) > 1 {
		args.Transactions = obj[1].(bool)
81 82
	}

T
Taylor Gerring 已提交
83
	return nil
84 85
}

T
Taylor Gerring 已提交
86 87 88 89 90 91 92
type NewTxArgs struct {
	From     string
	To       string
	Value    *big.Int
	Gas      *big.Int
	GasPrice *big.Int
	Data     string
O
obscuren 已提交
93

O
obscuren 已提交
94
	BlockNumber int64
95 96
}

T
Taylor Gerring 已提交
97
func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
O
obscuren 已提交
98 99
	var obj struct{ From, To, Value, Gas, GasPrice, Data string }
	if err = UnmarshalRawMessages(b, &obj, &args.BlockNumber); err != nil {
O
obscuren 已提交
100
		return err
T
Taylor Gerring 已提交
101 102
	}

O
obscuren 已提交
103 104 105 106 107 108
	args.From = obj.From
	args.To = obj.To
	args.Value = ethutil.Big(obj.Value)
	args.Gas = ethutil.Big(obj.Gas)
	args.GasPrice = ethutil.Big(obj.GasPrice)
	args.Data = obj.Data
T
Taylor Gerring 已提交
109

110 111 112 113
	return nil
}

type GetStorageArgs struct {
T
Taylor Gerring 已提交
114
	Address     string
T
Taylor Gerring 已提交
115
	BlockNumber int64
116 117
}

T
Taylor Gerring 已提交
118
func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) {
O
obscuren 已提交
119
	if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
T
Taylor Gerring 已提交
120
		return errDecodeArgs
O
obscuren 已提交
121
	}
T
Taylor Gerring 已提交
122 123

	return nil
O
obscuren 已提交
124 125
}

T
Taylor Gerring 已提交
126 127 128
func (args *GetStorageArgs) requirements() error {
	if len(args.Address) == 0 {
		return NewErrorWithMessage(errArguments, "Address cannot be blank")
O
obscuren 已提交
129 130 131 132
	}
	return nil
}

T
Taylor Gerring 已提交
133
type GetStorageAtArgs struct {
T
Taylor Gerring 已提交
134 135
	Address     string
	Key         string
T
Taylor Gerring 已提交
136
	BlockNumber int64
O
obscuren 已提交
137 138
}

T
Taylor Gerring 已提交
139
func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) {
O
obscuren 已提交
140 141
	var obj []string
	if err = UnmarshalRawMessages(b, &obj, &args.BlockNumber); err != nil {
T
Taylor Gerring 已提交
142 143 144
		return errDecodeArgs
	}
	if len(obj) < 2 {
O
obscuren 已提交
145
		return errDecodeArgs
146
	}
T
Taylor Gerring 已提交
147

O
obscuren 已提交
148 149 150
	args.Address = obj[0]
	args.Key = obj[1]

T
Taylor Gerring 已提交
151
	return nil
152 153
}

T
Taylor Gerring 已提交
154 155 156
func (args *GetStorageAtArgs) requirements() error {
	if len(args.Address) == 0 {
		return NewErrorWithMessage(errArguments, "Address cannot be blank")
157
	}
T
Taylor Gerring 已提交
158 159 160

	if len(args.Key) == 0 {
		return NewErrorWithMessage(errArguments, "Key cannot be blank")
161 162 163 164 165
	}
	return nil
}

type GetTxCountArgs struct {
T
Taylor Gerring 已提交
166
	Address     string
T
Taylor Gerring 已提交
167
	BlockNumber int64
168 169
}

T
Taylor Gerring 已提交
170
func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) {
O
obscuren 已提交
171
	if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
T
Taylor Gerring 已提交
172 173 174 175
		return errDecodeArgs
	}

	return nil
176 177
}

T
Taylor Gerring 已提交
178 179 180
func (args *GetTxCountArgs) requirements() error {
	if len(args.Address) == 0 {
		return NewErrorWithMessage(errArguments, "Address cannot be blank")
181 182 183 184 185
	}
	return nil
}

type GetBalanceArgs struct {
T
Taylor Gerring 已提交
186
	Address     string
T
Taylor Gerring 已提交
187
	BlockNumber int64
188 189
}

T
Taylor Gerring 已提交
190
func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
O
obscuren 已提交
191
	if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
T
Taylor Gerring 已提交
192 193 194 195
		return errDecodeArgs
	}

	return nil
196 197
}

T
Taylor Gerring 已提交
198 199 200
func (args *GetBalanceArgs) requirements() error {
	if len(args.Address) == 0 {
		return NewErrorWithMessage(errArguments, "Address cannot be blank")
201 202 203 204
	}
	return nil
}

T
Taylor Gerring 已提交
205 206
type GetDataArgs struct {
	Address     string
T
Taylor Gerring 已提交
207
	BlockNumber int64
208 209
}

T
Taylor Gerring 已提交
210
func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
O
obscuren 已提交
211
	if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
T
Taylor Gerring 已提交
212 213 214 215
		return errDecodeArgs
	}

	return nil
216 217
}

T
Taylor Gerring 已提交
218 219 220
func (args *GetDataArgs) requirements() error {
	if len(args.Address) == 0 {
		return NewErrorWithMessage(errArguments, "Address cannot be blank")
221 222 223
	}
	return nil
}
224

225 226
type BlockNumIndexArgs struct {
	BlockNumber int64
T
Taylor Gerring 已提交
227
	Index       int64
228 229
}

230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []interface{}
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errArguments
	}

	arg0, ok := obj[0].(string)
	if !ok {
		return errDecodeArgs
	}
	args.BlockNumber = ethutil.Big(arg0).Int64()

	if len(obj) > 1 {
		arg1, ok := obj[1].(string)
		if !ok {
			return errDecodeArgs
		}
		args.Index = ethutil.Big(arg1).Int64()
	}

	return nil
}

258 259
type HashIndexArgs struct {
	BlockHash string
T
Taylor Gerring 已提交
260
	Index     int64
261 262
}

263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []interface{}
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errArguments
	}

	arg0, ok := obj[0].(string)
	if !ok {
		return errDecodeArgs
	}
	args.BlockHash = arg0

	if len(obj) > 1 {
		arg1, ok := obj[1].(string)
		if !ok {
			return errDecodeArgs
		}
		args.Index = ethutil.Big(arg1).Int64()
	}

	return nil
}

291 292 293 294
type Sha3Args struct {
	Data string
}

T
Taylor Gerring 已提交
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) {
	var obj []interface{}
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return NewErrorWithMessage(errDecodeArgs, err.Error())
	}

	if len(obj) < 1 {
		return errArguments
	}
	args.Data = obj[0].(string)

	return nil
}

T
Taylor Gerring 已提交
310 311 312 313 314 315 316 317
// type FilterArgs struct {
// 	FromBlock uint64
// 	ToBlock   uint64
// 	Limit     uint64
// 	Offset    uint64
// 	Address   string
// 	Topics    []string
// }
T
Taylor Gerring 已提交
318

T
Taylor Gerring 已提交
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344
// func (args *FilterArgs) UnmarshalJSON(b []byte) (err error) {
// 	var obj []struct {
// 		FromBlock string   `json:"fromBlock"`
// 		ToBlock   string   `json:"toBlock"`
// 		Limit     string   `json:"limit"`
// 		Offset    string   `json:"offset"`
// 		Address   string   `json:"address"`
// 		Topics    []string `json:"topics"`
// 	}

// 	if err = json.Unmarshal(b, &obj); err != nil {
// 		return errDecodeArgs
// 	}

// 	if len(obj) < 1 {
// 		return errArguments
// 	}
// 	args.FromBlock = uint64(ethutil.Big(obj[0].FromBlock).Int64())
// 	args.ToBlock = uint64(ethutil.Big(obj[0].ToBlock).Int64())
// 	args.Limit = uint64(ethutil.Big(obj[0].Limit).Int64())
// 	args.Offset = uint64(ethutil.Big(obj[0].Offset).Int64())
// 	args.Address = obj[0].Address
// 	args.Topics = obj[0].Topics

// 	return nil
// }
345 346 347 348

type FilterOptions struct {
	Earliest int64
	Latest   int64
349
	Address  interface{}
O
merge  
obscuren 已提交
350
	Topics   []interface{}
351 352 353 354
	Skip     int
	Max      int
}

T
Taylor Gerring 已提交
355 356
func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
	var obj []struct {
O
wip  
obscuren 已提交
357 358 359 360 361 362
		FromBlock string        `json:"fromBlock"`
		ToBlock   string        `json:"toBlock"`
		Limit     string        `json:"limit"`
		Offset    string        `json:"offset"`
		Address   string        `json:"address"`
		Topics    []interface{} `json:"topics"`
T
Taylor Gerring 已提交
363 364 365 366 367 368 369 370 371
	}

	if err = json.Unmarshal(b, &obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errArguments
	}
T
Taylor Gerring 已提交
372 373 374 375
	args.Earliest = int64(ethutil.Big(obj[0].FromBlock).Int64())
	args.Latest = int64(ethutil.Big(obj[0].ToBlock).Int64())
	args.Max = int(ethutil.Big(obj[0].Limit).Int64())
	args.Skip = int(ethutil.Big(obj[0].Offset).Int64())
T
Taylor Gerring 已提交
376
	args.Address = obj[0].Address
O
merge  
obscuren 已提交
377
	args.Topics = obj[0].Topics
T
Taylor Gerring 已提交
378 379 380 381 382 383 384

	return nil
}

// type FilterChangedArgs struct {
// 	n int
// }
O
obscuren 已提交
385 386 387 388 389 390 391

type DbArgs struct {
	Database string
	Key      string
	Value    string
}

T
Taylor Gerring 已提交
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411
func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []interface{}
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 2 {
		return errArguments
	}
	args.Database = obj[0].(string)
	args.Key = obj[1].(string)

	if len(obj) > 2 {
		args.Value = obj[2].(string)
	}

	return nil
}

O
obscuren 已提交
412 413
func (a *DbArgs) requirements() error {
	if len(a.Database) == 0 {
T
Taylor Gerring 已提交
414
		return NewErrorWithMessage(errArguments, "Database cannot be blank")
O
obscuren 已提交
415 416
	}
	if len(a.Key) == 0 {
T
Taylor Gerring 已提交
417
		return NewErrorWithMessage(errArguments, "Key cannot be blank")
O
obscuren 已提交
418 419 420
	}
	return nil
}
421 422 423 424 425

type WhisperMessageArgs struct {
	Payload  string
	To       string
	From     string
T
Taylor Gerring 已提交
426
	Topics   []string
427 428 429
	Priority uint32
	Ttl      uint32
}
T
Taylor Gerring 已提交
430 431 432 433 434 435

func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []struct {
		Payload  string
		To       string
		From     string
T
Taylor Gerring 已提交
436
		Topics   []string
T
Taylor Gerring 已提交
437 438 439 440 441 442 443 444 445 446 447 448 449 450
		Priority string
		Ttl      string
	}

	if err = json.Unmarshal(b, &obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errArguments
	}
	args.Payload = obj[0].Payload
	args.To = obj[0].To
	args.From = obj[0].From
T
Taylor Gerring 已提交
451
	args.Topics = obj[0].Topics
T
Taylor Gerring 已提交
452 453
	args.Priority = uint32(ethutil.Big(obj[0].Priority).Int64())
	args.Ttl = uint32(ethutil.Big(obj[0].Ttl).Int64())
T
Taylor Gerring 已提交
454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510

	return nil
}

type CompileArgs struct {
	Source string
}

func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []interface{}
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) > 0 {
		args.Source = obj[0].(string)
	}

	return nil
}

type FilterStringArgs struct {
	Word string
}

func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []string
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errDecodeArgs
	}

	args.Word = obj[0]

	return nil
}

type FilterIdArgs struct {
	Id int
}

func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []string
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errDecodeArgs
	}

T
Taylor Gerring 已提交
511
	args.Id = int(ethutil.Big(obj[0]).Int64())
T
Taylor Gerring 已提交
512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536

	return nil
}

type WhisperIdentityArgs struct {
	Identity string
}

func (args *WhisperIdentityArgs) UnmarshalJSON(b []byte) (err error) {
	var obj []string
	r := bytes.NewReader(b)
	if err := json.NewDecoder(r).Decode(&obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errDecodeArgs
	}

	args.Identity = obj[0]

	return nil
}

type WhisperFilterArgs struct {
T
Taylor Gerring 已提交
537
	To     string `json:"to"`
T
Taylor Gerring 已提交
538 539 540 541 542
	From   string
	Topics []string
}

func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
T
Taylor Gerring 已提交
543 544 545 546 547
	var obj []struct {
		To     string
		From   string
		Topics []string
	}
T
Taylor Gerring 已提交
548 549 550 551 552 553 554 555 556 557 558 559 560 561 562

	if err = json.Unmarshal(b, &obj); err != nil {
		return errDecodeArgs
	}

	if len(obj) < 1 {
		return errArguments
	}

	args.To = obj[0].To
	args.From = obj[0].From
	args.Topics = obj[0].Topics

	return nil
}