mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 03:16:45 +01:00
- cli / node
- Update handler of SIGINT so that after 3 SIGINTs, the process terminates
unconditionally
- coordinator
- Store stats without pointer
- In all functions that send a variable via channel, check for context done
to avoid deadlock (due to no process reading from the channel, which has
no queue) when the node is stopped.
- Abstract `canForge` so that it can be used outside of the `Coordinator`
- In `canForge` check the blockNumber in current and next slot.
- Update tests due to smart contract changes in slot handling, and minimum
bid defaults
- TxManager
- Add consts, vars and stats to allow evaluating `canForge`
- Add `canForge` method (not used yet)
- Store batch and nonces status (last success and last pending)
- Track nonces internally instead of relying on the ethereum node (this
is required to work with ganache when there are pending txs)
- Handle the (common) case of the receipt not being found after the tx
is sent.
- Don't start the main loop until we get an initial messae fo the stats
and vars (so that in the loop the stats and vars are set to
synchronizer values)
- eth / ethereum client
- Add necessary methods to create the auth object for transactions manually
so that we can set the nonce, gas price, gas limit, etc manually
- Update `RollupForgeBatch` to take an auth object as input (so that the
coordinator can set parameters manually)
- synchronizer
- In stats, add `NextSlot`
42 lines
965 B
Go
42 lines
965 B
Go
package coordinator
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/hermeznetwork/hermez-node/common"
|
|
"github.com/hermeznetwork/hermez-node/log"
|
|
"github.com/hermeznetwork/hermez-node/prover"
|
|
"github.com/hermeznetwork/tracerr"
|
|
)
|
|
|
|
// ProversPool contains the multiple prover clients
|
|
type ProversPool struct {
|
|
pool chan prover.Client
|
|
}
|
|
|
|
// NewProversPool creates a new pool of provers.
|
|
func NewProversPool(maxServerProofs int) *ProversPool {
|
|
return &ProversPool{
|
|
pool: make(chan prover.Client, maxServerProofs),
|
|
}
|
|
}
|
|
|
|
// Add a prover to the pool
|
|
func (p *ProversPool) Add(ctx context.Context, serverProof prover.Client) {
|
|
select {
|
|
case p.pool <- serverProof:
|
|
case <-ctx.Done():
|
|
}
|
|
}
|
|
|
|
// Get returns the next available prover
|
|
func (p *ProversPool) Get(ctx context.Context) (prover.Client, error) {
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Info("ServerProofPool.Get done")
|
|
return nil, tracerr.Wrap(common.ErrDone)
|
|
case serverProof := <-p.pool:
|
|
return serverProof, nil
|
|
}
|
|
}
|