|
|
package coordinator
import ( "time"
"github.com/hermeznetwork/hermez-node/common" "github.com/hermeznetwork/hermez-node/log" )
// ServerProofInterface is the interface to a ServerProof that calculates zk proofs
type ServerProofInterface interface { CalculateProof(zkInputs *common.ZKInputs) error GetProof(stopCh chan bool) (*Proof, error) }
// ServerProof contains the data related to a ServerProof
type ServerProof struct { // TODO
URL string Available bool }
// NewServerProof creates a new ServerProof
func NewServerProof(URL string) *ServerProof { return &ServerProof{URL: URL} }
// CalculateProof sends the *common.ZKInputs to the ServerProof to compute the
// Proof
func (p *ServerProof) CalculateProof(zkInputs *common.ZKInputs) error { log.Error("TODO") return errTODO }
// GetProof retreives the Proof from the ServerProof
func (p *ServerProof) GetProof(stopCh chan bool) (*Proof, error) { log.Error("TODO") return nil, errTODO }
// ServerProofMock is a mock ServerProof to be used in tests. It doesn't calculate anything
type ServerProofMock struct { }
// CalculateProof sends the *common.ZKInputs to the ServerProof to compute the
// Proof
func (p *ServerProofMock) CalculateProof(zkInputs *common.ZKInputs) error { return nil }
// GetProof retreives the Proof from the ServerProof
func (p *ServerProofMock) GetProof(stopCh chan bool) (*Proof, error) { // Simulate a delay
select { case <-time.After(200 * time.Millisecond): //nolint:gomnd
return &Proof{}, nil case <-stopCh: return nil, ErrStop } }
// ServerProofPool contains the multiple ServerProof
type ServerProofPool struct { pool chan ServerProofInterface }
// NewServerProofPool creates a new pool of ServerProofs.
func NewServerProofPool(maxServerProofs int) *ServerProofPool { return &ServerProofPool{ pool: make(chan ServerProofInterface, maxServerProofs), } }
// Add a ServerProof to the pool
func (p *ServerProofPool) Add(serverProof ServerProofInterface) { p.pool <- serverProof }
// Get returns the next available ServerProof
func (p *ServerProofPool) Get(stopCh chan bool) (ServerProofInterface, error) { select { case <-stopCh: log.Info("ServerProofPool.Get stopped") return nil, ErrStop default: select { case <-stopCh: log.Info("ServerProofPool.Get stopped") return nil, ErrStop case serverProof := <-p.pool: return serverProof, nil } } }
|