package exchange import ( "fmt" "github.com/shopspring/decimal" "time" ) type ExPower struct { expr int64 power decimal.Decimal } var exPower = &ExPower{ expr: 0, power: decimal.Zero, } var totalPower = decimal.NewFromFloat(21 * 10000 * 1000) var hisProduct = decimal.NewFromFloat(28080000) type ExPowerResp struct { Code int `json:"code"` Msg string `json:"msg"` Time int `json:"time"` Data string `json:"data"` } func GetExPower() decimal.Decimal { nowProduct := exPower.power if exPower.expr < time.Now().Unix() { nowProduct = lastPower() } lessPower := totalPower.Sub(nowProduct) if lessPower.LessThanOrEqual(decimal.Zero) || lessPower.GreaterThanOrEqual(totalPower.Sub(hisProduct)) { return totalPower.Sub(hisProduct) } return lessPower } func lastPower() decimal.Decimal { url := fmt.Sprintf("https://openapi.aichash.xyz/openapi/v1/server/wholeNetwork") resp, err := get[ExPowerResp](url) if err != nil { return exPower.power } if resp.Code == 200 { power, err := decimal.NewFromString(resp.Data) if err != nil { return exPower.power } else { setLastPower(power) } } return exPower.power } func setLastPower(power decimal.Decimal) { exPower.expr = time.Now().Unix() + 3600 exPower.power = power }