Skip to content

Commit d4aa054

Browse files
authored
Releases/v2.0.0
Releases/v2.0.0
2 parents 40f5b82 + 9949ef0 commit d4aa054

33 files changed

+9146
-9678
lines changed

.github/workflows/ci.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- name: Setup Node.js
2525
uses: actions/setup-node@v3
2626
with:
27-
node-version: "18"
27+
node-version: "20"
2828
- name: Setup Go
2929
uses: actions/setup-go@v2
3030
with:
@@ -85,7 +85,7 @@ jobs:
8585
- name: Setup Node.js
8686
uses: actions/setup-node@v3
8787
with:
88-
node-version: "18"
88+
node-version: "20"
8989

9090
- name: Setup Go
9191
uses: actions/setup-go@v2
@@ -136,7 +136,7 @@ jobs:
136136
- name: Setup Node.js
137137
uses: actions/setup-node@v3
138138
with:
139-
node-version: "18"
139+
node-version: "20"
140140

141141
- name: Setup Go
142142
uses: actions/setup-go@v2
@@ -194,7 +194,7 @@ jobs:
194194
- name: Setup Node.js
195195
uses: actions/setup-node@v3
196196
with:
197-
node-version: "18"
197+
node-version: "20"
198198

199199
- name: Download Artifacts AMD
200200
uses: actions/download-artifact@v3

.github/workflows/develop.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- name: Setup Node.js
1919
uses: actions/setup-node@v3
2020
with:
21-
node-version: "18"
21+
node-version: "20"
2222
- name: Setup Go
2323
uses: actions/setup-go@v2
2424
with:

.github/workflows/release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
- name: Setup Node.js
1616
uses: actions/setup-node@v3
1717
with:
18-
node-version: "18"
18+
node-version: "20"
1919
- name: Setup Go
2020
uses: actions/setup-go@v2
2121
with:

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ docker network create razor_network
4545
2. Start razor-go container
4646

4747
```
48-
docker run -d -it --entrypoint /bin/sh --network=razor_network --name razor-go -v "$(echo $HOME)"/.razor:/root/.razor razornetwork/razor-go:v1.0.0-mainnet
48+
docker run -d -it --entrypoint /bin/sh --network=razor_network --name razor-go -v "$(echo $HOME)"/.razor:/root/.razor razornetwork/razor-go:v2.0.0
4949
```
5050

5151
> **_NOTE:_** We leverage Docker bind-mounts to mount the .razor directory, ensuring a shared mount between the host and the container. The `.razor` directory holds keys to the addresses that we use in `razor-go`, along with logs and config. We do this to persist data in the host machine, otherwise you would lose your keys once you delete the container.
@@ -124,15 +124,15 @@ docker exec -it razor-go razor setConfig --provider <rpc_provider> --alternatePr
124124
Example:
125125

126126
```
127-
$ ./razor setConfig --provider https://mainnet.skalenodes.com/v1/turbulent-unique-scheat --alternateProvider https://ce2m-skale.chainode.tech:10200/ --gasmultiplier 1 --buffer 20 --wait 30 --gasprice 0 --logLevel debug --gasLimit 2 --rpcTimeout 10 --httpTimeout 10 --logFileMaxSize 200 --logFileMaxBackups 10 --logFileMaxAge 60
127+
$ ./razor setConfig --provider https://mainnet.skalenodes.com/v1/elated-tan-skat --gasmultiplier 1 --buffer 5 --wait 1 --gasprice 0 --logLevel debug --gasLimit 2 --rpcTimeout 5 --httpTimeout 5 --logFileMaxSize 200 --logFileMaxBackups 10 --logFileMaxAge 60
128128
```
129129

130130
Besides, setting these parameters in the config, you can use different values for these parameters in various commands. Just add the same flag to any command you want to use and the new config changes will appear for that command.
131131

132132
Example:
133133

134134
```
135-
$ ./razor vote --address 0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c --gasprice 10
135+
$ ./razor vote --address 0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c --gasprice 1
136136
```
137137

138138
This will cause this particular vote command to run with a gas price of 10.

