forked from Layr-Labs/incredible-squaring-avs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaggregator_test.go
103 lines (86 loc) · 4.14 KB
/
aggregator_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package aggregator
import (
"context"
"math/big"
"testing"
"time"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
gethcore "github.com/ethereum/go-ethereum/core"
"github.com/stretchr/testify/assert"
"go.uber.org/mock/gomock"
"github.com/Layr-Labs/eigensdk-go/crypto/bls"
sdklogging "github.com/Layr-Labs/eigensdk-go/logging"
blsaggservmock "github.com/Layr-Labs/eigensdk-go/services/mocks/blsagg"
sdktypes "github.com/Layr-Labs/eigensdk-go/types"
"github.com/Layr-Labs/incredible-squaring-avs/aggregator/mocks"
"github.com/Layr-Labs/incredible-squaring-avs/aggregator/types"
cstaskmanager "github.com/Layr-Labs/incredible-squaring-avs/contracts/bindings/IncredibleSquaringTaskManager"
chainiomocks "github.com/Layr-Labs/incredible-squaring-avs/core/chainio/mocks"
)
var MOCK_OPERATOR_ID = [32]byte{207, 73, 226, 221, 104, 100, 123, 41, 192, 3, 9, 119, 90, 83, 233, 159, 231, 151, 245, 96, 150, 48, 144, 27, 102, 253, 39, 101, 1, 26, 135, 173}
var MOCK_OPERATOR_STAKE = big.NewInt(100)
var MOCK_OPERATOR_BLS_PRIVATE_KEY_STRING = "50"
type MockTask struct {
TaskNum uint32
BlockNumber uint32
NumberToSquare uint32
}
func TestSendNewTask(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
MOCK_OPERATOR_BLS_PRIVATE_KEY, err := bls.NewPrivateKey(MOCK_OPERATOR_BLS_PRIVATE_KEY_STRING)
assert.Nil(t, err)
MOCK_OPERATOR_KEYPAIR := bls.NewKeyPair(MOCK_OPERATOR_BLS_PRIVATE_KEY)
MOCK_OPERATOR_G1PUBKEY := MOCK_OPERATOR_KEYPAIR.GetPubKeyG1()
MOCK_OPERATOR_G2PUBKEY := MOCK_OPERATOR_KEYPAIR.GetPubKeyG2()
operatorPubkeyDict := map[sdktypes.OperatorId]types.OperatorInfo{
MOCK_OPERATOR_ID: {
OperatorPubkeys: sdktypes.OperatorPubkeys{
G1Pubkey: MOCK_OPERATOR_G1PUBKEY,
G2Pubkey: MOCK_OPERATOR_G2PUBKEY,
},
OperatorAddr: common.Address{},
},
}
aggregator, mockAvsWriterer, mockBlsAggService, err := createMockAggregator(mockCtrl, operatorPubkeyDict)
assert.Nil(t, err)
var TASK_INDEX = uint32(0)
var BLOCK_NUMBER = uint32(100)
var NUMBER_TO_SQUARE = uint32(3)
var NUMBER_TO_SQUARE_BIG_INT = big.NewInt(int64(NUMBER_TO_SQUARE))
mockAvsWriterer.EXPECT().SendNewTaskNumberToSquare(
context.Background(), NUMBER_TO_SQUARE_BIG_INT, types.QUORUM_THRESHOLD_NUMERATOR, types.QUORUM_NUMBERS,
).Return(mocks.MockSendNewTaskNumberToSquareCall(BLOCK_NUMBER, TASK_INDEX, NUMBER_TO_SQUARE))
// 100 blocks, each takes 12 seconds. We hardcode for now since aggregator also hardcodes this value
taskTimeToExpiry := 100 * 12 * time.Second
// make sure that initializeNewTask was called on the blsAggService
// maybe there's a better way to do this? There's a saying "don't mock 3rd party code"
// see https://hynek.me/articles/what-to-mock-in-5-mins/
mockBlsAggService.EXPECT().InitializeNewTask(TASK_INDEX, BLOCK_NUMBER, types.QUORUM_NUMBERS, sdktypes.QuorumThresholdPercentages{types.QUORUM_THRESHOLD_NUMERATOR}, taskTimeToExpiry)
err = aggregator.sendNewTask(NUMBER_TO_SQUARE_BIG_INT)
assert.Nil(t, err)
}
func createMockAggregator(
mockCtrl *gomock.Controller, operatorPubkeyDict map[sdktypes.OperatorId]types.OperatorInfo,
) (*Aggregator, *chainiomocks.MockAvsWriterer, *blsaggservmock.MockBlsAggregationService, error) {
logger := sdklogging.NewNoopLogger()
mockAvsWriter := chainiomocks.NewMockAvsWriterer(mockCtrl)
mockBlsAggregationService := blsaggservmock.NewMockBlsAggregationService(mockCtrl)
aggregator := &Aggregator{
logger: logger,
avsWriter: mockAvsWriter,
blsAggregationService: mockBlsAggregationService,
tasks: make(map[types.TaskIndex]cstaskmanager.IIncredibleSquaringTaskManagerTask),
taskResponses: make(map[types.TaskIndex]map[sdktypes.TaskResponseDigest]cstaskmanager.IIncredibleSquaringTaskManagerTaskResponse),
}
return aggregator, mockAvsWriter, mockBlsAggregationService, nil
}
// just a mock ethclient to pass to bindings
// so that we can access abi methods
func createMockEthClient() *backends.SimulatedBackend {
genesisAlloc := map[common.Address]gethcore.GenesisAccount{}
blockGasLimit := uint64(1000000)
client := backends.NewSimulatedBackend(genesisAlloc, blockGasLimit)
return client
}