diff --git a/README.md b/README.md index df61391..37cb381 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ references ### Getting Started at opBNB testnet -1. Prepare a PostgreSQL database +1. Prepare a MySQL database ``` docker-compose up -d diff --git a/cmd/bot/run.go b/cmd/bot/run.go index 88756ae..83c632e 100644 --- a/cmd/bot/run.go +++ b/cmd/bot/run.go @@ -17,7 +17,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" - "gorm.io/driver/postgres" + "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/clause" ) @@ -274,31 +274,16 @@ func getLogs(client *core.ClientExt, fromBlock *big.Int, toBlock *big.Int, contr // connect connects to the database func connect(log log.Logger, dbConfig config.DBConfig) (*gorm.DB, error) { - dsn := fmt.Sprintf("host=%s dbname=%s sslmode=disable", dbConfig.Host, dbConfig.Name) - if dbConfig.Port != 0 { - dsn += fmt.Sprintf(" port=%d", dbConfig.Port) - } - if dbConfig.User != "" { - dsn += fmt.Sprintf(" user=%s", dbConfig.User) - } - if dbConfig.Password != "" { - dsn += fmt.Sprintf(" password=%s", dbConfig.Password) - } - + dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Name) gormConfig := gorm.Config{ Logger: core.NewGormLogger(log), SkipDefaultTransaction: true, - - // The postgres parameter counter for a given query is represented with uint16, - // resulting in a parameter limit of 65535. In order to avoid reaching this limit - // we'll utilize a batch size of 3k for inserts, well below the limit as long as - // the number of columns < 20. - CreateBatchSize: 3_000, + CreateBatchSize: 3_000, } retryStrategy := &retry.ExponentialStrategy{Min: 1000, Max: 20_000, MaxJitter: 250} gorm_, err := retry.Do[*gorm.DB](context.Background(), 10, retryStrategy, func() (*gorm.DB, error) { - gorm_, err := gorm.Open(postgres.Open(dsn), &gormConfig) + gorm_, err := gorm.Open(mysql.Open(dsn), &gormConfig) if err != nil { return nil, fmt.Errorf("failed to connect to database: %w", err) } diff --git a/docker-compose.yml b/docker-compose.yml index 26ddeef..c4db5b3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,21 +1,18 @@ version: '3.8' services: - postgres: - image: postgres:latest + mysql: + image: mysql:latest environment: - - POSTGRES_USER=db_username - - POSTGRES_PASSWORD=db_password - - POSTGRES_DB=db_name - - PGDATA=/data/postgres - - POSTGRES_HOST_AUTH_METHOD=trust - healthcheck: - test: [ "CMD-SHELL", "pg_isready -q -U db_username -d db_name" ] + - MYSQL_ROOT_PASSWORD=db_password + - MYSQL_DATABASE=db_name + - MYSQL_USER=db_username + - MYSQL_PASSWORD=db_password + command: --default-authentication-plugin=mysql_native_password ports: - - "5434:5432" + - "3306:3306" volumes: - - postgres_data:/data/postgres + - mysql_data:/var/lib/mysql volumes: - postgres_data: - + mysql_data: diff --git a/go.mod b/go.mod index e8630f4..013a400 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,8 @@ require ( github.com/ethereum-optimism/optimism v1.2.0 github.com/ethereum/go-ethereum v1.13.4 github.com/urfave/cli/v2 v2.25.7 - gorm.io/driver/postgres v1.5.4 + golang.org/x/crypto v0.14.0 + gorm.io/driver/mysql v1.5.2 gorm.io/gorm v1.25.5 ) @@ -34,6 +35,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/getsentry/sentry-go v0.18.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -42,9 +44,6 @@ require ( github.com/google/uuid v1.3.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/holiman/uint256 v1.2.3 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.4.3 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/klauspost/compress v1.16.7 // indirect @@ -69,7 +68,6 @@ require ( github.com/tklauser/numcpus v0.6.1 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - golang.org/x/crypto v0.14.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/sync v0.3.0 // indirect diff --git a/go.sum b/go.sum index 5ff7067..19316d4 100644 --- a/go.sum +++ b/go.sum @@ -114,6 +114,8 @@ github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3Bop github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -193,12 +195,6 @@ github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/ github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= -github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= 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/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= @@ -566,8 +562,9 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.5.4 h1:Iyrp9Meh3GmbSuyIAGyjkN+n9K+GHX9b9MqsTL4EJCo= -gorm.io/driver/postgres v1.5.4/go.mod h1:Bgo89+h0CRcdA33Y6frlaHHVuTdOf87pmyzwW9C/BH0= +gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs= +gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8= +gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls= gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=