Skip to content
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

Miner block rewards test #491

Merged
merged 86 commits into from
Jan 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
4acd24d
changes
Sriep Dec 5, 2022
497a67d
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Dec 5, 2022
2779b0c
miner block rewards test
Sriep Dec 8, 2022
d64af74
lint
Sriep Dec 8, 2022
61c1c61
lint
Sriep Dec 8, 2022
c3895fd
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Dec 8, 2022
5576f5e
lint
Sriep Dec 8, 2022
772d289
lint
Sriep Dec 8, 2022
b1ca19e
touch
Sriep Dec 8, 2022
52505b5
-> int
Sriep Dec 8, 2022
904ef01
check each round consistent
Sriep Dec 8, 2022
5acc454
set debug true
Sriep Dec 8, 2022
b397236
lint
Sriep Dec 8, 2022
992cabb
add delegate test
Sriep Dec 8, 2022
0d6ec03
rename
Sriep Dec 8, 2022
bf789d7
remove debug line
Sriep Dec 8, 2022
04db6ec
comments
Sriep Dec 8, 2022
6e08fa1
revert debug enablers
Sriep Dec 9, 2022
e9f4fd3
fix debug lines
Sriep Dec 9, 2022
43149b1
comma
Sriep Dec 9, 2022
c47ec71
lint
Sriep Dec 9, 2022
60e32e4
dead code
Sriep Dec 9, 2022
b24fde1
testSetup -> t
Sriep Dec 9, 2022
4456589
use actions branch with debug = true
Sriep Dec 9, 2022
284291d
touch
Sriep Dec 9, 2022
c740bfe
touch
Sriep Dec 9, 2022
3d51680
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Dec 10, 2022
9374e81
merge
Sriep Dec 10, 2022
80734e1
increase timeout
Sriep Dec 10, 2022
7bb0e16
increase timeout
Sriep Dec 10, 2022
4d241f7
test
Sriep Dec 11, 2022
3cd1d93
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Dec 11, 2022
1dac13a
use existing stake pools
Sriep Dec 13, 2022
c3eecca
use constant delta
Sriep Dec 13, 2022
e8df460
error message
Sriep Dec 13, 2022
202d762
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Dec 14, 2022
4a4f32f
repoint to master actions
Sriep Dec 14, 2022
d872426
cleanup reward enums
Sriep Dec 14, 2022
9e13158
Merge branch 'master' into block_rewards
Kishan-Dhakan Dec 19, 2022
0475a47
update error messages
Sriep Dec 21, 2022
3898d5d
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Dec 21, 2022
c576bdb
update error messages
Sriep Dec 21, 2022
8276026
update error messages
Sriep Dec 21, 2022
6de9c86
update messages
Sriep Dec 21, 2022
af16288
use wait
Sriep Dec 21, 2022
aa07785
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Dec 30, 2022
640d94f
round last updated
Sriep Dec 30, 2022
714c8f6
temp
Sriep Jan 11, 2023
646444a
temp
Sriep Jan 11, 2023
aaffc72
start round
Sriep Jan 11, 2023
033085d
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Jan 12, 2023
0813cc9
remove debug lines
Sriep Jan 12, 2023
2cc7fae
add logging
Sriep Jan 12, 2023
e7798d5
timout
Sriep Jan 13, 2023
c4caa77
test
Sriep Jan 14, 2023
929c776
removed debug lines
Sriep Jan 20, 2023
babf761
removed debug lines
Sriep Jan 20, 2023
253d8a7
lint fix
Sriep Jan 20, 2023
c1f630a
merge sharder block reward test
Sriep Jan 20, 2023
766b648
lint fixes
Sriep Jan 20, 2023
22a55b6
merge
Sriep Jan 23, 2023
6f8afa8
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Jan 23, 2023
35ae71c
touch
Sriep Jan 23, 2023
a538542
temp test
Sriep Jan 23, 2023
cf2de06
lint
Sriep Jan 23, 2023
304dc6b
lint
Sriep Jan 23, 2023
941cf49
text
Sriep Jan 24, 2023
f1cb2b5
text
Sriep Jan 24, 2023
82e7804
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Jan 24, 2023
a0fbd49
temp test
Sriep Jan 24, 2023
a2828e4
increase wait
Sriep Jan 24, 2023
3dd8085
test
Sriep Jan 24, 2023
e192c9a
remove debug error messages
Sriep Jan 25, 2023
a9f1e75
debug
Sriep Jan 25, 2023
a124376
debug
Sriep Jan 26, 2023
2253f7f
retries
Sriep Jan 26, 2023
499e369
retries
Sriep Jan 26, 2023
4b25537
use asserts
Sriep Jan 26, 2023
de90a9d
remove debug linesB
Sriep Jan 26, 2023
25a67a7
lint fix
Sriep Jan 26, 2023
ac01822
error messages
Sriep Jan 26, 2023
c4c01e3
assert messages
Sriep Jan 26, 2023
96d0553
assert messages
Sriep Jan 27, 2023
07c7890
Merge branch 'master' into block_rewards
Kishan-Dhakan Jan 27, 2023
f5857ee
assert > require
Sriep Jan 27, 2023
700439c
Merge remote-tracking branch 'origin/master' into block_rewards
Sriep Jan 30, 2023
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
85 changes: 70 additions & 15 deletions internal/cli/model/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,11 +293,12 @@ type NodeList struct {
}

