mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 11:26:44 +01:00
Advance coordinator implementation
- Common - Move ErrTODO and ErrDone to common for usage where needed. - Coordinator - Move prover types to prover package - Handle reorgs, stopping the pipeline when necessary - Handle ethereum transaction errors by stopping the pipeline - In case of ethereum transaction revert, check for known revert causes (more revert causes can be added to handle more cases) - Fix skipped transactions in TxManager confirmation logic - Cancel and wait for provers to be ready - Connect L2DB to: - purge l2txs due to timeout - mark l2txs at the different states - Connect HistoryDB to query L1UserTxs to forge in an L1Batch - L2DB - Skip update functions when the input slices have no values (to avoid a query with no values that results in an SQL error) - StateDB - In LocalStateDB, fix Reset when mt == nil - Prover (new package) - Rename the interface to Prover - Rename the mock struct to Mock - Extend Prover interface methods to provide everything required by the coordinator - Begin implementing required http client code to interact with server proof (not tested) - Synchronizer: - Add LastForgeL1TxsNum to Stats - Test/Client - Update Auction logic to track slots in which there's no forge during the time before the deadline (following the solidity implementation)
This commit is contained in:
38
coordinator/proverspool.go
Normal file
38
coordinator/proverspool.go
Normal file
@@ -0,0 +1,38 @@
|
||||
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(serverProof prover.Client) {
|
||||
p.pool <- serverProof
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user