diff options
author | Bas van Kervel <bas@ethdev.com> | 2016-09-01 17:48:15 +0800 |
---|---|---|
committer | Bas van Kervel <bas@ethdev.com> | 2016-09-01 17:50:13 +0800 |
commit | 43d716280e5e43c238a118e5cbc5729832329c1d (patch) | |
tree | b9a623e46a1d7cf1593fd96a3201f2a76199e043 | |
parent | cc6170d7fc885f61b998712425129022413438c7 (diff) | |
download | go-tangerine-43d716280e5e43c238a118e5cbc5729832329c1d.tar go-tangerine-43d716280e5e43c238a118e5cbc5729832329c1d.tar.gz go-tangerine-43d716280e5e43c238a118e5cbc5729832329c1d.tar.bz2 go-tangerine-43d716280e5e43c238a118e5cbc5729832329c1d.tar.lz go-tangerine-43d716280e5e43c238a118e5cbc5729832329c1d.tar.xz go-tangerine-43d716280e5e43c238a118e5cbc5729832329c1d.tar.zst go-tangerine-43d716280e5e43c238a118e5cbc5729832329c1d.zip |
rpc: format filter ID according to spec for quantities
-rw-r--r-- | rpc/utils.go | 11 | ||||
-rw-r--r-- | rpc/utils_test.go | 43 |
2 files changed, 53 insertions, 1 deletions
diff --git a/rpc/utils.go b/rpc/utils.go index b590ba62f..c249e9b4a 100644 --- a/rpc/utils.go +++ b/rpc/utils.go @@ -24,6 +24,7 @@ import ( "math/big" "math/rand" "reflect" + "strings" "sync" "time" "unicode" @@ -250,5 +251,13 @@ func NewID() ID { val >>= 8 } } - return ID("0x" + hex.EncodeToString(id)) + + rpcId := hex.EncodeToString(id) + // rpc ID's are RPC quantities, no leading zero's and 0 is 0x0 + rpcId = strings.TrimLeft(rpcId, "0") + if rpcId == "" { + rpcId = "0" + } + + return ID("0x" + rpcId) } diff --git a/rpc/utils_test.go b/rpc/utils_test.go new file mode 100644 index 000000000..e0e063f60 --- /dev/null +++ b/rpc/utils_test.go @@ -0,0 +1,43 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package rpc + +import ( + "strings" + "testing" +) + +func TestNewID(t *testing.T) { + hexchars := "0123456789ABCDEFabcdef" + for i := 0; i < 100; i++ { + id := string(NewID()) + if !strings.HasPrefix(id, "0x") { + t.Fatalf("invalid ID prefix, want '0x...', got %s", id) + } + + id = id[2:] + if len(id) == 0 || len(id) > 32 { + t.Fatalf("invalid ID length, want len(id) > 0 && len(id) <= 32), got %d", len(id)) + } + + for i := 0; i < len(id); i++ { + if strings.IndexByte(hexchars, id[i]) == -1 { + t.Fatalf("unexpected byte, want any valid hex char, got %c", id[i]) + } + } + } +} |