Skip to content

Commit 689e4e6

Browse files
committed
feat: adding claim command to bot
1 parent 9df1e1a commit 689e4e6

File tree

8 files changed

+75
-56
lines changed

8 files changed

+75
-56
lines changed

client/client.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import (
55
"errors"
66

77
"github.com/kehiy/RoboPac/log"
8-
"github.com/pactus-project/pactus/crypto"
9-
"github.com/pactus-project/pactus/crypto/bls"
108
pactus "github.com/pactus-project/pactus/www/grpc/gen/go"
119
"google.golang.org/grpc"
1210
"google.golang.org/grpc/credentials/insecure"
@@ -61,22 +59,20 @@ func (c *Client) GetNetworkInfo() (*pactus.GetNetworkInfoResponse, error) {
6159
return networkInfo, nil
6260
}
6361

64-
func (c *Client) GetPeerInfo(address string) (*pactus.PeerInfo, *bls.PublicKey, error) {
62+
func (c *Client) GetPeerInfo(address string) (*pactus.PeerInfo, error) {
6563
networkInfo, _ := c.GetNetworkInfo()
66-
crypto.PublicKeyHRP = "tpublic"
6764
if networkInfo != nil {
6865
for _, p := range networkInfo.ConnectedPeers {
69-
for _, key := range p.ConsensusKeys {
70-
pub, _ := bls.PublicKeyFromString(key)
71-
if pub != nil {
72-
if pub.ValidatorAddress().String() == address {
73-
return p, pub, nil
66+
for _, addr := range p.ConsensusAddress {
67+
if addr != "" {
68+
if addr == address {
69+
return p, nil
7470
}
7571
}
7672
}
7773
}
7874
}
79-
return nil, nil, errors.New("peer does not exist")
75+
return nil, errors.New("peer does not exist")
8076
}
8177

8278
func (c *Client) IsValidator(address string) (bool, error) {

engine/engine.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,16 +140,17 @@ func (be *BotEngine) Claim(tokens []string) (*store.ClaimTransaction, error) {
140140
be.Lock()
141141
defer be.Unlock()
142142

143-
if len(tokens) != 2 {
143+
if len(tokens) != 3 {
144144
return nil, errors.New("missing argument: validator address")
145145
}
146146

147147
valAddr := tokens[0]
148-
discordID := tokens[1]
148+
testNetValAddr := tokens[1]
149+
discordID := tokens[2]
149150

150-
be.logger.Info("new claim request", "valAddr", valAddr, "discordID", discordID)
151+
be.logger.Info("new claim request", "valAddr", valAddr, "testNetValAddr", testNetValAddr, "discordID", discordID)
151152

152-
claimer := be.Store.ClaimerInfo(discordID)
153+
claimer := be.Store.ClaimerInfo(testNetValAddr)
153154
if claimer == nil {
154155
return nil, errors.New("claimer not found")
155156
}
@@ -185,12 +186,13 @@ func (be *BotEngine) Claim(tokens []string) (*store.ClaimTransaction, error) {
185186
return nil, err
186187
}
187188

188-
err = be.Store.AddClaimTransaction(txID, util.ChangeToCoin(txData.Transaction.Value), int64(txData.BlockTime), discordID)
189+
err = be.Store.AddClaimTransaction(util.ChangeToCoin(txData.Transaction.Value),
190+
int64(txData.BlockTime), txID, discordID, testNetValAddr)
189191
if err != nil {
190192
return nil, err
191193
}
192194

193-
claimer = be.Store.ClaimerInfo(discordID)
195+
claimer = be.Store.ClaimerInfo(testNetValAddr)
194196
if claimer == nil {
195197
return nil, errors.New("can't save claim info")
196198
}

engine/engine_test.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -156,16 +156,17 @@ func TestClaim(t *testing.T) {
156156

157157
t.Run("everything normal and good", func(t *testing.T) {
158158
valAddress := "pc1p74scge5dyzjktv9q70xtr0pjmyqcqk7nuh8nzp"
159+
testNetValAddr := "tpc1pqn7uaeduklpg00rqt6uq0m9wy5txnyt0kmxmgf"
159160
discordID := "123456789"
160161
txID := "0x123456789"
161-
amount := 74.68
162+
amount := float64(74)
162163
time := time.Now().Unix()
163164

164165
client.EXPECT().IsValidator(valAddress).Return(
165166
true, nil,
166167
)
167168

168-
store.EXPECT().ClaimerInfo(discordID).Return(
169+
store.EXPECT().ClaimerInfo(testNetValAddr).Return(
169170
&rpstore.Claimer{
170171
DiscordID: discordID,
171172
TotalReward: amount,
@@ -189,11 +190,11 @@ func TestClaim(t *testing.T) {
189190
}, nil,
190191
)
191192

192-
store.EXPECT().AddClaimTransaction(txID, amount, time, discordID).Return(
193+
store.EXPECT().AddClaimTransaction(amount, time, txID, discordID, testNetValAddr).Return(
193194
nil,
194195
)
195196

196-
store.EXPECT().ClaimerInfo(discordID).Return(
197+
store.EXPECT().ClaimerInfo(testNetValAddr).Return(
197198
&rpstore.Claimer{
198199
DiscordID: discordID,
199200
TotalReward: amount,
@@ -205,7 +206,7 @@ func TestClaim(t *testing.T) {
205206
},
206207
).AnyTimes()
207208

208-
claimTx, err := eng.Claim([]string{valAddress, discordID})
209+
claimTx, err := eng.Claim([]string{valAddress, testNetValAddr, discordID})
209210
assert.NoError(t, err)
210211
assert.NotNil(t, claimTx)
211212

@@ -214,7 +215,7 @@ func TestClaim(t *testing.T) {
214215
assert.Equal(t, time, claimTx.Time)
215216

216217
//! can't claim twice.
217-
claimTx, err = eng.Claim([]string{valAddress, discordID})
218+
claimTx, err = eng.Claim([]string{valAddress, testNetValAddr, discordID})
218219
assert.EqualError(t, err, "this claimer have already claimed rewards")
219220
assert.Nil(t, claimTx)
220221
})
@@ -227,23 +228,25 @@ func TestClaim(t *testing.T) {
227228

228229
t.Run("claimer not found", func(t *testing.T) {
229230
valAddress := "pc1p74scge5dyzjktv9q70xtr0pjmyqcqk7nuh8nzp"
231+
testNetValAddr := "tpc1peaeyzmwjqu6nz93c27hr8ad2l265tx4s9v6zhw"
230232
discordID := "987654321"
231233

232-
store.EXPECT().ClaimerInfo(discordID).Return(
234+
store.EXPECT().ClaimerInfo(testNetValAddr).Return(
233235
nil,
234236
)
235237

236-
claimTx, err := eng.Claim([]string{valAddress, discordID})
238+
claimTx, err := eng.Claim([]string{valAddress, testNetValAddr, discordID})
237239
assert.EqualError(t, err, "claimer not found")
238240
assert.Nil(t, claimTx)
239241
})
240242

241243
t.Run("not validator address", func(t *testing.T) {
242244
valAddress := "pc1p74scge5dyzjktv9q70xtr0pjmyqcqk7nuh8nzp"
245+
testNetValAddr := "tpc1p2vx5t8sglhvncmp3en0qhgtxyc59w0gfgnaqe7"
243246
discordID := "1234567890"
244247
amount := 74.68
245248

246-
store.EXPECT().ClaimerInfo(discordID).Return(
249+
store.EXPECT().ClaimerInfo(testNetValAddr).Return(
247250
&rpstore.Claimer{
248251
DiscordID: discordID,
249252
TotalReward: amount,
@@ -254,21 +257,22 @@ func TestClaim(t *testing.T) {
254257
false, nil,
255258
)
256259

257-
claimTx, err := eng.Claim([]string{valAddress, discordID})
260+
claimTx, err := eng.Claim([]string{valAddress, testNetValAddr, discordID})
258261
assert.EqualError(t, err, "invalid argument: validator address")
259262
assert.Nil(t, claimTx)
260263
})
261264

262265
t.Run("empty transaction ID", func(t *testing.T) {
263266
valAddress := "pc1p74scge5dyzjktv9q70xtr0pjmyqcqk7nuh8nzp"
267+
testNetValAddr := "tpc1pvmundkkp83u5cfz04sem5r7688dc0lef5u0mmv"
264268
discordID := "1234567890"
265269
amount := 74.68
266270

267271
client.EXPECT().IsValidator(valAddress).Return(
268272
true, nil,
269273
)
270274

271-
store.EXPECT().ClaimerInfo(discordID).Return(
275+
store.EXPECT().ClaimerInfo(testNetValAddr).Return(
272276
&rpstore.Claimer{
273277
DiscordID: discordID,
274278
TotalReward: amount,
@@ -281,7 +285,7 @@ func TestClaim(t *testing.T) {
281285
"", nil,
282286
)
283287

284-
claimTx, err := eng.Claim([]string{valAddress, discordID})
288+
claimTx, err := eng.Claim([]string{valAddress, testNetValAddr, discordID})
285289
assert.EqualError(t, err, "can't send bond transaction")
286290
assert.Nil(t, claimTx)
287291
})

store/interface.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ type ClaimTransaction struct {
77
}
88

99
type Claimer struct {
10-
DiscordID string `json:"discord_id"`
11-
TotalReward float64 `json:"total_reward"`
10+
DiscordID string `json:"did"`
11+
// ValAddr string `json:"main_net_validator_address"`
12+
TotalReward float64 `json:"r"`
1213
ClaimTransaction *ClaimTransaction `json:"claim_transaction"`
1314
}
1415

@@ -17,6 +18,6 @@ func (c *Claimer) IsClaimed() bool {
1718
}
1819

1920
type IStore interface {
20-
ClaimerInfo(discordID string) *Claimer
21-
AddClaimTransaction(TxID string, Amount float64, Time int64, discordID string) error
21+
ClaimerInfo(testNetValAddr string) *Claimer
22+
AddClaimTransaction(amount float64, time int64, txID, discordID, testNetValAddr string) error
2223
}

store/mock.go

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

store/store.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ func LoadStore(cfg *config.Config, logger *log.SubLogger) (IStore, error) {
4343
return ss, nil
4444
}
4545

46-
func (s *Store) ClaimerInfo(discordID string) *Claimer {
47-
entry, found := s.syncMap.Load(discordID)
46+
func (s *Store) ClaimerInfo(testNetValAddr string) *Claimer {
47+
entry, found := s.syncMap.Load(testNetValAddr)
4848
if !found {
4949
return nil
5050
}
@@ -53,8 +53,8 @@ func (s *Store) ClaimerInfo(discordID string) *Claimer {
5353
return claimerInfo
5454
}
5555

56-
func (s *Store) AddClaimTransaction(txID string, amount float64, time int64, discordID string) error {
57-
s.syncMap.Store(discordID, &Claimer{
56+
func (s *Store) AddClaimTransaction(amount float64, time int64, txID, discordID, testNetValAddr string) error {
57+
s.syncMap.Store(testNetValAddr, &Claimer{
5858
DiscordID: discordID,
5959
ClaimTransaction: &ClaimTransaction{
6060
TxID: txID,

store/store_test.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func TestStore(t *testing.T) {
3535
store, path := setup(t)
3636

3737
t.Run("get claimer", func(t *testing.T) {
38-
claimer := store.ClaimerInfo("123456789")
38+
claimer := store.ClaimerInfo("tpc1pqn7uaeduklpg00rqt6uq0m9wy5txnyt0kmxmgf")
3939
assert.Equal(t, float64(100), claimer.TotalReward)
4040
assert.Equal(t, "123456789", claimer.DiscordID)
4141
})
@@ -44,16 +44,17 @@ func TestStore(t *testing.T) {
4444
txID := "0x123456789"
4545
time := time.Now()
4646
discordID := "123456789"
47+
testNetValAddr := "tpc1pqn7uaeduklpg00rqt6uq0m9wy5txnyt0kmxmgf"
4748

48-
claimer := store.ClaimerInfo(discordID)
49+
claimer := store.ClaimerInfo(testNetValAddr)
4950

5051
isClaimed := claimer.IsClaimed()
5152
assert.False(t, isClaimed)
5253

53-
err := store.AddClaimTransaction(txID, claimer.TotalReward, time.Unix(), discordID)
54+
err := store.AddClaimTransaction(claimer.TotalReward, time.Unix(), txID, discordID, testNetValAddr)
5455
assert.NoError(t, err)
5556

56-
claimedInfo := store.ClaimerInfo(discordID)
57+
claimedInfo := store.ClaimerInfo(testNetValAddr)
5758
assert.Equal(t, discordID, claimedInfo.DiscordID)
5859
assert.Equal(t, float64(100), claimedInfo.ClaimTransaction.Amount)
5960
assert.Equal(t, txID, claimedInfo.ClaimTransaction.TxID)
@@ -65,6 +66,13 @@ func TestStore(t *testing.T) {
6566
assert.True(t, isClaimed)
6667
})
6768

69+
t.Run("is claimed test", func(t *testing.T) {
70+
claimer := store.ClaimerInfo("tpc1pesz6kuv7jts6al6la3794fyj5xaj7wm93k7z6y")
71+
assert.Equal(t, float64(12), claimer.TotalReward)
72+
assert.Equal(t, "964550933793103912", claimer.DiscordID)
73+
assert.True(t, claimer.IsClaimed())
74+
})
75+
6876
err := os.Remove(path)
6977
assert.NoError(t, err)
7078

store/test/store_example.json

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
{
2-
"123456789": {
3-
"discord_id": "123456789",
4-
"total_reward": 100
2+
"tpc1pqn7uaeduklpg00rqt6uq0m9wy5txnyt0kmxmgf": {
3+
"did": "123456789",
4+
"r": 100
55
},
6-
"987654321": {
7-
"discord_id": "987654321",
8-
"total_reward": 62,
9-
"claim_transaction": null
6+
"tpc1ppuh60th5cu9qccj6vjurx2zvd7vngcrztzycfg": {
7+
"did": "1111030757700419636",
8+
"r": 10
9+
},
10+
"tpc1pesz6kuv7jts6al6la3794fyj5xaj7wm93k7z6y": {
11+
"did": "964550933793103912",
12+
"r": 12,
13+
"claim_transaction": {
14+
"transaction_id": "",
15+
"amount": 0,
16+
"time": 0
17+
}
1018
}
11-
}
19+
}

0 commit comments

Comments
 (0)