addresses/mainnet.json

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
2-
"Governance": "0xAc40E8dA38B5a381008059a38bb9bf45f0D3C4e2",
3-
"BlockManager": "0x11aB70d78f1Dd2c3F967180d8A64858Db03A0aBa",
4-
"CollectionManager": "0x367962d1462C568A0dDd0e2448311469451bF5a3",
5-
"StakeManager": "0xe0bC695203d9C9f379bcdE9260B9F71B64B85298",
6-
"RewardManager": "0x301779E4c95f951D2E17B4c3EdDC717551df2EBb",
7-
"VoteManager": "0x641BAD0641eB5B94B19568C0a22a55AEbDAF1870",
8-
"Delegator": "0xC74745eA5a3fac1864FAcd8f48d72C21A4ab883D",
9-
"RAZOR": "0xcbf70914Fae03B3acB91E953De60CfDAaCA8145f",
10-
"StakedTokenFactory": "0xEffA78888Dc1b6033286E5dF9b170bc5223178AB",
11-
"RandomNoManager": "0xC6eF45F5Add040800D30FE6dEe01b4EBC4BfC467"
2+
"Governance": "0xBFF76e9E6B394e6945ef92C686444Ee4Ed5f1216",
3+
"BlockManager": "0xEa74913E6Ed2dce4c89c89F5A328b507AfD86c0e",
4+
"CollectionManager": "0x389B9dCe6819735059d23bDdadCB91a6d89eFE77",
5+
"StakeManager": "0xd492408e4901CF658c7874285984F6D5Db648D1E",
6+
"RewardManager": "0xc9F3fc25B57B7F954A5e051b0f81CDF7A83dB610",
7+
"VoteManager": "0xa1f4Ff01bc744Db0aF31360f85D35366c7CfBA9F",
8+
"Delegator": "0x66468f0FD37c3A0f5EaFA4cbDD0552ef9FbE7DAB",
9+
"RAZOR": "0xCA46B70cA3c510Ce9D0c43D25817032e2F5354c0",
10+
"StakedTokenFactory": "0x75f3E9b560BcF36Ae5fB9E9a218f8e0AAfa88446",
11+
"RandomNoManager": "0xF7c2F6362Cd8e3a7ec1CCa368d84799F7C49A609"
1212
}

addresses/testnet.json

+10-11
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
{
2-
"Governance": "0x0b9CC11E7f7D3D4f9bBc0cCaB85b73B96C322c78",
3-
"BlockManager": "0x076df1c2d81C40D30DF115Ab68A13251fBD3FFA4",
4-
"CollectionManager": "0x83f4D7ad6dD366c3F04Af45a1437c77636b03388",
5-
"StakeManager": "0xf99a873a6afdF1b24388ac02ea0f1CFE3c70A80b",
6-
"RewardManager": "0x522d2A51639332388dA4788DF59fB4E598278fAd",
7-
"VoteManager": "0x2399D4d92b4D8762971605d0bC9597F780852CC4",
8-
"Delegator": "0x81c72fB60d19Bfc3A0adDfE394501150d290cd66",
9-
"RAZOR": "0x504C6635af1e7E6fdc586c8A89973783b9281A77",
10-
"StakedTokenFactory": "0xf271bd91104946Cb8e43BC0e83423ed073ab136e",
11-
"RandomNoManager": "0x2dc9E4663675c933f78D97cDD44463ee9C43144c",
12-
"DelegatorV2": "0x4e9E5AE58Fb6d7Ca5b79A196b8d0FCF7CA15C100"
2+
"Governance": "0x40c9339735D8A323240C775BAa2aA3DFf4a9068a",
3+
"BlockManager": "0x2c44089cf0b69bB99937E18d3F68E410CDbd72D5",
4+
"CollectionManager": "0x6565F307ADfb1c7105ECa401f600C4c352F4B65f",
5+
"StakeManager": "0x3CD0B9650642D9D47614754f1f25b2D78821a998",
6+
"RewardManager": "0x87da99bEB8F781f7FCC606812BA6E8c5eB46CcD5",
7+
"VoteManager": "0x4B7d5280490BB97D78a9a733678d669c782EaFCA",
8+
"Delegator": "0x36294b24E27AA5a1B82c9f4127CEB082fdB13a99",
9+
"RAZOR": "0x56ea26865DF007dD16b642ecAA3E0B21DeE7Ec64",
10+
"StakedTokenFactory": "0xEd8d85d4fDB870f07A7D92e6400AD46C2e983Bd7",
11+
"RandomNoManager": "0x728038fb03d28866e5028da4fD3b5004fB4C36CE"
1312
}

cache/cache.go

+26-39
Original file line numberDiff line numberDiff line change
@@ -11,53 +11,17 @@ type cachedData struct {
1111
}
1212

1313
type LocalCache struct {
14-
stop chan struct{}
15-
16-
wg sync.WaitGroup
1714
mu sync.RWMutex
1815
URLs map[string]cachedData //URLs
1916
}
2017

