Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP Add Geth RPC to the gateway #1845

Merged
merged 77 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
7e1686d
Add new endpoint for generating messages and refactor message generation
zkokelj Mar 13, 2024
744404b
add message type in get messages
zkokelj Mar 18, 2024
6aa6cb3
fix test
zkokelj Mar 18, 2024
ab22422
lint
zkokelj Mar 18, 2024
4c15091
fix test
zkokelj Mar 18, 2024
c36ee46
- return nil instead of custom error
tudor-malene Mar 19, 2024
9284f97
Merge remote-tracking branch 'origin/main' into tudor/rpc_fixes
tudor-malene Mar 19, 2024
90b58cc
fix
tudor-malene Mar 19, 2024
bbc441d
fix
tudor-malene Mar 19, 2024
50d6d0b
lint
tudor-malene Mar 19, 2024
3fa1306
fix
tudor-malene Mar 19, 2024
324b4e0
add geth RPC
tudor-malene Mar 19, 2024
979ddc1
fix
tudor-malene Mar 19, 2024
755e159
Merge remote-tracking branch 'origin/main' into tudor/OG_geth_RPC
tudor-malene Mar 20, 2024
5945629
Merge branch 'tudor/rpc_fixes' into tudor/OG_geth_RPC
tudor-malene Mar 20, 2024
c6a8a98
code review fixes
zkokelj Mar 20, 2024
65026ca
fix
tudor-malene Mar 20, 2024
e1a3077
fix
tudor-malene Mar 20, 2024
64050e8
refactor and add separate hashing functions
zkokelj Mar 20, 2024
cfda70a
Merge remote-tracking branch 'origin/main' into tudor/OG_geth_RPC
tudor-malene Mar 20, 2024
871a4f0
GenerateMessage single responsibility + separate hashing
zkokelj Mar 20, 2024
6566e41
Merge branch 'main' into ziga/get_message_endpoint
zkokelj Mar 20, 2024
ab3a456
lint
zkokelj Mar 20, 2024
c9d1e6e
fix
tudor-malene Mar 20, 2024
21daaca
Merge remote-tracking branch 'origin/main' into tudor/OG_geth_RPC
tudor-malene Mar 20, 2024
ba5f060
fix
tudor-malene Mar 20, 2024
d9d9e96
lint
tudor-malene Mar 20, 2024
5d5b844
lint
tudor-malene Mar 20, 2024
d838496
Merge remote-tracking branch 'origin/ziga/get_message_endpoint' into …
tudor-malene Mar 20, 2024
aa0daa7
fixes
tudor-malene Mar 20, 2024
a988875
fix
tudor-malene Mar 20, 2024
a3462e5
fix
tudor-malene Mar 20, 2024
982476b
fix
tudor-malene Mar 20, 2024
9f26b4e
Merge remote-tracking branch 'origin/main' into tudor/OG_geth_RPC
tudor-malene Mar 21, 2024
77ddb5e
fix
tudor-malene Mar 21, 2024
776b06a
fix
tudor-malene Mar 21, 2024
34868cd
fix
tudor-malene Mar 21, 2024
afc5d31
fix
tudor-malene Mar 21, 2024
e2943cb
fix
tudor-malene Mar 21, 2024
889f767
fix
tudor-malene Mar 21, 2024
85b8ccb
fix
tudor-malene Mar 21, 2024
d0831bf
fix
tudor-malene Mar 21, 2024
3f92776
fix
tudor-malene Mar 22, 2024
d036a6a
fix
tudor-malene Mar 22, 2024
8862356
cleanup
tudor-malene Mar 22, 2024
4716d71
Merge remote-tracking branch 'origin/main' into tudor/OG_geth_RPC
tudor-malene Mar 22, 2024
b26ab55
cleanup
tudor-malene Mar 22, 2024
63d300a
cleanup
tudor-malene Mar 22, 2024
50d6944
fix
tudor-malene Mar 22, 2024
69d1506
fix
tudor-malene Mar 22, 2024
8d9a214
fix
tudor-malene Mar 22, 2024
1cc865f
fix
tudor-malene Mar 22, 2024
3cb73ec
fix
tudor-malene Mar 22, 2024
7001ef7
fix
tudor-malene Mar 23, 2024
a5a8b81
fix
tudor-malene Mar 23, 2024
fddedeb
fix
tudor-malene Mar 24, 2024
49bcdaa
Merge remote-tracking branch 'origin/main' into tudor/OG_geth_RPC
tudor-malene Mar 25, 2024
9eb55eb
merge main
tudor-malene Mar 25, 2024
7067489
fix
tudor-malene Mar 25, 2024
433d34c
Merge remote-tracking branch 'origin/main' into tudor/OG_geth_RPC
tudor-malene Mar 25, 2024
7db9f64
fix
tudor-malene Mar 25, 2024
dcb3f12
add cache for users
tudor-malene Mar 26, 2024
514f10b
add conn pool for rpc backend
tudor-malene Mar 26, 2024
0ddcdcb
disable cache
tudor-malene Mar 26, 2024
e2852c8
reenable cache
tudor-malene Mar 26, 2024
80c8f17
cleanup
tudor-malene Mar 26, 2024
5bf7c87
fix
tudor-malene Mar 26, 2024
030ed3f
fix
tudor-malene Mar 26, 2024
e4d9e2d
bump pool
tudor-malene Mar 26, 2024
3b5189e
fix
tudor-malene Mar 26, 2024
f5ee59d
fix
tudor-malene Mar 26, 2024
bf2287e
comment static
tudor-malene Mar 26, 2024
258454f
add static files
tudor-malene Mar 27, 2024
9964a61
fix
tudor-malene Mar 27, 2024
51f81b9
serve static files with /static path
zkokelj Mar 27, 2024
98dce95
Merge branch 'tudor/OG_geth_RPC' of https://github.com/ten-protocol/g…
zkokelj Mar 27, 2024
bbc9320
clean up conn pool
tudor-malene Mar 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ go 1.21
replace github.com/docker/docker => github.com/docker/docker v20.10.3-0.20220224222438-c78f6963a1c0+incompatible

