m2pool_core/cmd/set_addr/set_addr.go

93 lines
2.3 KiB
Go

// set_addr.go
package main
import (
"crypto/md5"
"database/sql"
"encoding/hex"
"flag"
"fmt"
"log"
"time"
_ "github.com/go-sql-driver/mysql"
)
func main() {
paddr := flag.String("addr", "", "The mining address (string)")
pserver := flag.String("server", "", "The db host and port (string)")
pcoin := flag.String("coin", "", "The coin name (string)")
puser := flag.String("user", "", "The db user (string)")
ppassword := flag.String("password", "", "The db user's password (string)")
pdbn := flag.String("db", "", "The db name (string)")
flag.Parse()
if len(*paddr) <= 0 /* || len(*pdb) <= 0 || len(*puser) <= 0 || len(*ppassword) <= 0*/ {
log.Fatalf("Failed to param")
return
}
addr := *paddr
user := *puser
password := *ppassword
dbserver := *pserver
coin := *pcoin
dbn := *pdbn
if len(user) <= 0 {
user = "m2pool"
}
if len(password) <= 0 {
password = "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd"
}
if len(dbserver) <= 0 {
dbserver = "127.0.0.1:3306"
}
if len(coin) <= 0 {
coin = "nexa"
}
if len(dbn) <= 0 {
dbn = "m2pooldb"
}
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s", user, password, dbserver, dbn)
//log.Println("dsn", dsn)
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatalf("Error opening database: %v", err)
return
}
defer db.Close()
table_name := coin + "_address"
var count int
querySQL := fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE addr = ?", table_name)
err = db.QueryRow(querySQL, addr).Scan(&count)
if err != nil {
log.Fatalf("Error checking if address exists: %v", err)
return
}
hash := md5.Sum([]byte(addr + "m2pool_alias"))
alias := hex.EncodeToString(hash[:])
if count > 0 {
updateSQL := fmt.Sprintf("UPDATE %s SET date =?, addr = ?, alias= ?, valid = 1 WHERE addr = ?", table_name)
_, err := db.Exec(updateSQL, time.Now().Format("2006-01-02 15:04:05"), addr, alias, addr)
if err != nil {
log.Fatalf("Error updating address: %v", err)
return
}
fmt.Printf("Address updated: %s\n", addr)
} else {
insertSQL := fmt.Sprintf("INSERT INTO %s (date, addr, alias, valid) VALUES (?, ?, ?, ?)", table_name)
_, err := db.Exec(insertSQL, time.Now().Format("2006-01-02 15:04:05"), addr, alias, 1)
if err != nil {
log.Fatalf("Error inserting address: %v", err)
}
fmt.Printf("Address inserted: %s\n", addr)
}
}