Skip to content
This repository has been archived by the owner on Dec 20, 2023. It is now read-only.

Commit

Permalink
Merge branch 'dev' into spacenet
Browse files Browse the repository at this point in the history
  • Loading branch information
adlrocha committed Aug 4, 2023
2 parents de5be1e + 7606884 commit 4587dae
Show file tree
Hide file tree
Showing 11 changed files with 214 additions and 70 deletions.
132 changes: 97 additions & 35 deletions chain/consensus/mir/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,10 @@ import (
)

const (
InterceptorOutputEnv = "MIR_INTERCEPTOR_OUTPUT"
ManglerEnv = "MIR_MANGLER"
InterceptorOutputEnv = "MIR_INTERCEPTOR_OUTPUT"
InterceptorWithEventsOutputEnv = "MIR_INTERCEPTOR_WITH_EVENTS_OUTPUT"
InterceptorEventsPerFile = 100_000
ManglerEnv = "MIR_MANGLER"

CheckpointDBKeyPrefix = "mir/checkpoints/"

Expand All @@ -61,7 +63,8 @@ type Manager struct {

// Mir types.
mirCtx context.Context
mirErrChan chan error
mirStopped chan struct{}
mirErr error
mirCancel context.CancelFunc
mirNode *mir.Node
txPool *fifo.Pool
Expand All @@ -85,8 +88,10 @@ func NewManager(ctx context.Context,
membership mirmembership.Reader,
cfg *Config,
) (*Manager, error) {
if cfg == nil {
return nil, fmt.Errorf("nil config")
// -------------------------------------------------------------------------
// Initial configuration and validation.
if err := validateConfig(cfg); err != nil {
return nil, err
}
id := cfg.Addr.String()

Expand All @@ -95,30 +100,28 @@ func NewManager(ctx context.Context,
return nil, fmt.Errorf("validator %v failed to resolve network name: %w", id, err)
}

if cfg.Consensus.SegmentLength < 0 {
return nil, fmt.Errorf("validator %v segment length is negative", id)
}

membershipInfo, nodes, err := waitForMembershipInfo(ctx, id, membership, log, WaitForMembershipTimeout)
membershipInfo, initialMembership, err := waitForMembershipInfo(ctx, id, membership, log, WaitForMembershipTimeout)
if err != nil {
return nil, fmt.Errorf("validator %v failed to configure membership: %w", id, err)
}
if nodes == nil {
return nil, fmt.Errorf("empty membership nodes")
if err := validateMembership(initialMembership); err != nil {
return nil, err
}
if membershipInfo == nil {
return nil, fmt.Errorf("empty membership info")
if err := validateMembershipInfo(membershipInfo); err != nil {
return nil, err
}

e := membershipInfo.GenesisEpoch
initialValidatorSet := membershipInfo.ValidatorSet

logger := NewLogger(id)
// Create Mir modules.

// -------------------------------------------------------------------------
// Mir modules support.
if err := net.Start(); err != nil {
return nil, fmt.Errorf("failed to start transport: %w", err)
}
net.Connect(nodes)
net.Connect(initialMembership)

cryptoManager, err := NewCryptoManager(cfg.Addr, node)
if err != nil {
Expand All @@ -144,15 +147,15 @@ func NewManager(ctx context.Context,
initialValidatorSet: initialValidatorSet,
membership: membership,
}
m.mirErrChan = make(chan error, 1)
m.mirStopped = make(chan struct{})
m.mirCtx, m.mirCancel = context.WithCancel(context.Background())

m.stateManager, err = NewStateManager(ctx, m.netName, nodes, abi.ChainEpoch(e), m.confManager, node, ds, m.txPool, cfg)
m.stateManager, err = NewStateManager(ctx, m.netName, initialMembership, abi.ChainEpoch(e), m.confManager, node, ds, m.txPool, cfg)
if err != nil {
return nil, fmt.Errorf("validator %v failed to start mir state manager: %w", id, err)
}

params := trantor.DefaultParams(nodes)
params := trantor.DefaultParams(initialMembership)
params.Iss.SegmentLength = cfg.Consensus.SegmentLength // Segment length determining the checkpoint period.
params.Iss.ConfigOffset = cfg.Consensus.ConfigOffset
params.Iss.AdjustSpeed(cfg.Consensus.MaxProposeDelay)
Expand Down Expand Up @@ -185,6 +188,9 @@ func NewManager(ctx context.Context,

smrSystem = smrSystem.WithModule("hasher", mircrypto.NewHasher(crypto.SHA256)) // to use sha256 hash from cryptomodule.

// -------------------------------------------------------------------------
// Mir's mangler support.

mirManglerParams := os.Getenv(ManglerEnv)
if mirManglerParams != "" {
p, err := GetEnvManglerParams()
Expand All @@ -204,20 +210,35 @@ func NewManager(ctx context.Context,
return nil, fmt.Errorf("validator %v failed to start SMR system: %w", id, err)
}

nodeCfg := mir.DefaultNodeConfig().WithLogger(logger)
// -------------------------------------------------------------------------
// Mir's event recorder support.

if interceptorPath := os.Getenv(InterceptorOutputEnv); interceptorPath != "" {
// TODO: Persist in repo path?
log.Infof("Interceptor initialized on %s", interceptorPath)
m.interceptor, err = eventlog.NewRecorder(
// TODO: Persist in repo path?
var recorder *eventlog.Recorder
switch {
case os.Getenv(InterceptorOutputEnv) != "":
recorder, err = eventlog.NewRecorder(
t.NodeID(id),
path.Join(interceptorPath, cfg.GroupName, id),
path.Join(os.Getenv(InterceptorOutputEnv), cfg.GroupName, id),
logging.Decorate(logger, "Interceptor: "),
)
if err != nil {
return nil, fmt.Errorf("failed to create interceptor: %w", err)
}
case os.Getenv(InterceptorWithEventsOutputEnv) != "":
recorder, err = eventlog.NewRecorder(
t.NodeID(id),
path.Join(os.Getenv(InterceptorWithEventsOutputEnv), cfg.GroupName, id),
logging.Decorate(logger, "Interceptor: "),
eventlog.FileSplitterOpt(eventlog.EventLimitLogger(InterceptorEventsPerFile)),
)
default:
}
if err != nil {
return nil, fmt.Errorf("failed to create event recorder: %w", err)
}
m.interceptor = recorder

// -------------------------------------------------------------------------
// Mir node initialization.
nodeCfg := mir.DefaultNodeConfig().WithLogger(logger)
m.mirNode, err = mir.NewNode(t.NodeID(id), nodeCfg, smrSystem.Modules(), m.interceptor)
if err != nil {
return nil, fmt.Errorf("validator %v failed to create Mir node: %w", id, err)
Expand All @@ -240,7 +261,8 @@ func (m *Manager) Serve(ctx context.Context) error {
// node will not be stopped implicitly and there will be no race between Lotus and Mir during shutdown process.
// In this case we also know that if we receive an error on mirErrChan before cancelling mirCtx
// then that error is not ErrStopped.
m.mirErrChan <- m.mirNode.Run(m.mirCtx)
m.mirErr = m.mirNode.Run(m.mirCtx)
close(m.mirStopped)
}()
defer m.stop()

Expand All @@ -255,14 +277,13 @@ func (m *Manager) Serve(ctx context.Context) error {
lastValidatorSet := m.initialValidatorSet

for {

select {
case <-ctx.Done():
log.With("validator", m.id).Info("Mir manager: context closed")
return nil

case err := <-m.mirErrChan:
panic(fmt.Sprintf("Mir node %v running error: %v", m.id, err))
case <-m.mirStopped:
return fmt.Errorf("mir stopped with err %w", m.mirErr)

case <-reconfigure.C:
// Send a reconfiguration transaction if the validator set in the actor has been changed.
Expand Down Expand Up @@ -346,9 +367,9 @@ func (m *Manager) stop() {
log.With("validator", m.id).Info("Network transport stopped")

m.mirNode.Stop()
err := <-m.mirErrChan
if !errors.Is(err, mir.ErrStopped) {
log.With("validator", m.id).Errorf("Mir node stopped with error: %v", err)
<-m.mirStopped
if !errors.Is(m.mirErr, mir.ErrStopped) {
log.With("validator", m.id).Errorf("Mir node stopped with error: %v", m.mirErr)
} else {
log.With("validator", m.id).Infof("Mir node stopped")
}
Expand Down Expand Up @@ -496,3 +517,44 @@ func getMembershipInfo(
}
return membershipInfo, initialMembership, nil
}

func validateMembership(mb *mirproto.Membership) error {
if mb == nil {
return fmt.Errorf("nil membership")
}
if len(mb.Nodes) == 0 {
return fmt.Errorf("no nodes in membership")
}
return nil
}

func validateMembershipInfo(info *mirmembership.Info) error {
if info == nil {
return fmt.Errorf("nil membership info")
}

if info.ValidatorSet == nil {
return fmt.Errorf("nil validator set in membership info")
}

if len(info.ValidatorSet.Validators) == 0 {
return fmt.Errorf("epmty validator set in membership info")
}
return nil
}

func validateConfig(cfg *Config) error {
if cfg == nil {
return fmt.Errorf("nil config")
}
if cfg.Consensus == nil {
return fmt.Errorf("nil consensus config")
}
if cfg.BaseConfig == nil {
return fmt.Errorf("nil base config")
}
if cfg.Consensus.SegmentLength <= 0 {
return fmt.Errorf("segment length is not positive")
}
return nil
}
2 changes: 1 addition & 1 deletion chain/consensus/mir/membership/membership.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func Membership(validators []*validator.Validator) ([]t.NodeID, *mirproto.Member
Id: id,
Addr: a.String(),
Key: nil,
Weight: tt.VoteWeight(v.Weight.Uint64()),
Weight: tt.VoteWeight(v.Weight.String()),
}
}

Expand Down
22 changes: 11 additions & 11 deletions chain/consensus/mir/membership/membership_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import (
)

func TestMembership(t *testing.T) {
v1, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v1, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:1@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)
v2, err := validator.NewValidatorFromString("t12zjpclnis2uytmcydrx7i5jcbvehs5ut3x6mvvq@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v2, err := validator.NewValidatorFromString("t12zjpclnis2uytmcydrx7i5jcbvehs5ut3x6mvvq:2@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)

ids, mb, err := Membership([]*validator.Validator{v1, v2})
Expand All @@ -34,7 +34,7 @@ func TestMembership(t *testing.T) {
}

func TestStringMembershipInfo(t *testing.T) {
s1 := "t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ"
s1 := "t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:1@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ"

vs := StringMembership("0;" + s1)
info, err := vs.GetMembershipInfo()
Expand All @@ -43,8 +43,8 @@ func TestStringMembershipInfo(t *testing.T) {
require.Equal(t, uint64(0), info.ValidatorSet.ConfigurationNumber)
require.Equal(t, 1, len(info.ValidatorSet.Validators))

s2 := "t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ"
s3 := "t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10002/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ"
s2 := "t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:1@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ"
s3 := "t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:2@/ip4/127.0.0.1/tcp/10002/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ"

vs = StringMembership("3;" + s1 + "," + s2 + "," + s3)
info, err = vs.GetMembershipInfo()
Expand All @@ -55,11 +55,11 @@ func TestStringMembershipInfo(t *testing.T) {
}

func TestOnchainMembershipInfo(t *testing.T) {
v1, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v1, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:1@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)
v2, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v2, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:2@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)
v3, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10002/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v3, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:3@/ip4/127.0.0.1/tcp/10002/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)

// Reintroduce the address to avoid looping.
Expand All @@ -83,11 +83,11 @@ func TestFileMembershipInfo(t *testing.T) {
require.NoError(t, err)
})

v1, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v1, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:1@/ip4/127.0.0.1/tcp/10000/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)
v2, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v2, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:2@/ip4/127.0.0.1/tcp/10001/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)
v3, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy@/ip4/127.0.0.1/tcp/10002/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
v3, err := validator.NewValidatorFromString("t1wpixt5mihkj75lfhrnaa6v56n27epvlgwparujy:3@/ip4/127.0.0.1/tcp/10002/p2p/12D3KooWJhKBXvytYgPCAaiRtiNLJNSFG5jreKDu2jiVpJetzvVJ")
require.NoError(t, err)

vs := validator.NewValidatorSet(0, []*validator.Validator{v1, v2, v3})
Expand Down
3 changes: 1 addition & 2 deletions chain/consensus/mir/state_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,7 @@ func NewStateManager(
}
sm.nextNewMembership = initialMembership

// Initialize manager checkpoint state with the corresponding latest
// checkpoint
// Initialize manager checkpoint state with the corresponding latest checkpoint.
ch, err := sm.firstEpochCheckpoint()
if err != nil {
return nil, xerrors.Errorf("validator %v failed to get checkpoint for epoch 0: %w", sm.id, err)
Expand Down
5 changes: 2 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ require (
github.com/alecthomas/jsonschema v0.0.0-20200530073317-71f438968921
github.com/buger/goterm v1.0.3
github.com/chzyer/readline v1.5.1
github.com/consensus-shipyard/go-ipc-types v0.1.6
github.com/consensus-shipyard/go-ipc-types v0.1.8
github.com/containerd/cgroups v1.1.0
github.com/coreos/go-systemd/v22 v22.5.0
github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e
Expand Down Expand Up @@ -50,7 +50,7 @@ require (
github.com/filecoin-project/go-statemachine v1.0.3
github.com/filecoin-project/go-statestore v0.2.0
github.com/filecoin-project/go-storedcounter v0.1.0
github.com/filecoin-project/mir v0.4.1
github.com/filecoin-project/mir v0.4.4
github.com/filecoin-project/pubsub v1.0.0
github.com/filecoin-project/specs-actors v0.9.15
github.com/filecoin-project/specs-actors/v2 v2.3.6
Expand Down Expand Up @@ -276,7 +276,6 @@ require (
github.com/libp2p/go-nat v0.1.0 // indirect
github.com/libp2p/go-netroute v0.2.1 // indirect
github.com/libp2p/go-reuseport v0.3.0 // indirect
github.com/libp2p/go-yamux/v3 v3.1.2 // indirect
github.com/libp2p/go-yamux/v4 v4.0.0 // indirect
github.com/lucasb-eyer/go-colorful v1.0.3 // indirect
github.com/magefile/mage v1.9.0 // indirect
Expand Down
10 changes: 4 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
github.com/consensus-shipyard/go-ipc-types v0.1.6 h1:wC9DKpr3qMkwMpaGy3fYbhw910KRk1IT82KMMOPpmjk=
github.com/consensus-shipyard/go-ipc-types v0.1.6/go.mod h1:oZQ3wFTjxmAQLFZrHkj7pagpNF7Oq+GOy/bpjjgD83A=
github.com/consensus-shipyard/go-ipc-types v0.1.8 h1:L5TC3cWOuG79i2czRlmBqus/1ENqlSOQ8cp0bccgl+8=
github.com/consensus-shipyard/go-ipc-types v0.1.8/go.mod h1:oZQ3wFTjxmAQLFZrHkj7pagpNF7Oq+GOy/bpjjgD83A=
github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
Expand Down Expand Up @@ -350,8 +350,8 @@ github.com/filecoin-project/go-statestore v0.2.0 h1:cRRO0aPLrxKQCZ2UOQbzFGn4WDNd
github.com/filecoin-project/go-statestore v0.2.0/go.mod h1:8sjBYbS35HwPzct7iT4lIXjLlYyPor80aU7t7a/Kspo=
github.com/filecoin-project/go-storedcounter v0.1.0 h1:Mui6wSUBC+cQGHbDUBcO7rfh5zQkWJM/CpAZa/uOuus=
github.com/filecoin-project/go-storedcounter v0.1.0/go.mod h1:4ceukaXi4vFURIoxYMfKzaRF5Xv/Pinh2oTnoxpv+z8=
github.com/filecoin-project/mir v0.4.1 h1:FDQdMlto/QfAgQ34Gz5vjDlv2YAbCeqEua+TiO+SDzc=
github.com/filecoin-project/mir v0.4.1/go.mod h1:AswyC0tLTUOq6PoAAaF2Yx2gNTAxUCVin/qDB6nkkOo=
github.com/filecoin-project/mir v0.4.4 h1:eD+ciYFvut8L3ZyXoc2IwFv1B5bCyFZXsnVInzYJbSI=
github.com/filecoin-project/mir v0.4.4/go.mod h1:AswyC0tLTUOq6PoAAaF2Yx2gNTAxUCVin/qDB6nkkOo=
github.com/filecoin-project/pubsub v1.0.0 h1:ZTmT27U07e54qV1mMiQo4HDr0buo8I1LDHBYLXlsNXM=
github.com/filecoin-project/pubsub v1.0.0/go.mod h1:GkpB33CcUtUNrLPhJgfdy4FDx4OMNR9k+46DHx/Lqrg=
github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao=
Expand Down Expand Up @@ -1189,8 +1189,6 @@ github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/h
github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ=
github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q=
github.com/libp2p/go-yamux/v3 v3.1.2/go.mod h1:jeLEQgLXqE2YqX1ilAClIfCMDY+0uXQUKmmb/qp0gT4=
github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ=
github.com/libp2p/go-yamux/v4 v4.0.0/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
Expand Down
Loading

0 comments on commit 4587dae

Please sign in to comment.