func NewSlotProposalManager(slot uint64, epochState chainhash.Hash, epochSlot uint64, mgr *ShardSyncManager) *SlotProposalManager {
	return &SlotProposalManager{
		proposalSlot: slot,
		bestProposal: &ProposalInformation{
			TransactionPackage: primitives.TransactionPackage{
				StartRoot:     epochState,
				EndRoot:       epochState,
				Updates:       nil,
				Verifications: nil,
				Transactions:  nil,
			},
			startSlot: epochSlot,
		},
		mgr:       mgr,
		requested: false,
	}
}
NewSlotProposalManager creates a new manager to keep track of proposals for this slot.
package chain
import (
	"bytes"
	"fmt"
	"sync"
	"time"
	"github.com/golang/protobuf/proto"
	"github.com/libp2p/go-libp2p-core/network"
	"github.com/libp2p/go-libp2p-core/peer"
	"github.com/libp2p/go-libp2p-core/protocol"
	"github.com/phoreproject/synapse/chainhash"
	"github.com/phoreproject/synapse/p2p"
	"github.com/phoreproject/synapse/pb"
	"github.com/phoreproject/synapse/primitives"
	relayerp2p "github.com/phoreproject/synapse/relayer/p2p"
	"github.com/phoreproject/synapse/shard/state"
	"github.com/phoreproject/synapse/shard/transfer"
	"github.com/prysmaticlabs/go-ssz"
	"github.com/sirupsen/logrus"
)
type shardProtocols struct {
	shard   *p2p.ProtocolHandler
	relayer *p2p.ProtocolHandler
}
type SlotProposalManager struct {
	proposalSlot uint64
	bestProposal *ProposalInformation
	lock         sync.Mutex
	mgr          *ShardSyncManager
	requested    bool
}