Skip to content

Commit

Permalink
Merge branch 'master' into fe/maintenance-read-method
Browse files Browse the repository at this point in the history
  • Loading branch information
bigboydiamonds committed Jul 25, 2024
2 parents 4a0dc8d + 8e30911 commit c842633
Show file tree
Hide file tree
Showing 112 changed files with 8,342 additions and 246 deletions.
36 changes: 22 additions & 14 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,17 +77,14 @@ jobs:

test:
name: Go Coverage
runs-on: ${{ matrix.platform }}
runs-on: ${{ (matrix.package == 'agents' || matrix.package == 'core' || matrix.package == 'tools' || contains(matrix.package, 'explorer') || contains(matrix.package, 'contrib')) && 'ubuntu-latest' || 'namespace-profile-default-coverage-runner' }}
if: ${{ needs.changes.outputs.package_count_deps > 0 && (github.event_name != 'push' || github.ref == format('refs/heads/{0}', github.event.repository.default_branch)) }}
needs: changes
strategy:
fail-fast: false
max-parallel: 8
matrix:
go-version:
- 1.22.x
platform:
- ubuntu-latest
# only do on agents for now. Anything that relies on solidity in a package should do this
package: ${{ fromJSON(needs.changes.outputs.packages_deps) }}
services:
Expand All @@ -112,6 +109,7 @@ jobs:

- name: Go modules cache
uses: actions/cache@v4
if: ${{ !contains(runner.name, 'nsc') }}
with:
# see https://github.com/mvdan/github-actions-golang
# also: https://glebbahmutov.com/blog/do-not-let-npm-cache-snowball/ w/ go build (workaround now is having a cache that just gets expired at night)
Expand All @@ -128,6 +126,14 @@ jobs:
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache: ${{ contains(runner.name, 'nsc') && 'false' || 'true' }}

# TODO: consider setting up cache key, see: https://discord.com/channels/975088590705012777/1263347501721714793/1263534719954452560
- name: Setup Go cache
uses: namespacelabs/nscloud-cache-action@v1
if: ${{ contains(runner.name, 'nsc') }}
with:
cache: go

- name: Verify MariaDB connection
env:
Expand Down Expand Up @@ -201,7 +207,7 @@ jobs:
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: password
MYSQL_PORT: ${{ job.services.mariadb.ports[3306] }}
GOMEMLIMIT: 3GiB
GOMEMLIMIT: 8GiB
GOGC: -1
ETHEREUM_RPC_URI: ${{ secrets.ETHEREUM_RPC_URI }}
GOPROXY: https://proxy.golang.org
Expand All @@ -220,15 +226,19 @@ jobs:
uses: jwalton/gh-docker-logs@v2
with:
dest: '/tmp/logs'
- name: Tar logs
if: failure()
run: tar cvzf ./logs.tgz /tmp/logs

- name: Replace forward slashes with dashes
id: replace
run: echo "::set-output name=package_name::$(echo ${{ matrix.package }} | sed 's/\//-/g')"
shell: bash


