Skip to content

Evol/ajout post new block #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions data/block.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package data

type WinBlock struct {
Height int `json:"height"`
Timestamp int `json:"timestamp"`
LauncherId string `json:"string"`
}

// NewWinBlock returns a WinBlock pointer.
func NewWinBlock(timestamp, height int, launcherId string) *WinBlock {
u := &WinBlock{}
u.LauncherId = launcherId
u.Timestamp = timestamp
u.Height = height

return u
}
50 changes: 34 additions & 16 deletions data/farmer.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package data

import "fmt"

// TableName overrides the table name used by User to `profiles`
func (Farmer) TableName() string {
return "farmer"
Expand All @@ -13,8 +15,8 @@ type Farmer struct {
AuthenticationPublicKey string `gorm:"authentication_public_key" json:"authentication_public_key"`
SingletonTip []byte `gorm:"singleton_tip" json:"singleton_tip"`
SingletonTipState []byte `gorm:"singleton_tip_state" json:"singleton_tip_state"`
Points int `gorm:"points" json:"points"`
//Difficulty int `gorm:"difficulty" json:"difficulty"`
Points float64 `gorm:"points" json:"points"`
Difficulty int `gorm:"difficulty" json:"difficulty"`
PayoutInstructions string `gorm:"payout_instructions" json:"payout_instructions"`
IsPoolMember bool `gorm:"is_pool_member" json:"is_pool_member"`
FarmerNetSpace float64 `gorm:"farmer_netspace" json:"farmer_netspace"`
Expand All @@ -38,18 +40,6 @@ func GetFarmer(LauncherId string) (*Farmer, error) {
return &toreturn, nil
}

// UpdateFarmerPoint update points of user
func UpdateFarmerPoint(farmer *Farmer) error {
db := GetConn()
defer db.Close()
db.Model(&Farmer{}).Where("launcher_id = ?", farmer.LauncherId).Update("points", farmer.Points)
errs := db.GetErrors()
if len(errs) > 0 {
return errs[0]
}
return nil
}

// GetFarmers get all farmer
func GetFarmers() ([]*Farmer, error) {
db := GetConn()
Expand All @@ -66,7 +56,7 @@ func GetFarmers() ([]*Farmer, error) {
return toreturn, nil
}

// GetFarmers top farmer
// GetTopFarmers get top farmer
func GetTopFarmers() ([]*Farmer, error) {
db := GetConn()
defer db.Close()
Expand All @@ -83,7 +73,7 @@ func GetTopFarmers() ([]*Farmer, error) {
return toreturn, nil
}

// GetFarmers get all farmer
// GetFarmersCount sum all farmer
func GetFarmersCount() (int, error) {
db := GetConn()
defer db.Close()
Expand All @@ -95,3 +85,31 @@ func GetFarmersCount() (int, error) {
}
return toreturn, nil
}

// GetFarmerFromP2SingletonPuzzleHash get farmer from puzzlehash.
func GetFarmerFromP2SingletonPuzzleHash(P2SingletonPuzzleHash string) (string, error) {
db := GetConn()
defer db.Close()
toreturn := Farmer{}
query := fmt.Sprintf("p2_singleton_puzzle_hash=\"%s\" AND is_pool_member=1", P2SingletonPuzzleHash)
db.Table("farmer").Where(query).Scan(&toreturn)
errs := db.GetErrors()
if len(errs) > 0 {
return "", errs[0]
}
return toreturn.P2SingletonPuzzleHash, nil
}

// GetFarmerFromRewardAdress get farmer from puzzlehash.
func GetFarmerFromRewardAdress(rewardAdress string) (string, error) {
db := GetConn()
defer db.Close()
toreturn := Farmer{}
query := fmt.Sprintf("payout_instructions=\"%s\" AND is_pool_member=1", rewardAdress)
db.Table("farmer").Where(query).Scan(&toreturn)
errs := db.GetErrors()
if len(errs) > 0 {
return "", errs[0]
}
return toreturn.P2SingletonPuzzleHash, nil
}
2 changes: 1 addition & 1 deletion data/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func Migrate() {
db := GetConn()
defer db.Close()
db.AutoMigrate(
&Farmer{}, &PoolAdmin{}, &Partial{},
&PoolAdmin{},
)
}

Expand Down
81 changes: 63 additions & 18 deletions data/miningstatpool.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,36 @@
package data

import (
"io/ioutil"
"bytes"
"encoding/json"
"fmt"
"log"
"strconv"
"strings"
"net/http"
"time"
)

type Coins struct {
Page int `json:"page"`
Pages int `json:"pages"`
Total int `json:"total"`
Data []struct {
Hash string `json:"hash"`
Height int `json:"height"`
Time int `json:"time"`
TxCount int `json:"txCount"`
Generator string `json:"generator"`
Previousblockhash string `json:"previousblockhash"`
BlockDetail struct {
FarmerRewardAddress string `json:"farmerRewardAddress"`
PoolTargetAddress string `json:"poolTargetAddress"`
Time int `json:"time"`
BlockNo int `json:"blockNo"`
Fees int `json:"fees"`
PoolContractPuzzle string `gorm:"default:true" json:"poolContractPuzzleHash"`
} `json:"blockDetail"`
Nextblockhash string `json:"nextblockhash,omitempty"`
} `json:"data"`
}

type MiningStatPool struct {
Status string `json:"status"`
Expand All @@ -17,6 +41,7 @@ type LastBlocks struct {
Height int `json:"height"`
Timestamp int `json:"timestamp"`
}

type PoolStats struct {
PoolSpaceTiB float64 `json:"poolSpaceTiB"`
Farmers int `json:"farmers"`
Expand All @@ -28,20 +53,6 @@ type Data struct {
PoolStats PoolStats `json:"poolStats"`
}


func LoadFileSoloPlot() float64 {
content, err := ioutil.ReadFile("solo_plot.txt")
if err != nil {
log.Fatal(err)
}

// Convert []byte to string and print to screen
text := string(content)
Stringfloat := strings.TrimSuffix(text, "\n")
soloNetspace, _ := strconv.ParseFloat(Stringfloat, 64)
return soloNetspace
}

// GetMiningStatPool return structure for minig stat pool
func GetMiningStatPool() (*MiningStatPool, error) {
toreturn := MiningStatPool{}
Expand All @@ -51,7 +62,41 @@ func GetMiningStatPool() (*MiningStatPool, error) {
toreturn.Data.PoolStats.CurrentFeeType = feestype
toreturn.Data.PoolStats.PoolSpaceTiB, _ = GetNetSpaceTotal()
toreturn.Data.PoolStats.PoolSpaceTiB += LoadFileSoloPlot()
toreturn.Data.LastBlocks = []LastBlocks{{Height: 585001, Timestamp: 1626533952}}
coins := Coins{}
var myClient = &http.Client{Timeout: 10 * time.Second}
for p := 0; p < 300; p++ { // =4 minute d'exec
url := fmt.Sprintf("https://chia.tt/api/chia/blockchain/block?page=%d&count=20", p)
r, err := myClient.Get(url)
if err != nil {
return nil, err
}
err = json.NewDecoder(r.Body).Decode(&coins)
if err != nil {
return nil, err
}
for i := 0; i < len(coins.Data); i++ {
var launcherid string
if coins.Data[i].BlockDetail.PoolContractPuzzle != "" {
launcherid, _ = GetFarmerFromP2SingletonPuzzleHash(coins.Data[i].BlockDetail.PoolContractPuzzle[2:])
} else {
launcherid, _ = GetFarmerFromRewardAdress(coins.Data[i].BlockDetail.FarmerRewardAddress)
}
if launcherid != "" {
r.Body.Close()
toreturn.Data.LastBlocks = []LastBlocks{{Height: coins.Data[i].Height, Timestamp: coins.Data[i].Time}}
values := NewWinBlock(coins.Data[i].Time, coins.Data[i].Height, launcherid)
json_data, err := json.Marshal(values)

if err != nil {
log.Fatal(err)
}

http.Post("https://localhost:8081/block/new_block_discord", "application/json",
bytes.NewBuffer(json_data))
}
}
r.Body.Close()
}
toreturn.Status = "OK"
return &toreturn, nil
}
5 changes: 2 additions & 3 deletions data/netspace.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package data

import (
"fmt"
"time"
"chia_api/redis"
"chia_api/utils"
"fmt"
"time"
)

// GetNetSpaceByLauncherId calculate size from partial share
Expand All @@ -27,7 +27,6 @@ func GetNetSpaceByLauncherId(LauncherId string) (float64, error) {
averageDifficulty = averageDifficulty / float64(count)
size = (float64(count) / (float64(timeToCheck) * ((5 / averageDifficulty) / 43200 / 106364865085.00))) / 1099511627776
}
fmt.Printf("db %f\n", size)
errs := db.GetErrors()
if len(errs) > 0 {
return 0, errs[0]
Expand Down
34 changes: 0 additions & 34 deletions data/partial.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package data

import (
"fmt"
)

type Tabler interface {
TableName() string
}
Expand All @@ -19,11 +15,6 @@ type Partial struct {
Difficulty int64 `gorm:"difficulty" json:"difficulty"`
}

type SolotPlot struct {
LauncherId string `gorm:"-" json:"launcher_id"`
Point int `gorm:"-" json:"pointPerHour"`
}

// GetPartials get all partial
func GetPartials() ([]*Partial, error) {
db := GetConn()
Expand All @@ -42,7 +33,6 @@ func GetLastSeen(LauncherId string) (int64, error) {
db := GetConn()
defer db.Close()
var toreturn int64
fmt.Println()
db.Raw("SELECT timestamp FROM partial where launcher_id=\"" + LauncherId + "\" ORDER BY timestamp DESC LIMIT 1").Row().Scan(&toreturn)

errs := db.GetErrors()
Expand All @@ -57,7 +47,6 @@ func GetPartial(LauncherId string) ([]*Partial, error) {
db := GetConn()
defer db.Close()
toreturn := []*Partial{}
fmt.Println()
db.Raw("SELECT * FROM partial where launcher_id=\"" + LauncherId + "\"").Scan(&toreturn)
errs := db.GetErrors()
if len(errs) > 0 {
Expand All @@ -66,29 +55,6 @@ func GetPartial(LauncherId string) ([]*Partial, error) {
return toreturn, nil
}

// GetTotalPoint return total of points
func GetTotalPoint() (int, error) {
db := GetConn()
defer db.Close()
var points int
db.Raw("SELECT SUM(points) FROM farmer").Row().Scan(&points)
errs := db.GetErrors()
if len(errs) > 0 {
return 0, errs[0]
}
return points, nil
}

// GetPoints Value
func GetValuePoint() (float64, error) {
var points int
points, _ = GetTotalPoint()
var value float64
value = float64(1750000000000 / points)

return value, nil
}

// NewPArtial returns a Admin pointer.
func NewPArtial(launcherId string, timestamp int64, difficulty int64) *Partial {
p := &Partial{}
Expand Down
25 changes: 10 additions & 15 deletions data/poolinfo.go
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
package data


type PoolInfo struct {
Status string `json:"status"`
Data DataPool `json:"data"`
Status string `json:"status"`
Data DataPool `json:"data"`
}
type DataPool struct {
LastBlocks []LastBlocks `json:"lastBlocks"`
PoolSpaceTiB float64 `json:"poolSpaceTiB"`
Farmers int `json:"farmers"`
CurrentFeeType string `json:"currentFeeType"`
CurrentFee float64 `json:"currentFee"`
TotalPoints int `json:"totalPoints"`
PointValue float64 `json:"pointValue"`
LastBlocks []LastBlocks `json:"lastBlocks"`
PoolSpaceTiB float64 `json:"poolSpaceTiB"`
Farmers int `json:"farmers"`
CurrentFeeType string `json:"currentFeeType"`
CurrentFee float64 `json:"currentFee"`
TotalPoints float64 `json:"totalPoints"`
PointValue float64 `json:"pointValue"`
}



// GetMiningStatPool return structure for minig stat pool
// GetPoolInfo return for pool info
func GetPoolInfo() (*PoolInfo, error) {
toreturn := PoolInfo{}
fees, feestype := GetFees()
Expand All @@ -33,5 +30,3 @@ func GetPoolInfo() (*PoolInfo, error) {

return &toreturn, nil
}


2 changes: 0 additions & 2 deletions handlers/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package handlers

import (
"chia_api/data"
"fmt"
"github.com/go-martini/martini"
"net/http"
)
Expand All @@ -11,7 +10,6 @@ import (
func GenerateAdmin(params martini.Params) (int, string) {

u := data.NewAdmin(params["launcher_id"])
fmt.Println(u)
err := u.Save()
if err != nil {
return http.StatusServiceUnavailable, err.Error()
Expand Down
Loading