arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/eth/auction_test.go
eth/auction_test.goRaw
  1package eth
  2
  3import (
  4	"math/big"
  5	"testing"
  6
  7	"github.com/stretchr/testify/assert"
  8	"github.com/stretchr/testify/require"
  9)
 10
 11const slotDeadlineConst = uint8(20)
 12const openAuctionSlotsConst = uint16(4320)
 13const closedAuctionSlotsConst = uint16(2)
 14const outbiddingConst = uint16(1000)
 15const currentSlotConst = 0
 16
 17var allocationRatioConst [3]uint16 = [3]uint16{4000, 4000, 2000}
 18
 19var auctionClientTest *AuctionClient
 20
 21//var genesisBlock = 93
 22var genesisBlock = 100
 23
 24var minBidStr = "10000000000000000000"
 25var URL = "http://localhost:3000"
 26
 27// var newURL = "http://localhost:3002"
 28var BLOCKSPERSLOT = uint8(40)
 29
 30func TestAuctionGetCurrentSlotNumber(t *testing.T) {
 31	currentSlot, err := auctionClientTest.AuctionGetCurrentSlotNumber()
 32	require.Nil(t, err)
 33	currentSlotInt := int(currentSlot)
 34	assert.Equal(t, currentSlotConst, currentSlotInt)
 35}
 36
 37func TestAuctionConstants(t *testing.T) {
 38	INITMINBID := new(big.Int)
 39	INITMINBID.SetString(minBidStr, 10)
 40
 41	auctionConstants, err := auctionClientTest.AuctionConstants()
 42	require.Nil(t, err)
 43	assert.Equal(t, auctionConstants.BlocksPerSlot, BLOCKSPERSLOT)
 44	assert.Equal(t, auctionConstants.GenesisBlockNum, int64(genesisBlock))
 45	assert.Equal(t, auctionConstants.HermezRollup, hermezRollupAddressTestConst)
 46	assert.Equal(t, auctionConstants.InitialMinimalBidding, INITMINBID)
 47	assert.Equal(t, auctionConstants.TokenHEZ, tokenHEZAddressConst)
 48}
 49
 50func TestAuctionVariables(t *testing.T) {
 51	INITMINBID := new(big.Int)
 52	INITMINBID.SetString(minBidStr, 10)
 53	defaultSlotSetBid := [6]*big.Int{INITMINBID, INITMINBID, INITMINBID, INITMINBID, INITMINBID, INITMINBID}
 54
 55	auctionVariables, err := auctionClientTest.AuctionVariables()
 56	require.Nil(t, err)
 57	assert.Equal(t, auctionVariables.AllocationRatio, allocationRatioConst)
 58	assert.Equal(t, auctionVariables.BootCoordinator, bootCoordinatorAddressConst)
 59	assert.Equal(t, auctionVariables.ClosedAuctionSlots, closedAuctionSlotsConst)
 60	assert.Equal(t, auctionVariables.DefaultSlotSetBid, defaultSlotSetBid)
 61	assert.Equal(t, auctionVariables.DonationAddress, donationAddressConst)
 62	assert.Equal(t, auctionVariables.OpenAuctionSlots, openAuctionSlotsConst)
 63	assert.Equal(t, auctionVariables.Outbidding, outbiddingConst)
 64	assert.Equal(t, auctionVariables.SlotDeadline, slotDeadlineConst)
 65}
 66
 67func TestAuctionGetSlotDeadline(t *testing.T) {
 68	slotDeadline, err := auctionClientTest.AuctionGetSlotDeadline()
 69	require.Nil(t, err)
 70	assert.Equal(t, slotDeadlineConst, slotDeadline)
 71}
 72
 73func TestAuctionSetSlotDeadline(t *testing.T) {
 74	newSlotDeadline := uint8(25)
 75
 76	_, err := auctionClientTest.AuctionSetSlotDeadline(newSlotDeadline)
 77	require.Nil(t, err)
 78	slotDeadline, err := auctionClientTest.AuctionGetSlotDeadline()
 79	require.Nil(t, err)
 80	assert.Equal(t, newSlotDeadline, slotDeadline)
 81	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
 82	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
 83	assert.Equal(t, newSlotDeadline, auctionEvents.NewSlotDeadline[0].NewSlotDeadline)
 84}
 85
 86func TestAuctionGetOpenAuctionSlots(t *testing.T) {
 87	openAuctionSlots, err := auctionClientTest.AuctionGetOpenAuctionSlots()
 88	require.Nil(t, err)
 89	assert.Equal(t, openAuctionSlotsConst, openAuctionSlots)
 90}
 91
 92func TestAuctionSetOpenAuctionSlots(t *testing.T) {
 93	newOpenAuctionSlots := uint16(4500)
 94
 95	_, err := auctionClientTest.AuctionSetOpenAuctionSlots(newOpenAuctionSlots)
 96	require.Nil(t, err)
 97	openAuctionSlots, err := auctionClientTest.AuctionGetOpenAuctionSlots()
 98	require.Nil(t, err)
 99	assert.Equal(t, newOpenAuctionSlots, openAuctionSlots)
100	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
101	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
102	assert.Equal(t, newOpenAuctionSlots, auctionEvents.NewOpenAuctionSlots[0].NewOpenAuctionSlots)
103}
104
105func TestAuctionGetClosedAuctionSlots(t *testing.T) {
106	closedAuctionSlots, err := auctionClientTest.AuctionGetClosedAuctionSlots()
107	require.Nil(t, err)
108	assert.Equal(t, closedAuctionSlotsConst, closedAuctionSlots)
109}
110
111func TestAuctionSetClosedAuctionSlots(t *testing.T) {
112	newClosedAuctionSlots := uint16(1)
113
114	_, err := auctionClientTest.AuctionSetClosedAuctionSlots(newClosedAuctionSlots)
115	require.Nil(t, err)
116	closedAuctionSlots, err := auctionClientTest.AuctionGetClosedAuctionSlots()
117	require.Nil(t, err)
118	assert.Equal(t, newClosedAuctionSlots, closedAuctionSlots)
119	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
120	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
121	assert.Equal(t, newClosedAuctionSlots, auctionEvents.NewClosedAuctionSlots[0].NewClosedAuctionSlots)
122	_, err = auctionClientTest.AuctionSetClosedAuctionSlots(closedAuctionSlots)
123	require.Nil(t, err)
124}
125
126func TestAuctionGetOutbidding(t *testing.T) {
127	outbidding, err := auctionClientTest.AuctionGetOutbidding()
128	require.Nil(t, err)
129	assert.Equal(t, outbiddingConst, outbidding)
130}
131
132func TestAuctionSetOutbidding(t *testing.T) {
133	newOutbidding := uint16(0xb)
134
135	_, err := auctionClientTest.AuctionSetOutbidding(newOutbidding)
136	require.Nil(t, err)
137	outbidding, err := auctionClientTest.AuctionGetOutbidding()
138	require.Nil(t, err)
139	assert.Equal(t, newOutbidding, outbidding)
140	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
141	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
142	assert.Equal(t, newOutbidding, auctionEvents.NewOutbidding[0].NewOutbidding)
143	_, err = auctionClientTest.AuctionSetOutbidding(outbiddingConst)
144	require.Nil(t, err)
145}
146
147func TestAuctionGetAllocationRatio(t *testing.T) {
148	allocationRatio, err := auctionClientTest.AuctionGetAllocationRatio()
149	require.Nil(t, err)
150	assert.Equal(t, allocationRatioConst, allocationRatio)
151}
152
153func TestAuctionSetAllocationRatio(t *testing.T) {
154	newAllocationRatio := [3]uint16{3000, 3000, 4000}
155
156	_, err := auctionClientTest.AuctionSetAllocationRatio(newAllocationRatio)
157	require.Nil(t, err)
158	allocationRatio, err := auctionClientTest.AuctionGetAllocationRatio()
159	require.Nil(t, err)
160	assert.Equal(t, newAllocationRatio, allocationRatio)
161	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
162	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
163	assert.Equal(t, newAllocationRatio, auctionEvents.NewAllocationRatio[0].NewAllocationRatio)
164	_, err = auctionClientTest.AuctionSetAllocationRatio(allocationRatioConst)
165	require.Nil(t, err)
166}
167
168func TestAuctionGetDonationAddress(t *testing.T) {
169	donationAddress, err := auctionClientTest.AuctionGetDonationAddress()
170	require.Nil(t, err)
171	assert.Equal(t, &donationAddressConst, donationAddress)
172}
173
174func TestAuctionGetBootCoordinator(t *testing.T) {
175	bootCoordinator, err := auctionClientTest.AuctionGetBootCoordinator()
176	require.Nil(t, err)
177	assert.Equal(t, &bootCoordinatorAddressConst, bootCoordinator)
178}
179
180func TestAuctionSetDonationAddress(t *testing.T) {
181	newDonationAddress := governanceAddressConst
182
183	_, err := auctionClientTest.AuctionSetDonationAddress(newDonationAddress)
184	require.Nil(t, err)
185	donationAddress, err := auctionClientTest.AuctionGetDonationAddress()
186	require.Nil(t, err)
187	assert.Equal(t, &newDonationAddress, donationAddress)
188	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
189	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
190	assert.Equal(t, newDonationAddress, auctionEvents.NewDonationAddress[0].NewDonationAddress)
191	_, err = auctionClientTest.AuctionSetDonationAddress(donationAddressConst)
192	require.Nil(t, err)
193}
194
195func TestAuctionSetBootCoordinator(t *testing.T) {
196	newBootCoordinator := governanceAddressConst
197
198	_, err := auctionClientTest.AuctionSetBootCoordinator(newBootCoordinator)
199	require.Nil(t, err)
200	bootCoordinator, err := auctionClientTest.AuctionGetBootCoordinator()
201	require.Nil(t, err)
202	assert.Equal(t, &newBootCoordinator, bootCoordinator)
203	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
204	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
205	assert.Equal(t, newBootCoordinator, auctionEvents.NewBootCoordinator[0].NewBootCoordinator)
206	_, err = auctionClientTest.AuctionSetBootCoordinator(bootCoordinatorAddressConst)
207	require.Nil(t, err)
208}
209
210func TestAuctionGetSlotSet(t *testing.T) {
211	slot := int64(10)
212
213	slotSet, err := auctionClientTest.AuctionGetSlotSet(slot)
214	require.Nil(t, err)
215	assert.Equal(t, slotSet, big.NewInt(4))
216}
217
218func TestAuctionGetDefaultSlotSetBid(t *testing.T) {
219	slotSet := uint8(3)
220
221	minBid, err := auctionClientTest.AuctionGetDefaultSlotSetBid(slotSet)
222	require.Nil(t, err)
223	assert.Equal(t, minBid.String(), minBidStr)
224}
225
226func TestAuctionChangeDefaultSlotSetBid(t *testing.T) {
227	slotSet := int64(3)
228	set := uint8(3)
229	newInitialMinBid := new(big.Int)
230	newInitialMinBid.SetString("20000000000000000000", 10)
231
232	_, err := auctionClientTest.AuctionChangeDefaultSlotSetBid(slotSet, newInitialMinBid)
233	require.Nil(t, err)
234	minBid, err := auctionClientTest.AuctionGetDefaultSlotSetBid(set)
235	require.Nil(t, err)
236	assert.Equal(t, minBid, newInitialMinBid)
237	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
238	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
239	assert.Equal(t, slotSet, auctionEvents.NewDefaultSlotSetBid[0].SlotSet)
240	assert.Equal(t, newInitialMinBid, auctionEvents.NewDefaultSlotSetBid[0].NewInitialMinBid)
241	newMinBid := new(big.Int)
242	newMinBid.SetString("10000000000000000000", 10)
243	_, err = auctionClientTest.AuctionChangeDefaultSlotSetBid(slotSet, newMinBid)
244	require.Nil(t, err)
245}
246
247func TestAuctionGetClaimableHEZ(t *testing.T) {
248	bidderAddress := governanceAddressConst
249
250	claimableHEZ, err := auctionClientTest.AuctionGetClaimableHEZ(bidderAddress)
251	require.Nil(t, err)
252	assert.Equal(t, claimableHEZ.Int64(), int64(0))
253}
254
255func TestAuctionRegisterCoordinator(t *testing.T) {
256	forgerAddress := governanceAddressConst
257	bidderAddress := governanceAddressConst
258
259	_, err := auctionClientTest.AuctionSetCoordinator(forgerAddress, URL)
260	require.Nil(t, err)
261	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
262	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
263	assert.Equal(t, forgerAddress, auctionEvents.SetCoordinator[0].ForgerAddress)
264	assert.Equal(t, bidderAddress, auctionEvents.SetCoordinator[0].BidderAddress)
265	assert.Equal(t, URL, auctionEvents.SetCoordinator[0].CoordinatorURL)
266}
267
268func TestAuctionBid(t *testing.T) {
269	currentSlot, err := auctionClientTest.AuctionGetCurrentSlotNumber()
270	require.Nil(t, err)
271	bidAmount := new(big.Int)
272	bidAmount.SetString("12000000000000000000", 10)
273	bidderAddress := governanceAddressConst
274	_, err = auctionClientTest.AuctionBid(currentSlot+4, bidAmount)
275	require.Nil(t, err)
276	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
277	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
278	assert.Equal(t, bidAmount, auctionEvents.NewBid[0].BidAmount)
279	assert.Equal(t, bidderAddress, auctionEvents.NewBid[0].Bidder)
280	assert.Equal(t, currentSlot+4, auctionEvents.NewBid[0].Slot)
281}
282
283func TestAuctionGetSlotNumber(t *testing.T) {
284	slotConst := 4
285	blockNum := int(BLOCKSPERSLOT)*slotConst + genesisBlock
286
287	slot, err := auctionClientTest.AuctionGetSlotNumber(int64(blockNum))
288	require.Nil(t, err)
289	assert.Equal(t, slot, int64(slotConst))
290}
291
292func TestAuctionCanForge(t *testing.T) {
293	slotConst := 4
294	blockNum := int(BLOCKSPERSLOT)*slotConst + genesisBlock
295
296	canForge, err := auctionClientTest.AuctionCanForge(governanceAddressConst, int64(blockNum))
297	require.Nil(t, err)
298	assert.Equal(t, canForge, true)
299}
300
301func TestAuctionMultiBid(t *testing.T) {
302	currentSlot, err := auctionClientTest.AuctionGetCurrentSlotNumber()
303	require.Nil(t, err)
304	slotSet := [6]bool{true, false, true, false, true, false}
305	maxBid := new(big.Int)
306	maxBid.SetString("15000000000000000000", 10)
307	minBid := new(big.Int)
308	minBid.SetString("11000000000000000000", 10)
309	budget := new(big.Int)
310	budget.SetString("45200000000000000000", 10)
311	bidderAddress := governanceAddressConst
312	_, err = auctionClientTest.AuctionMultiBid(currentSlot+4, currentSlot+10, slotSet, maxBid, minBid, budget)
313	require.Nil(t, err)
314	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
315	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
316	assert.Equal(t, bidderAddress, auctionEvents.NewBid[0].Bidder)
317	assert.Equal(t, currentSlot+4, auctionEvents.NewBid[0].Slot)
318	assert.Equal(t, bidderAddress, auctionEvents.NewBid[1].Bidder)
319	assert.Equal(t, currentSlot+6, auctionEvents.NewBid[1].Slot)
320	assert.Equal(t, bidderAddress, auctionEvents.NewBid[2].Bidder)
321	assert.Equal(t, currentSlot+8, auctionEvents.NewBid[2].Slot)
322	assert.Equal(t, bidderAddress, auctionEvents.NewBid[3].Bidder)
323	assert.Equal(t, currentSlot+10, auctionEvents.NewBid[3].Slot)
324}
325
326func TestAuctionGetClaimableHEZ2(t *testing.T) {
327	bidderAddress := governanceAddressConst
328	amount := new(big.Int)
329	amount.SetString("11000000000000000000", 10)
330
331	claimableHEZ, err := auctionClientTest.AuctionGetClaimableHEZ(bidderAddress)
332	require.Nil(t, err)
333	assert.Equal(t, claimableHEZ, amount)
334}
335
336func TestAuctionClaimHEZ(t *testing.T) {
337	amount := new(big.Int)
338	amount.SetString("11000000000000000000", 10)
339
340	_, err := auctionClientTest.AuctionClaimHEZ()
341	require.Nil(t, err)
342	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
343	auctionEvents, _, _ := auctionClientTest.AuctionEventsByBlock(currentBlockNum)
344	assert.Equal(t, amount, auctionEvents.HEZClaimed[0].Amount)
345	assert.Equal(t, governanceAddressConst, auctionEvents.HEZClaimed[0].Owner)
346}
347
348func TestAuctionForge(t *testing.T) {
349	auctionClientTestHermez, err := NewAuctionClient(ethereumClientHermez, auctionTestAddressConst, tokenHEZAddressConst)
350	require.Nil(t, err)
351	slotConst := 4
352	blockNum := int64(int(BLOCKSPERSLOT)*slotConst + genesisBlock)
353	currentBlockNum, _ := auctionClientTest.client.EthCurrentBlock()
354	blocksToAdd := blockNum - currentBlockNum
355	addBlocks(blocksToAdd, ethClientDialURL)
356	currentBlockNum, _ = auctionClientTest.client.EthCurrentBlock()
357	assert.Equal(t, currentBlockNum, blockNum)
358	_, err = auctionClientTestHermez.AuctionForge(bootCoordinatorAddressConst)
359	require.Contains(t, err.Error(), "Can't forge")
360	_, err = auctionClientTestHermez.AuctionForge(governanceAddressConst)
361	require.Nil(t, err)
362}