- name: Upload logs to GitHub
if: failure()
# if: failure()
uses: actions/upload-artifact@v4
with:
name: ${{matrix.package}}-logs.tgz
path: ./logs.tgz
name: ${{ steps.replace.outputs.package_name }}
path: /tmp/logs/**

- name: Send Coverage (Codecov)
uses: Wandalen/[email protected]
Expand All @@ -254,8 +264,6 @@ jobs:
matrix:
go-version:
- 1.22.x
platform:
- ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -489,7 +497,7 @@ jobs:
if: ${{ github.event_name != 'push' && needs.changes.outputs.package_count_deps > 0 }}
strategy:
fail-fast: false
max-parallel: 8
max-parallel: 12
matrix:
# only do on agents for now. Anything that relies on solidity in a package should do this
package: ${{ fromJSON(needs.changes.outputs.packages_deps) }}
Expand Down
18 changes: 16 additions & 2 deletions .github/workflows/goreleaser-actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ jobs:

# TODO: we may want to dry run this on prs
run-goreleaser:
runs-on: ubuntu-latest
runs-on:
- namespace-profile-fast-goreleaser
needs: [build-goreleaser,changes]
if: ${{ needs.changes.outputs.package_count > 0 }}
permissions:
Expand All @@ -128,7 +129,13 @@ jobs:
package: ${{ fromJSON(needs.changes.outputs.packages) }}
container:
image: ${{ needs.build-goreleaser.outputs.goreleaser-image }}
volumes: [ /repo ]
env:
NSC_CACHE_PATH: ${{ env.NSC_CACHE_PATH }} # env.NSC_CACHE_PATH contains the path to Cache Volume directory, that is `/cache`.
volumes:
- /repo
- /cache:/cache
options: --cap-add=SYS_ADMIN # Required to by nscloud-cache-action to call `mount`.

steps:
- name: Git Checkout
uses: actions/checkout@v4
Expand All @@ -137,6 +144,7 @@ jobs:
submodules: 'recursive'

- name: Set up cache
if: ${{ !contains(runner.name, 'nsc') }}
uses: actions/cache@v4
with:
path: |
Expand All @@ -146,6 +154,12 @@ jobs:
restore-keys: |
${{ runner.os }}-go-${{matrix.package}}
- name: Setup Go cache
uses: namespacelabs/nscloud-cache-action@v1
if: ${{ contains(runner.name, 'nsc') }}
with:
cache: go

- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v6
Expand Down
3 changes: 2 additions & 1 deletion agents/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/synapsecns/sanguine/agents

go 1.22
go 1.22.1

toolchain go1.22.4

Expand Down Expand Up @@ -95,6 +95,7 @@ require (
github.com/peterh/liner v1.2.1 // indirect
github.com/puzpuzpuz/xsync/v2 v2.5.1 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359 // indirect
github.com/status-im/keycard-go v0.2.0 // indirect
github.com/supranational/blst v0.3.11 // indirect
github.com/uptrace/opentelemetry-go-extra/otelutil v0.3.1 // indirect
Expand Down
2 changes: 2 additions & 0 deletions agents/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1049,6 +1049,8 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
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=
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359 h1:MdIGoY7G1boHSmELPx22SWkO0GhQV3bcShp/+Nk+1Vw=
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359/go.mod h1:GHaYSRAICY0YNxburxs6U4hxXAuD885rkFnH9k6xUYk=
github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM=
Expand Down
2 changes: 1 addition & 1 deletion contrib/git-changes-action/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/synapsecns/sanguine/contrib/git-changes-action

go 1.22
go 1.22.1

toolchain go1.22.4

Expand Down
40 changes: 34 additions & 6 deletions contrib/opbot/botmd/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ import (
"context"
"errors"
"fmt"
"log"
"math/big"
"regexp"
"strings"
"sync"
"time"

"github.com/dustin/go-humanize"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
Expand All @@ -14,15 +22,10 @@ import (
"github.com/slack-io/slacker"
"github.com/synapsecns/sanguine/contrib/opbot/signoz"
"github.com/synapsecns/sanguine/ethergo/chaindata"
"github.com/synapsecns/sanguine/ethergo/client"
rfqClient "github.com/synapsecns/sanguine/services/rfq/api/client"
"github.com/synapsecns/sanguine/services/rfq/contracts/fastbridge"
"github.com/synapsecns/sanguine/services/rfq/relayer/relapi"
"log"
"math/big"
"regexp"
"strings"
"sync"
"time"
)

func (b *Bot) requiresSignoz(definition *slacker.CommandDefinition) *slacker.CommandDefinition {
Expand Down Expand Up @@ -138,6 +141,7 @@ func (b *Bot) traceCommand() *slacker.CommandDefinition {
})
}

// nolint: gocognit
func (b *Bot) rfqLookupCommand() *slacker.CommandDefinition {
return &slacker.CommandDefinition{
Command: "rfq <tx>",
Expand Down Expand Up @@ -204,7 +208,13 @@ func (b *Bot) rfqLookupCommand() *slacker.CommandDefinition {
}

var slackBlocks []slack.Block

for _, status := range statuses {
client, err := b.rpcClient.GetChainClient(ctx.Context(), int(status.OriginChainID))
if err != nil {
log.Printf("error getting chain client: %v\n", err)
}

objects := []*slack.TextBlockObject{
{
Type: slack.MarkdownType,
Expand All @@ -222,6 +232,10 @@ func (b *Bot) rfqLookupCommand() *slacker.CommandDefinition {
Type: slack.MarkdownType,
Text: fmt.Sprintf("*OriginTxHash*: %s", toTXSlackLink(status.OriginTxHash, status.OriginChainID)),
},
{
Type: slack.MarkdownType,
Text: fmt.Sprintf("*Estimated Tx Age*: %s", getTxAge(ctx.Context(), client, status.GetQuoteRequestStatusResponse)),
},
}

if status.DestTxHash == (common.Hash{}).String() {
Expand Down Expand Up @@ -334,6 +348,20 @@ func (b *Bot) makeFastBridge(ctx context.Context, req *relapi.GetQuoteRequestRes
return fastBridgeHandle, nil
}

func getTxAge(ctx context.Context, client client.EVM, res *relapi.GetQuoteRequestStatusResponse) string {
// TODO: add CreatedAt field to GetQuoteRequestStatusResponse so we don't need to make network calls?
receipt, err := client.TransactionReceipt(ctx, common.HexToHash(res.OriginTxHash))
if err != nil {
return "unknown time ago"
}
txBlock, err := client.HeaderByHash(ctx, receipt.BlockHash)
if err != nil {
return "unknown time ago"
}

return humanize.Time(time.Unix(int64(txBlock.Time), 0))
}

func toExplorerSlackLink(ogHash string) string {
rfqHash := strings.ToUpper(ogHash)
// cut off 0x
Expand Down
28 changes: 27 additions & 1 deletion contrib/opbot/botmd/commands_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package botmd_test

import (
"github.com/synapsecns/sanguine/contrib/opbot/botmd"
"context"
"testing"

"github.com/synapsecns/sanguine/contrib/opbot/botmd"
"github.com/synapsecns/sanguine/core/metrics"
omnirpcClient "github.com/synapsecns/sanguine/services/omnirpc/client"
"github.com/synapsecns/sanguine/services/rfq/relayer/relapi"
)

func TestStripLinks(t *testing.T) {
Expand All @@ -13,3 +18,24 @@ func TestStripLinks(t *testing.T) {
t.Errorf("StripLinks(%s) = %s; want %s", testLink, got, expected)
}
}

func TestTxAge(t *testing.T) {
notExpected := "unknown time ago" // should be a definite time

status := &relapi.GetQuoteRequestStatusResponse{
OriginTxHash: "0x954264d120f5f3cf50edc39ebaf88ea9dc647d9d6843b7a120ed3677e23d7890",
OriginChainID: 421611,
}

ctx := context.Background()

client := omnirpcClient.NewOmnirpcClient("https://arb1.arbitrum.io/rpc", metrics.Get())
cc, err := client.GetChainClient(ctx, int(status.OriginChainID))
if err != nil {
t.Fatalf("GetChainClient() failed: %v", err)
}

if got := botmd.GetTxAge(context.Background(), cc, status); got == notExpected {
t.Errorf("TxAge(%s) = %s; want not %s", status.OriginTxHash, got, notExpected)
}
}
11 changes: 11 additions & 0 deletions contrib/opbot/botmd/export_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
package botmd

import (
"context"

"github.com/synapsecns/sanguine/ethergo/client"
"github.com/synapsecns/sanguine/services/rfq/relayer/relapi"
)

func StripLinks(input string) string {
return stripLinks(input)
}

func GetTxAge(ctx context.Context, client client.EVM, res *relapi.GetQuoteRequestStatusResponse) string {
return getTxAge(ctx, client, res)
}
3 changes: 2 additions & 1 deletion contrib/opbot/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ require (
github.com/charmbracelet/huh/spinner v0.0.0-20240618200428-90406d79077d
github.com/davidmytton/url-verifier v1.0.1
github.com/dubonzi/otelresty v1.3.0
github.com/dustin/go-humanize v1.0.1
github.com/ethereum/go-ethereum v1.13.8
github.com/go-http-utils/headers v0.0.0-20181008091004-fed159eddc2a
github.com/go-resty/resty/v2 v2.13.1
Expand Down Expand Up @@ -112,7 +113,6 @@ require (
github.com/deckarep/golang-set/v2 v2.6.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/dennwc/varint v1.0.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/ethereum/c-kzg-4844 v0.4.0 // indirect
Expand Down Expand Up @@ -214,6 +214,7 @@ require (
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/rung/go-safecast v1.0.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359 // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
Expand Down
2 changes: 2 additions & 0 deletions contrib/opbot/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,8 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
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=
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359 h1:MdIGoY7G1boHSmELPx22SWkO0GhQV3bcShp/+Nk+1Vw=
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359/go.mod h1:GHaYSRAICY0YNxburxs6U4hxXAuD885rkFnH9k6xUYk=
github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
Expand Down
3 changes: 2 additions & 1 deletion contrib/promexporter/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/synapsecns/sanguine/contrib/promexporter

go 1.22
go 1.22.1

toolchain go1.22.4

Expand Down Expand Up @@ -180,6 +180,7 @@ require (
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/rung/go-safecast v1.0.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359 // indirect
github.com/segmentio/asm v1.2.0 // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions contrib/promexporter/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -947,6 +947,8 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
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=
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359 h1:MdIGoY7G1boHSmELPx22SWkO0GhQV3bcShp/+Nk+1Vw=
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359/go.mod h1:GHaYSRAICY0YNxburxs6U4hxXAuD885rkFnH9k6xUYk=
github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
Expand Down
3 changes: 2 additions & 1 deletion contrib/screener-api/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/synapsecns/sanguine/contrib/screener-api

go 1.22
go 1.22.1

toolchain go1.22.4

Expand Down Expand Up @@ -138,6 +138,7 @@ require (
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rung/go-safecast v1.0.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359 // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
Expand Down
2 changes: 2 additions & 0 deletions contrib/screener-api/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,8 @@ github.com/rung/go-safecast v1.0.1/go.mod h1:dzUcUS2UMtbfVc7w6mx/Ur3UYcpXEZC+Wil
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
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/samborkent/uuid v0.0.0-20240324164324-079317f91359 h1:MdIGoY7G1boHSmELPx22SWkO0GhQV3bcShp/+Nk+1Vw=
github.com/samborkent/uuid v0.0.0-20240324164324-079317f91359/go.mod h1:GHaYSRAICY0YNxburxs6U4hxXAuD885rkFnH9k6xUYk=
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
Expand Down
Loading

0 comments on commit c842633

Please sign in to comment.