require (
github.com/Microsoft/go-winio v0.6.1
github.com/andybalholm/brotli v1.1.0
github.com/deckarep/golang-set/v2 v2.6.0
github.com/dgraph-io/ristretto v0.1.1
github.com/docker/docker v25.0.4+incompatible
github.com/docker/go-connections v0.5.0
Expand All @@ -17,14 +19,18 @@ require (
github.com/gin-gonic/gin v1.9.1
github.com/go-kit/kit v0.13.0
github.com/go-sql-driver/mysql v1.8.0
github.com/gofrs/flock v0.8.1
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/golang-jwt/jwt/v4 v4.5.0
github.com/google/uuid v1.6.0
github.com/gorilla/websocket v1.5.1
github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/holiman/uint256 v1.2.4
github.com/jolestar/go-commons-pool/v2 v2.1.2
github.com/mattn/go-sqlite3 v1.14.22
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416
github.com/pkg/errors v0.9.1
github.com/rs/cors v1.10.1
github.com/sanity-io/litter v1.5.5
github.com/status-im/keycard-go v0.3.2
github.com/stretchr/testify v1.9.0
Expand All @@ -43,7 +49,6 @@ require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
github.com/DataDog/zstd v1.5.5 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/VictoriaMetrics/fastcache v1.12.2 // indirect
github.com/allegro/bigcache v1.2.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
Expand All @@ -65,7 +70,6 @@ require (
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deckarep/golang-set/v2 v2.6.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/distribution/reference v0.5.0 // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
Expand All @@ -86,9 +90,7 @@ require (
github.com/go-playground/validator/v10 v10.19.0 // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/gofrs/flock v0.8.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
github.com/golang/glog v1.2.0 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
Expand All @@ -105,11 +107,8 @@ require (
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/pointerstructure v1.2.1 // indirect
github.com/mmcloughlin/addchain v0.4.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
Expand All @@ -127,8 +126,6 @@ require (
github.com/prometheus/procfs v0.13.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/stretchr/objx v0.5.2 // indirect
Expand Down
8 changes: 5 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,8 @@ github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA=
github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
Expand Down Expand Up @@ -260,6 +262,8 @@ github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0Gqw
github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jolestar/go-commons-pool/v2 v2.1.2 h1:E+XGo58F23t7HtZiC/W6jzO2Ux2IccSH/yx4nD+J1CM=
github.com/jolestar/go-commons-pool/v2 v2.1.2/go.mod h1:r4NYccrkS5UqP1YQI1COyTZ9UjPJAAGTUxzcsK1kqhY=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
Expand Down Expand Up @@ -309,7 +313,6 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
Expand All @@ -322,7 +325,6 @@ github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw=
Expand Down Expand Up @@ -398,6 +400,7 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
Expand Down Expand Up @@ -577,7 +580,6 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Expand Down
185 changes: 182 additions & 3 deletions go/common/log_events.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package common

import (
"encoding/json"
"errors"
"fmt"
"math/big"
"strings"

"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth/filters"
"github.com/ten-protocol/go-ten/go/common/viewingkey"
Expand All @@ -14,7 +22,7 @@ type LogSubscription struct {
ViewingKey *viewingkey.RPCSignedViewingKey

// A subscriber-defined filter to apply to the stream of logs.
Filter *filters.FilterCriteria
Filter *FilterCriteriaJSON
}

// IDAndEncLog pairs an encrypted log with the ID of the subscription that generated it.
Expand All @@ -36,6 +44,177 @@ type FilterCriteriaJSON struct {
BlockHash *common.Hash `json:"blockHash"`
FromBlock *rpc.BlockNumber `json:"fromBlock"`
ToBlock *rpc.BlockNumber `json:"toBlock"`
Addresses interface{} `json:"address"`
Topics []interface{} `json:"topics"`
Addresses []common.Address `json:"addresses"`
Topics [][]common.Hash `json:"topics"`
}

func FromCriteria(crit FilterCriteria) FilterCriteriaJSON {
var from *rpc.BlockNumber
if crit.FromBlock != nil {
f := (rpc.BlockNumber)(crit.FromBlock.Int64())
from = &f
}

var to *rpc.BlockNumber
if crit.ToBlock != nil {
t := (rpc.BlockNumber)(crit.ToBlock.Int64())
to = &t
}

return FilterCriteriaJSON{
BlockHash: crit.BlockHash,
FromBlock: from,
ToBlock: to,
Addresses: crit.Addresses,
Topics: crit.Topics,
}
}

func ToCriteria(jsonCriteria FilterCriteriaJSON) filters.FilterCriteria {
var from *big.Int
if jsonCriteria.FromBlock != nil {
from = big.NewInt(jsonCriteria.FromBlock.Int64())
}
var to *big.Int
if jsonCriteria.ToBlock != nil {
to = big.NewInt(jsonCriteria.ToBlock.Int64())
}

return filters.FilterCriteria{
BlockHash: jsonCriteria.BlockHash,
FromBlock: from,
ToBlock: to,
Addresses: jsonCriteria.Addresses,
Topics: jsonCriteria.Topics,
}
}

var errInvalidTopic = errors.New("invalid topic(s)")

// FilterCriteria represents a request to create a new filter.
// Same as ethereum.FilterQuery but with UnmarshalJSON() method.
// duplicated from geth to tweak the unmarshalling
type FilterCriteria ethereum.FilterQuery

// UnmarshalJSON sets *args fields with given data.
func (args *FilterCriteria) UnmarshalJSON(data []byte) error {
type input struct {
BlockHash *common.Hash `json:"blockHash"`
FromBlock *rpc.BlockNumber `json:"fromBlock"`
ToBlock *rpc.BlockNumber `json:"toBlock"`
Addresses interface{} `json:"address"`
Topics []interface{} `json:"topics"`
}

var raw input
if err := json.Unmarshal(data, &raw); err != nil {
// tweak to handle the case when an empty array is passed in by javascript libraries
if strings.Contains(err.Error(), "cannot unmarshal array") {
return nil
}
return err
}

if raw.BlockHash != nil {
if raw.FromBlock != nil || raw.ToBlock != nil {
// BlockHash is mutually exclusive with FromBlock/ToBlock criteria
return errors.New("cannot specify both BlockHash and FromBlock/ToBlock, choose one or the other")
}
args.BlockHash = raw.BlockHash
} else {
if raw.FromBlock != nil {
args.FromBlock = big.NewInt(raw.FromBlock.Int64())
}

if raw.ToBlock != nil {
args.ToBlock = big.NewInt(raw.ToBlock.Int64())
}
}

args.Addresses = []common.Address{}

if raw.Addresses != nil {
// raw.Address can contain a single address or an array of addresses
switch rawAddr := raw.Addresses.(type) {
case []interface{}:
for i, addr := range rawAddr {
if strAddr, ok := addr.(string); ok {
addr, err := decodeAddress(strAddr)
if err != nil {
return fmt.Errorf("invalid address at index %d: %v", i, err)
}
args.Addresses = append(args.Addresses, addr)
} else {
return fmt.Errorf("non-string address at index %d", i)
}
}
case string:
addr, err := decodeAddress(rawAddr)
if err != nil {
return fmt.Errorf("invalid address: %v", err)
}
args.Addresses = []common.Address{addr}
default:
return errors.New("invalid addresses in query")
}
}

// topics is an array consisting of strings and/or arrays of strings.
// JSON null values are converted to common.Hash{} and ignored by the filter manager.
if len(raw.Topics) > 0 {
args.Topics = make([][]common.Hash, len(raw.Topics))
for i, t := range raw.Topics {
switch topic := t.(type) {
case nil:
// ignore topic when matching logs

case string:
// match specific topic
top, err := decodeTopic(topic)
if err != nil {
return err
}
args.Topics[i] = []common.Hash{top}

case []interface{}:
// or case e.g. [null, "topic0", "topic1"]
for _, rawTopic := range topic {
if rawTopic == nil {
// null component, match all
args.Topics[i] = nil
break
}
if topic, ok := rawTopic.(string); ok {
parsed, err := decodeTopic(topic)
if err != nil {
return err
}
args.Topics[i] = append(args.Topics[i], parsed)
} else {
return errInvalidTopic
}
}
default:
return errInvalidTopic
}
}
}

return nil
}

func decodeAddress(s string) (common.Address, error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feels iffy - if the hex decode fails the error is set, but we return both attempted bytes conversion plus the error.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's copy paste from geth. I needed to change that Unumarshall

b, err := hexutil.Decode(s)
if err == nil && len(b) != common.AddressLength {
err = fmt.Errorf("hex has invalid length %d after decoding; expected %d for address", len(b), common.AddressLength)
}
return common.BytesToAddress(b), err
}

func decodeTopic(s string) (common.Hash, error) {
b, err := hexutil.Decode(s)
if err == nil && len(b) != common.HashLength {
err = fmt.Errorf("hex has invalid length %d after decoding; expected %d for topic", len(b), common.HashLength)
}
return common.BytesToHash(b), err
}
2 changes: 1 addition & 1 deletion go/common/viewingkey/viewing_key.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func GenerateViewingKeyForWallet(wal wallet.Wallet) (*ViewingKey, error) {
if err != nil {
return nil, err
}
encryptionToken := CalculateUserIDHex(crypto.CompressPubkey(viewingPrivateKeyECIES.PublicKey.ExportECDSA()))
encryptionToken := CalculateUserID(crypto.CompressPubkey(viewingPrivateKeyECIES.PublicKey.ExportECDSA()))
messageToSign, err := GenerateMessage(encryptionToken, chainID, PersonalSignVersion, messageType)
if err != nil {
return nil, fmt.Errorf("failed to generate message for viewing key: %w", err)
Expand Down
Loading
Loading