Skip to content

Commit

Permalink
small improvements based on comments (#11491)
Browse files Browse the repository at this point in the history
* small improvements based on comments

* add unit test
  • Loading branch information
shileiwill authored Dec 8, 2023
1 parent 1b357f6 commit 1a45097
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,6 @@ type StreamsLookup struct {
Block uint64
}

func (l *StreamsLookup) IsMercuryVersionUnkown() bool {
return l.FeedParamKey != FeedIDs
}

func (l *StreamsLookup) IsMercuryV02() bool {
return l.FeedParamKey == FeedIdHex && l.TimeParamKey == BlockNumber
}
Expand All @@ -117,6 +113,6 @@ func (l *StreamsLookup) IsMercuryV03() bool {
return l.FeedParamKey == FeedIDs
}

func (l *StreamsLookup) IsMercuryUsingBatchPathV03() bool {
func (l *StreamsLookup) IsMercuryV03UsingBlockNumber() bool {
return l.TimeParamKey == BlockNumber
}
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ func (s *streams) buildResult(ctx context.Context, i int, checkResult ocr2keeper
// tried to call mercury
lookupLggr.Infof("at block %d upkeep %s trying to DecodeStreamsLookupRequest performData=%s", block, upkeepId, hexutil.Encode(checkResults[i].PerformData))
streamsLookupErr, err := s.packer.DecodeStreamsLookupRequest(checkResult.PerformData)

if err != nil {
lookupLggr.Debugf("at block %d upkeep %s DecodeStreamsLookupRequest failed: %v", block, upkeepId, err)
// user contract did not revert with StreamsLookup error
Expand All @@ -144,7 +145,7 @@ func (s *streams) buildResult(ctx context.Context, i int, checkResult ocr2keeper
return
}

// mercury permission checking for v0.3 is done by mercury server
// mercury permission checking for v0.3 is done by mercury server, so no need to check here
if streamsLookupResponse.IsMercuryV02() {
// check permission on the registry for mercury v0.2
opts := s.buildCallOpts(ctx, block)
Expand All @@ -159,8 +160,8 @@ func (s *streams) buildResult(ctx context.Context, i int, checkResult ocr2keeper
checkResults[i].IneligibilityReason = uint8(mercury.MercuryUpkeepFailureReasonMercuryAccessNotAllowed)
return
}
} else if streamsLookupResponse.IsMercuryVersionUnkown() {
// if mercury version cannot be determined, set failure reason
} else if !streamsLookupResponse.IsMercuryV03() {
// if mercury version is not v02 or v03, set failure reason
lookupLggr.Debugf("at block %d upkeep %s NOT allowed to query Mercury server", block, upkeepId)
checkResults[i].IneligibilityReason = uint8(mercury.MercuryUpkeepFailureReasonInvalidRevertDataInput)
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ import (
"testing"
"time"

"github.com/pkg/errors"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -619,6 +620,31 @@ func TestStreams_StreamsLookup(t *testing.T) {
},
hasError: true,
},
{
name: "failure - invalid mercury version",
input: []ocr2keepers.CheckResult{
{
// This Perform data contains invalid FeedParamKey: {feedIdHex:RandomString [ETD-USD BTC-ETH] blockNumber 100 [48 120 48 48]}
PerformData: hexutil.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000166665656449644865783a52616e646f6d537472696e670000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000074554442d5553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074254432d45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000"),
UpkeepID: upkeepIdentifier,
Trigger: ocr2keepers.Trigger{
BlockNumber: blockNum,
},
IneligibilityReason: uint8(encoding.UpkeepFailureReasonTargetCheckReverted),
},
},
expectedResults: []ocr2keepers.CheckResult{
{
PerformData: hexutil.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000166665656449644865783a52616e646f6d537472696e670000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000074554442d5553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074254432d45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000"),
UpkeepID: upkeepIdentifier,
Trigger: ocr2keepers.Trigger{
BlockNumber: blockNum,
},
IneligibilityReason: uint8(mercury.MercuryUpkeepFailureReasonInvalidRevertDataInput),
},
},
hasError: true,
},
}

for _, tt := range tests {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func (c *client) multiFeedsRequest(ctx context.Context, ch chan<- mercury.Mercur

params := fmt.Sprintf("%s=%s&%s=%s", mercury.FeedIDs, strings.Join(sl.Feeds, ","), mercury.Timestamp, sl.Time.String())
batchPathV03 := mercuryBatchPathV03
if sl.IsMercuryUsingBatchPathV03() {
if sl.IsMercuryV03UsingBlockNumber() {
batchPathV03 = mercuryBatchPathV03BlockNumber
}
reqUrl := fmt.Sprintf("%s%s%s", c.mercuryConfig.Credentials().URL, batchPathV03, params)
Expand Down

0 comments on commit 1a45097

Please sign in to comment.