21-
func NewLocalCache(cleanupInterval time.Duration) *LocalCache {
22-
lc := &LocalCache{
18+
// NewLocalCache creates a new LocalCache instance
19+
func NewLocalCache() *LocalCache {
20+
return &LocalCache{
2321
URLs: make(map[string]cachedData),
24-
stop: make(chan struct{}),
25-
}
26-
27-
lc.wg.Add(1)
28-
go func(cleanupInterval time.Duration) {
29-
defer lc.wg.Done()
30-
lc.cleanupLoop(cleanupInterval)
31-
}(cleanupInterval)
32-
33-
return lc
34-
}
35-
36-
func (lc *LocalCache) cleanupLoop(interval time.Duration) {
37-
t := time.NewTicker(interval)
38-
defer t.Stop()
39-
40-
for {
41-
select {
42-
case <-lc.stop:
43-
return
44-
case <-t.C:
45-
lc.mu.Lock()
46-
for url, cu := range lc.URLs {
47-
if cu.expireAtTimestamp <= time.Now().Unix() {
48-
delete(lc.URLs, url)
49-
}
50-
}
51-
lc.mu.Unlock()
52-
}
5322
}
5423
}
5524

56-
func (lc *LocalCache) StopCleanup() {
57-
close(lc.stop)
58-
lc.wg.Wait()
59-
}
60-
6125
func (lc *LocalCache) Update(data []byte, url string, expireAtTimestamp int64) {
6226
lc.mu.Lock()
6327
defer lc.mu.Unlock()
@@ -80,3 +44,26 @@ func (lc *LocalCache) Read(url string) ([]byte, bool) {
8044

8145
return cacheData.Result, true
8246
}
47+
48+
// ClearAll deletes all entries in the cache
49+
func (lc *LocalCache) ClearAll() {
50+
lc.mu.Lock()
51+
defer lc.mu.Unlock()
52+
53+
for key := range lc.URLs {
54+
delete(lc.URLs, key)
55+
}
56+
}
57+
58+
// Cleanup removes expired cache entries
59+
func (lc *LocalCache) Cleanup() {
60+
lc.mu.Lock()
61+
defer lc.mu.Unlock()
62+
63+
for url, data := range lc.URLs {
64+
// Remove expired data after the expireAtTimestamp is passed
65+
if data.expireAtTimestamp <= time.Now().Unix() {
66+
delete(lc.URLs, url)
67+
}
68+
}
69+
}

cmd/cmd-utils.go

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ func (*UtilsStruct) GetEpochAndState(client *ethclient.Client) (uint32, int64, e
2323
if err != nil {
2424
return 0, 0, err
2525
}
26+
err = ValidateBufferPercentLimit(client, bufferPercent)
27+
if err != nil {
28+
return 0, 0, err
29+
}
2630
latestHeader, err := clientUtils.GetLatestBlockWithRetry(client)
2731
if err != nil {
2832
log.Error("Error in fetching block: ", err)

cmd/cmd-utils_test.go

+31
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ func TestGetEpochAndState(t *testing.T) {
2020
latestHeaderErr error
2121
bufferPercent int32
2222
bufferPercentErr error
23+
stateBuffer uint64
24+
stateBufferErr error
2325
state int64
2426
stateErr error
2527
stateName string
@@ -37,6 +39,7 @@ func TestGetEpochAndState(t *testing.T) {
3739
epoch: 4,
3840
latestHeader: &Types.Header{},
3941
bufferPercent: 20,
42+
stateBuffer: 5,
4043
state: 0,
4144
stateName: "commit",
4245
},
@@ -50,6 +53,7 @@ func TestGetEpochAndState(t *testing.T) {
5053
epochErr: errors.New("epoch error"),
5154
latestHeader: &Types.Header{},
5255
bufferPercent: 20,
56+
stateBuffer: 5,
5357
state: 0,
5458
stateName: "commit",
5559
},
@@ -76,6 +80,7 @@ func TestGetEpochAndState(t *testing.T) {
7680
epoch: 4,
7781
latestHeader: &Types.Header{},
7882
bufferPercent: 20,
83+
stateBuffer: 5,
7984
stateErr: errors.New("state error"),
8085
},
8186
wantEpoch: 0,
@@ -88,20 +93,46 @@ func TestGetEpochAndState(t *testing.T) {
8893
epoch: 4,
8994
latestHeaderErr: errors.New("header error"),
9095
bufferPercent: 20,
96+
stateBuffer: 5,
9197
state: 0,
9298
stateName: "commit",
9399
},
94100
wantEpoch: 0,
95101
wantState: 0,
96102
wantErr: errors.New("header error"),
97103
},
104+
{
105+
name: "Test 6: When validating buffer percent limit fails",
106+
args: args{
107+
epoch: 4,
108+
latestHeader: &Types.Header{},
109+
bufferPercent: 50,
110+
stateBuffer: 10,
111+
},
112+
wantEpoch: 0,
113+
wantState: 0,
114+
wantErr: errors.New("buffer percent exceeds limit"),
115+
},
116+
{
117+
name: "Test 7: When there is an error in validating buffer percent limit",
118+
args: args{
119+
epoch: 4,
120+
latestHeader: &Types.Header{},
121+
bufferPercent: 50,
122+
stateBufferErr: errors.New("state buffer error"),
123+
},
124+
wantEpoch: 0,
125+
wantState: 0,
126+
wantErr: errors.New("state buffer error"),
127+
},
98128
}
99129
for _, tt := range tests {
100130
t.Run(tt.name, func(t *testing.T) {
101131
SetUpMockInterfaces()
102132

103133
utilsMock.On("GetEpoch", mock.AnythingOfType("*ethclient.Client")).Return(tt.args.epoch, tt.args.epochErr)
104134
cmdUtilsMock.On("GetBufferPercent").Return(tt.args.bufferPercent, tt.args.bufferPercentErr)
135+
utilsMock.On("GetStateBuffer", mock.Anything).Return(tt.args.stateBuffer, tt.args.stateBufferErr)
105136
clientUtilsMock.On("GetLatestBlockWithRetry", mock.Anything).Return(tt.args.latestHeader, tt.args.latestHeaderErr)
106137
utilsMock.On("GetBufferedState", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.state, tt.args.stateErr)
107138

cmd/commit.go

+3-9
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,13 @@ package cmd
44
import (
55
"encoding/hex"
66
"errors"
7+
Types "github.com/ethereum/go-ethereum/core/types"
78
"math/big"
8-
"razor/cache"
99
"razor/core"
1010
"razor/core/types"
1111
"razor/pkg/bindings"
1212
"razor/utils"
1313
"sync"
14-
"time"
15-
16-
Types "github.com/ethereum/go-ethereum/core/types"
1714

1815
"github.com/ethereum/go-ethereum/common"
1916
"github.com/ethereum/go-ethereum/ethclient"
@@ -79,8 +76,8 @@ func (*UtilsStruct) HandleCommitState(client *ethclient.Client, epoch uint32, se
7976

8077
var wg sync.WaitGroup
8178

82-
log.Debug("Creating a local cache which will store API result and expire at the end of commit state")
83-
commitParams.LocalCache = cache.NewLocalCache(time.Second * time.Duration(core.StateLength))
79+
// Clean up any expired API results cache data before performing the commit
80+
commitParams.LocalCache.Cleanup()
8481

8582
log.Debug("Iterating over all the collections...")
8683
for i := 0; i < int(numActiveCollections); i++ {
@@ -129,7 +126,6 @@ func (*UtilsStruct) HandleCommitState(client *ethclient.Client, epoch uint32, se
129126
if err != nil {
130127
// Returning the first error from the error channel
131128
log.Error("Error in getting collection data: ", err)
132-
commitParams.LocalCache.StopCleanup()
133129
return types.CommitData{}, err
134130
}
135131
}
@@ -139,8 +135,6 @@ func (*UtilsStruct) HandleCommitState(client *ethclient.Client, epoch uint32, se
139135
log.Debug("HandleCommitState: SeqAllottedCollections: ", seqAllottedCollections)
140136
log.Debug("HandleCommitState: Leaves: ", leavesOfTree)
141137

142-
commitParams.LocalCache.StopCleanup()
143-
144138
return types.CommitData{
145139
AssignedCollections: assignedCollections,
146140
SeqAllottedCollections: seqAllottedCollections,

cmd/commit_test.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"razor/utils"
1717
"reflect"
1818
"testing"
19-
"time"
2019
)
2120

2221
func TestCommit(t *testing.T) {
@@ -226,7 +225,7 @@ func TestHandleCommitState(t *testing.T) {
226225
}
227226
for _, tt := range tests {
228227
t.Run(tt.name, func(t *testing.T) {
229-
localCache := cache.NewLocalCache(time.Second * 10)
228+
localCache := cache.NewLocalCache()
230229
commitParams := &types.CommitParams{
231230
LocalCache: localCache,
232231
}
@@ -396,7 +395,7 @@ func BenchmarkHandleCommitState(b *testing.B) {
396395
for _, v := range table {
397396
b.Run(fmt.Sprintf("Number_Of_Active_Collections%d", v.numActiveCollections), func(b *testing.B) {
398397
for i := 0; i < b.N; i++ {
399-
localCache := cache.NewLocalCache(time.Second * 10)
398+
localCache := cache.NewLocalCache()
400399
commitParams := &types.CommitParams{
401400
LocalCache: localCache,
402401
}

0 commit comments

Comments
 (0)