diff --git a/framework/.changeset/v0.13.7.md b/framework/.changeset/v0.13.7.md new file mode 100644 index 000000000..9aaa681c8 --- /dev/null +++ b/framework/.changeset/v0.13.7.md @@ -0,0 +1 @@ +- Add `ReplayLogPollerFromBlock` function to Chainlink Client \ No newline at end of file diff --git a/framework/clclient/client.go b/framework/clclient/client.go index 1f1b63258..6f2093687 100644 --- a/framework/clclient/client.go +++ b/framework/clclient/client.go @@ -9,6 +9,7 @@ import ( "net/http" "os" "regexp" + "strconv" "strings" "sync" "time" @@ -1431,3 +1432,33 @@ func ImportP2PKeys(cl []*ChainlinkClient, keys [][]byte) error { } return eg.Wait() } + +func ReplayLogPollerFromBlock(cl []*ChainlinkClient, fromBlock, evmChainID int64) error { + eg := &errgroup.Group{} + for _, c := range cl { + eg.Go(func() error { + _, _, err := c.ReplayLogPollerFromBlock(fromBlock, evmChainID) + return err + }) + } + return eg.Wait() +} + +func (c *ChainlinkClient) ReplayLogPollerFromBlock(fromBlock, evmChainID int64) (*ReplayResponse, *http.Response, error) { + specObj := &ReplayResponse{} + resp, err := c.APIClient.R(). + SetResult(&specObj). + SetQueryParams(map[string]string{ + "family": "evm", + "ChainID": strconv.FormatInt(evmChainID, 10), + }). + SetPathParams(map[string]string{ + "fromBlock": strconv.FormatInt(fromBlock, 10), + }). + Post("/v2/replay_from_block/{fromBlock}") + if err != nil { + return nil, nil, err + } + + return specObj, resp.RawResponse, err +} diff --git a/framework/clclient/models.go b/framework/clclient/models.go index 69f9d9d93..c99c5a1b4 100644 --- a/framework/clclient/models.go +++ b/framework/clclient/models.go @@ -3,6 +3,7 @@ package clclient import ( "bytes" "fmt" + "math/big" "text/template" "time" @@ -1419,3 +1420,16 @@ type ForwarderAttributes struct { CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } + +type ReplayResponse struct { + Data ReplayResponseData `json:"data"` +} + +type ReplayResponseData struct { + Attributes ReplayResponseAttributes `json:"attributes"` +} + +type ReplayResponseAttributes struct { + Message string `json:"message"` + EVMChainID *big.Int `json:"evmChainID"` +}