type DelegatePool struct {
Balance int64 `json:"balance"`
Reward int64 `json:"reward"`
Status int `json:"status"`
RoundCreated int64 `json:"round_created"` // used for cool down
DelegateID string `json:"delegate_id"`
Balance int64 `json:"balance"`
Reward int64 `json:"reward"`
Status int `json:"status"`
RoundCreated int64 `json:"round_created"` // used for cool down
DelegateID string `json:"delegate_id"`
RoundPoolLastUpdated int64 `json:"round_pool_last_updated"`
}

type StakePool struct {
Expand All @@ -310,20 +311,20 @@ type StakePool struct {
type Node struct {
SimpleNode `json:"simple_miner"`
StakePool `json:"stake_pool"`
Round int64 `json:"round"`
TotalReward int64 `json:"total_reward"`
}

type SimpleNode struct {
ID string `json:"id"`
N2NHost string `json:"n2n_host"`
Host string `json:"host"`
Port int `json:"port"`
PublicKey string `json:"public_key"`
ShortName string `json:"short_name"`
BuildTag string `json:"build_tag"`
TotalStake int64 `json:"total_stake"`
Stat interface{} `json:"stat"`
ID string `json:"id"`
N2NHost string `json:"n2n_host"`
Host string `json:"host"`
Port int `json:"port"`
PublicKey string `json:"public_key"`
ShortName string `json:"short_name"`
BuildTag string `json:"build_tag"`
TotalStake int64 `json:"total_stake"`
Stat interface{} `json:"stat"`
RoundServiceChargeLastUpdated int64 `json:"round_service_charge_last_updated"`
}

type Sharder struct {
Expand Down Expand Up @@ -622,6 +623,60 @@ type EventDBTransaction struct {
Status int `json:"status"`
}

type Reward int

const (
MinLockDemandReward Reward = iota
BlockRewardMiner
BlockRewardSharder
BlockRewardBlobber
FeeRewardMiner
FeeRewardSharder
ValidationReward
FileDownloadReward
ChallengePassReward
ChallengeSlashPenalty
CancellationChargeReward
NumOfRewards
)

var rewardString = []string{
"min lock demand",
"block_reward_miner",
"block_reward_sharder",
"block_reward_blobber",
"fees miner",
"fees sharder",
"validation reward",
"file download reward",
"challenge pass reward",
"challenge slash",
"cancellation charge",
"invalid",
}

func (r Reward) String() string {
return rewardString[r]
}

func (r Reward) Int() int {
return int(r)
}

type RewardProvider struct {
Amount int64 `json:"amount"`
BlockNumber int64 `json:"block_number" gorm:"index:idx_block,priority:1"`
ProviderId string `json:"provider_id" gorm:"index:idx_provider,priority:2"`
RewardType Reward `json:"reward_type" gorm:"index:idx_reward_type,priority:3"`
}

type RewardDelegate struct {
Amount int64 `json:"amount"`
BlockNumber int64 `json:"block_number" gorm:"index:idx_block,priority:1"`
PoolID string `json:"pool_id" gorm:"index:idx_pool,priority:2"`
RewardType Reward `json:"reward_type" gorm:"index:idx_reward_type,priority:3"`
}

type EventDBBlock struct {
Hash string `json:"hash"`
Version string `json:"version"`
Expand Down
109 changes: 105 additions & 4 deletions internal/cli/util/api_get_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,60 @@ package cliutils

import (
"encoding/json"
"fmt"
"io"
"net/http"
"strconv"

"github.com/0chain/system_test/internal/api/util/test"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func ApiGetRetries[T any](t *test.SystemTest, url string, params map[string]string, retries int) *T {
var err error
var res *T
for try := 1; try <= retries; try++ {
res, err = ApiGetError[T](url, params)
if err != nil {
t.Logf("retry %d, %v", try, err)
} else {
break
}
}
assert.NoError(t, err, "%s failed after %d retries", url, retries)

return res
}

func ApiGetError[T any](url string, params map[string]string) (*T, error) {
url = addParms(url, params)

res, err := http.Get(url) //nolint:gosec
if err != nil {
return nil, fmt.Errorf("with request %s, %v", url, err)
}

defer res.Body.Close()
if res.StatusCode < 200 && res.StatusCode >= 300 {
return nil, fmt.Errorf("failed API request %s, status code: %d: %v", url, res.StatusCode, err)
}
if res.Body == nil {
return nil, fmt.Errorf("request %s, API response must not be nil", url)
}
resBody, err := io.ReadAll(res.Body)
if err != nil {
return nil, fmt.Errorf("response %s, reading response body: %v", url, err)
}

var result = new(T)
err = json.Unmarshal(resBody, &result)
if err != nil {
return nil, fmt.Errorf("deserializing JSON string `%s`: %v", string(resBody), err)
}
return result, nil
}

func ApiGet[T any](t *test.SystemTest, url string, params map[string]string) *T {
url = addParms(url, params)

Expand Down Expand Up @@ -38,8 +84,35 @@ func ApiGetList[T any](t *test.SystemTest, url string, params map[string]string,
raw := getNext(t, url, from, to, MaxQueryLimit, offset, params)

err := json.Unmarshal(raw, &temp)
require.NoError(t, err, "deserializing JSON string `%s`: %v", string(raw), err)
assert.NoError(t, err, "deserializing JSON string `%s`: %v", string(raw), err)
out = append(out, temp...)
if len(temp) < MaxQueryLimit {
return out
}

offset += int64(len(temp))
}
}

func ApiGetListRetries[T any](t *test.SystemTest, url string, params map[string]string, from, to int64, retries int) []T {
var out []T
var offset int64
for {
var temp []T
var raw []byte
var err error
for try := 1; try <= retries; try++ {
raw, err = getNextError(t, url, from, to, MaxQueryLimit, offset, params)
if err != nil {
t.Logf("retry %d, %v", try, err)
} else {
break
}
}
assert.NoError(t, err, "%s failed after %d retries", url, retries)

err = json.Unmarshal(raw, &temp)
assert.NoError(t, err, "deserializing JSON string `%s`: %v", string(raw), err)
out = append(out, temp...)
if len(temp) < MaxQueryLimit {
return out
Expand All @@ -49,8 +122,7 @@ func ApiGetList[T any](t *test.SystemTest, url string, params map[string]string,
}
}

//nolint
func getNext(t *test.SystemTest, url string, from, to, limit, offset int64, params map[string]string) []byte {
func getNextError(t *test.SystemTest, url string, from, to, limit, offset int64, params map[string]string) ([]byte, error) {
params["start"] = strconv.FormatInt(from, 10)
params["end"] = strconv.FormatInt(to, 10)
if limit > 0 {
Expand All @@ -60,8 +132,37 @@ func getNext(t *test.SystemTest, url string, from, to, limit, offset int64, para
params["offset"] = strconv.FormatInt(offset, 10)
}
url = addParms(url, params)
res, err := http.Get(url) //nolint:gosec
if err != nil {
return nil, fmt.Errorf("response %s; retrieving blocks %d to %d", url, from, to)
}
defer res.Body.Close()
if res.StatusCode < 200 && res.StatusCode >= 300 {
return nil, fmt.Errorf("failed API request %s, status code: %d: %v", url, res.StatusCode, err)
}
if res.Body == nil {
return nil, fmt.Errorf("request %s, API response must not be nil", url)
}

res, err := http.Get(url)
resBody, err := io.ReadAll(res.Body)
if err != nil {
return nil, fmt.Errorf("response %s, reading response body: %v", url, err)
}

return resBody, nil
}

func getNext(t *test.SystemTest, url string, from, to, limit, offset int64, params map[string]string) []byte {
params["start"] = strconv.FormatInt(from, 10)
params["end"] = strconv.FormatInt(to, 10)
if limit > 0 {
params["limit"] = strconv.FormatInt(limit, 10)
}
if offset > 0 {
params["offset"] = strconv.FormatInt(offset, 10)
}
url = addParms(url, params)
res, err := http.Get(url) //nolint:gosec

require.NoError(t, err, "retrieving blocks %d to %d", from, to)
defer res.Body.Close()
Expand Down
Loading