Skip to content

Commit

Permalink
Merge pull request #394 from iotaledger/feat/throughput-mana
Browse files Browse the repository at this point in the history
Add BIC to throughput and add 1 to quantum
  • Loading branch information
hmoog authored Oct 3, 2023
2 parents 202f7eb + 90a5c0b commit 7f46ee8
Show file tree
Hide file tree
Showing 15 changed files with 113 additions and 53 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ require (
github.com/iotaledger/hive.go/stringify v0.0.0-20230929122509-67f34bfed40d
github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231001095511-32be422a567e
github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231001095356-923e8f138951
github.com/iotaledger/iota.go/v4 v4.0.0-20231003122130-2871888a9297
github.com/iotaledger/iota.go/v4 v4.0.0-20231003154311-26aa2f0fd388
github.com/labstack/echo/v4 v4.11.1
github.com/labstack/gommon v0.4.0
github.com/libp2p/go-libp2p v0.30.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -305,8 +305,8 @@ github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231001095511-32be422a567e h1:Mwoe7
github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231001095511-32be422a567e/go.mod h1:jhzexR5X8m6qcmrwt5OX477O/ZwT7Ak9sPT83ByPkAo=
github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231001095356-923e8f138951 h1:qUf1W0fE1IyZzVy3Exv0Kj+SKECXG3S26c9m2ETb07U=
github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231001095356-923e8f138951/go.mod h1:c5778OnWpLq108YE+Eb2m8Ri/t/4ydV0TvI/Sy5YivQ=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003122130-2871888a9297 h1:kbpsa/gF0x6Cxu5lN9TL8u5EdaGv1P3/OKKPW0w83Og=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003122130-2871888a9297/go.mod h1:+e3bsJFDr9HxmUMe+eQOLNut5wfcB/ivhJdouOJgOnE=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003154311-26aa2f0fd388 h1:IGqHrJRmrzfalf1py+FGWzkWoaA5o6avBSYWznVG08s=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003154311-26aa2f0fd388/go.mod h1:+e3bsJFDr9HxmUMe+eQOLNut5wfcB/ivhJdouOJgOnE=
github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY=
github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM=
github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
Expand Down
2 changes: 2 additions & 0 deletions pkg/protocol/engine/accounts/mana.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ func NewMana(value iotago.Mana, excessBaseTokens iotago.BaseToken, updateTime io
}
}

// Update is applied when the account output is transitioned, updating the total value and excess base tokens.
func (m *Mana) Update(value iotago.Mana, excessBaseTokens iotago.BaseToken, updateTime iotago.SlotIndex) {
m.mutex.Lock()
defer m.mutex.Unlock()
Expand All @@ -31,6 +32,7 @@ func (m *Mana) Update(value iotago.Mana, excessBaseTokens iotago.BaseToken, upda
m.updateTime = updateTime
}

// UpdateValue is applied when the total decayed value is updated but the account output is not changed.
func (m *Mana) UpdateValue(value iotago.Mana, updateTime iotago.SlotIndex) {
m.mutex.Lock()
defer m.mutex.Unlock()
Expand Down
82 changes: 72 additions & 10 deletions pkg/protocol/engine/accounts/mana/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/iotaledger/hive.go/lo"
"github.com/iotaledger/hive.go/runtime/module"
"github.com/iotaledger/hive.go/runtime/syncutils"
"github.com/iotaledger/iota-core/pkg/model"
"github.com/iotaledger/iota-core/pkg/protocol/engine/accounts"
"github.com/iotaledger/iota-core/pkg/protocol/engine/utxoledger"
iotago "github.com/iotaledger/iota.go/v4"
Expand All @@ -24,15 +25,18 @@ type Manager struct {

accountOutputResolveFunc func(iotago.AccountID, iotago.SlotIndex) (*utxoledger.Output, error)

accountRetrieveFunc func(iotago.AccountID, iotago.SlotIndex) (*accounts.AccountData, bool, error)

mutex syncutils.Mutex

module.Module
}

func NewManager(apiProvider iotago.APIProvider, accountOutputResolveFunc func(iotago.AccountID, iotago.SlotIndex) (*utxoledger.Output, error)) *Manager {
func NewManager(apiProvider iotago.APIProvider, accountOutputResolveFunc func(iotago.AccountID, iotago.SlotIndex) (*utxoledger.Output, error), accountRetrieveFunc func(iotago.AccountID, iotago.SlotIndex) (*accounts.AccountData, bool, error)) *Manager {
return &Manager{
apiProvider: apiProvider,
accountOutputResolveFunc: accountOutputResolveFunc,
accountRetrieveFunc: accountRetrieveFunc,
manaVectorCache: cache.New[iotago.AccountID, *accounts.Mana](10000),
}
}
Expand All @@ -55,7 +59,17 @@ func (m *Manager) GetManaOnAccount(accountID iotago.AccountID, currentSlot iotag
if err != nil {
excessBaseTokens = 0
}
mana = accounts.NewMana(output.StoredMana(), excessBaseTokens, output.SlotCreated())

decayedBIC, err := m.getDecayedBIC(accountID, currentSlot)
if err != nil {
return 0, ierrors.Wrapf(err, "failed to get decayed BIC for %s", accountID)
}
totalMana, err := safemath.SafeAdd(output.StoredMana(), decayedBIC)
if err != nil {
return 0, ierrors.Wrapf(err, "overflow when adding stored mana and decayed BIC for account %s", accountID)
}

mana = accounts.NewMana(totalMana, excessBaseTokens, output.SlotCreated())

if !exists {
m.manaVectorCache.Put(accountID, mana)
Expand All @@ -67,7 +81,7 @@ func (m *Manager) GetManaOnAccount(accountID iotago.AccountID, currentSlot iotag
}

manaDecayProvider := m.apiProvider.CurrentAPI().ManaDecayProvider()
// apply decay to stored Mana and potential that was added on last update
// apply decay to stored, allotted and potential that was added on last update
manaStored, err := manaDecayProvider.ManaWithDecay(mana.Value(), mana.UpdateTime(), currentSlot)
if err != nil {
return 0, err
Expand All @@ -79,30 +93,78 @@ func (m *Manager) GetManaOnAccount(accountID iotago.AccountID, currentSlot iotag
if err != nil {
return 0, err
}
updatedValue += manaPotential
updatedValue, err = safemath.SafeAdd(updatedValue, manaPotential)
if err != nil {
return 0, ierrors.Wrapf(err, "overflow when adding stored and potential mana for account %s", accountID)
}

decayedBIC, err := m.getDecayedBIC(accountID, currentSlot)
if err != nil {
return 0, ierrors.Wrapf(err, "failed to get decayed BIC for %s", accountID)
}
updatedValue, err = safemath.SafeAdd(updatedValue, decayedBIC)
if err != nil {
return 0, ierrors.Wrapf(err, "overflow when adding stored, potential and decayed BIC for account %s", accountID)
}

mana.UpdateValue(updatedValue, currentSlot)

return mana.Value(), nil
}

func (m *Manager) ApplyDiff(slot iotago.SlotIndex, destroyedAccounts ds.Set[iotago.AccountID], accountOutputs map[iotago.AccountID]*utxoledger.Output) {
func (m *Manager) ApplyDiff(slot iotago.SlotIndex, destroyedAccounts ds.Set[iotago.AccountID], accountOutputs map[iotago.AccountID]*utxoledger.Output, accountDiffs map[iotago.AccountID]*model.AccountDiff) error {
m.mutex.Lock()
defer m.mutex.Unlock()

destroyedAccounts.Range(func(accountID iotago.AccountID) {
m.manaVectorCache.Remove(accountID)
})

for accountID, output := range accountOutputs {
for accountID := range accountDiffs {
mana, exists := m.manaVectorCache.Get(accountID)
if exists {
minDeposit := lo.PanicOnErr(m.apiProvider.CurrentAPI().RentStructure().MinDeposit(output.Output()))
excessBaseTokens, err := safemath.SafeSub(output.BaseTokenAmount(), minDeposit)
var excessBaseTokens iotago.BaseToken
var storedMana iotago.Mana
var err error
if output, has := accountOutputs[accountID]; has {
minDeposit := lo.PanicOnErr(m.apiProvider.CurrentAPI().RentStructure().MinDeposit(output.Output()))
excessBaseTokens, err = safemath.SafeSub(output.BaseTokenAmount(), minDeposit)
if err != nil {
excessBaseTokens = 0
}
storedMana = output.StoredMana()
}
decayedBIC, err := m.getDecayedBIC(accountID, slot)
if err != nil {
return err
}
totalMana, err := safemath.SafeAdd(decayedBIC, storedMana)
if err != nil {
excessBaseTokens = 0
return ierrors.Wrapf(err, "overflow when adding stored mana and decayed BIC for account %s", accountID)
}
mana.Update(output.StoredMana(), excessBaseTokens, slot)

mana.Update(totalMana, excessBaseTokens, slot)
}
}

return nil
}

func (m *Manager) getDecayedBIC(accountID iotago.AccountID, slot iotago.SlotIndex) (iotago.Mana, error) {
accountBIC, exists, err := m.accountRetrieveFunc(accountID, slot)
if err != nil {
return 0, ierrors.Wrapf(err, "failed to retrieve account data for %s in slot %s", accountID, slot)
}
if !exists {
return 0, ierrors.Errorf("account data for %s in slot %s does not exist", accountID, slot)
}
if accountBIC.Credits.Value <= 0 {
return 0, nil
}
decayedBIC, err := m.apiProvider.CurrentAPI().ManaDecayProvider().ManaWithDecay(iotago.Mana(accountBIC.Credits.Value), accountBIC.Credits.UpdateTime, slot)
if err != nil {
return 0, ierrors.Wrapf(err, "failed to apply mana decay for account %s", accountID)
}

return decayedBIC, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,9 @@ func NewProvider(opts ...options.Option[Scheduler]) module.Provider[*engine.Engi
return 0, err
}

minMana := s.apiProvider.CurrentAPI().ProtocolParameters().CongestionControlParameters().MinMana
if mana < minMana {
return 0, ierrors.Errorf("account %s has insufficient Mana for block to be scheduled: account Mana %d, min Mana %d", accountID, mana, minMana)
}
mana = lo.Min(mana, iotago.Mana(s.maxDeficit()-1))

return Deficit(mana / minMana), nil
return 1 + Deficit(mana), nil
}
})
s.TriggerConstructed()
Expand Down
10 changes: 6 additions & 4 deletions pkg/protocol/engine/ledger/ledger/ledger.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func NewProvider() module.Provider[*engine.Engine, ledger.Ledger] {
l.memPool = mempoolv1.New(NewVM(l), l.resolveState, e.Workers.CreateGroup("MemPool"), l.conflictDAG, l.errorHandler, mempoolv1.WithForkAllTransactions[ledger.BlockVoteRank](true))
e.EvictionState.Events.SlotEvicted.Hook(l.memPool.Evict)

l.manaManager = mana.NewManager(l.apiProvider, l.resolveAccountOutput)
l.manaManager = mana.NewManager(l.apiProvider, l.resolveAccountOutput, l.accountsLedger.Account)
latestCommittedSlot := e.Storage.Settings().LatestCommitment().Slot()
l.accountsLedger.SetLatestCommittedSlot(latestCommittedSlot)
l.rmcManager.SetLatestCommittedSlot(latestCommittedSlot)
Expand Down Expand Up @@ -170,9 +170,6 @@ func (l *Ledger) CommitSlot(slot iotago.SlotIndex) (stateRoot iotago.Identifier,
l.prepareAccountDiffs(accountDiffs, slot, consumedAccounts, createdAccounts)

// Commit the changes
// Update the mana manager's cache
l.manaManager.ApplyDiff(slot, destroyedAccounts, createdAccounts)

// Update the UTXO ledger
if err = l.utxoLedger.ApplyDiff(slot, outputs, spends); err != nil {
return iotago.Identifier{}, iotago.Identifier{}, iotago.Identifier{}, ierrors.Errorf("failed to apply diff to UTXO ledger for slot %d: %w", slot, err)
Expand All @@ -190,6 +187,11 @@ func (l *Ledger) CommitSlot(slot iotago.SlotIndex) (stateRoot iotago.Identifier,
return iotago.Identifier{}, iotago.Identifier{}, iotago.Identifier{}, ierrors.Errorf("failed to apply diff to Accounts ledger for slot %d: %w", slot, err)
}

// Update the mana manager's cache
if err = l.manaManager.ApplyDiff(slot, destroyedAccounts, createdAccounts, accountDiffs); err != nil {
return iotago.Identifier{}, iotago.Identifier{}, iotago.Identifier{}, ierrors.Errorf("failed to apply diff to mana manager for slot %d: %w", slot, err)
}

// Mark each transaction as committed so the mempool can evict it
stateDiff.ExecutedTransactions().ForEach(func(_ iotago.TransactionID, tx mempool.TransactionMetadata) bool {
tx.Commit()
Expand Down
14 changes: 7 additions & 7 deletions pkg/tests/upgrade_signaling_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func Test_Upgrade_Signaling(t *testing.T) {

ts.AssertAccountData(&accounts.AccountData{
ID: ts.Node("nodeA").AccountID,
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits, UpdateTime: 0},
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits / 2, UpdateTime: 0},
ExpirySlot: iotago.MaxSlotIndex,
OutputID: iotago.OutputIDFromTransactionIDAndIndex(snapshotcreator.GenesisTransactionID, 1),
BlockIssuerKeys: iotago.NewBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(ts.Node("nodeA").PubKey))),
Expand All @@ -109,7 +109,7 @@ func Test_Upgrade_Signaling(t *testing.T) {

ts.AssertAccountData(&accounts.AccountData{
ID: ts.Node("nodeF").AccountID,
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits, UpdateTime: 0},
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits / 2, UpdateTime: 0},
ExpirySlot: iotago.MaxSlotIndex,
OutputID: iotago.OutputIDFromTransactionIDAndIndex(snapshotcreator.GenesisTransactionID, 6),
BlockIssuerKeys: iotago.NewBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(ts.Node("nodeF").PubKey))),
Expand All @@ -133,7 +133,7 @@ func Test_Upgrade_Signaling(t *testing.T) {
// check account data before all nodes set the current version
ts.AssertAccountData(&accounts.AccountData{
ID: ts.Node("nodeA").AccountID,
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits, UpdateTime: 0},
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits / 2, UpdateTime: 0},
ExpirySlot: iotago.MaxSlotIndex,
OutputID: iotago.OutputIDFromTransactionIDAndIndex(snapshotcreator.GenesisTransactionID, 1),
BlockIssuerKeys: iotago.NewBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(ts.Node("nodeA").PubKey))),
Expand All @@ -146,7 +146,7 @@ func Test_Upgrade_Signaling(t *testing.T) {

ts.AssertAccountData(&accounts.AccountData{
ID: ts.Node("nodeD").AccountID,
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits, UpdateTime: 0},
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits / 2, UpdateTime: 0},
ExpirySlot: iotago.MaxSlotIndex,
OutputID: iotago.OutputIDFromTransactionIDAndIndex(snapshotcreator.GenesisTransactionID, 4),
BlockIssuerKeys: iotago.NewBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(ts.Node("nodeD").PubKey))),
Expand All @@ -167,7 +167,7 @@ func Test_Upgrade_Signaling(t *testing.T) {

ts.AssertAccountData(&accounts.AccountData{
ID: ts.Node("nodeA").AccountID,
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits, UpdateTime: 0},
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits / 2, UpdateTime: 0},
ExpirySlot: iotago.MaxSlotIndex,
OutputID: iotago.OutputIDFromTransactionIDAndIndex(snapshotcreator.GenesisTransactionID, 1),
BlockIssuerKeys: iotago.NewBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(ts.Node("nodeA").PubKey))),
Expand Down Expand Up @@ -340,7 +340,7 @@ func Test_Upgrade_Signaling(t *testing.T) {
// check account data at the end of the test
ts.AssertAccountData(&accounts.AccountData{
ID: ts.Node("nodeA").AccountID,
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits, UpdateTime: 0},
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits / 2, UpdateTime: 0},
ExpirySlot: iotago.MaxSlotIndex,
OutputID: iotago.OutputIDFromTransactionIDAndIndex(snapshotcreator.GenesisTransactionID, 1),
BlockIssuerKeys: iotago.NewBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(ts.Node("nodeA").PubKey))),
Expand All @@ -353,7 +353,7 @@ func Test_Upgrade_Signaling(t *testing.T) {

ts.AssertAccountData(&accounts.AccountData{
ID: ts.Node("nodeD").AccountID,
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits, UpdateTime: 0},
Credits: &accounts.BlockIssuanceCredits{Value: iotago.MaxBlockIssuanceCredits / 2, UpdateTime: 0},
ExpirySlot: iotago.MaxSlotIndex,
OutputID: iotago.OutputIDFromTransactionIDAndIndex(snapshotcreator.GenesisTransactionID, 4),
BlockIssuerKeys: iotago.NewBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(ts.Node("nodeD").PubKey))),
Expand Down
5 changes: 1 addition & 4 deletions pkg/testsuite/testsuite.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ type TestSuite struct {
optsRMCIncreaseThreshold iotago.WorkScore
optsRMCDecreaseThreshold iotago.WorkScore
optsSchedulerRate iotago.WorkScore
optsMinMana iotago.Mana
optsMaxBufferSize uint32
optsAccounts []snapshotcreator.AccountDetails
optsSnapshotOptions []options.Option[snapshotcreator.Options]
Expand Down Expand Up @@ -98,7 +97,6 @@ func NewTestSuite(testingT *testing.T, opts ...options.Option[TestSuite]) *TestS
optsRMCIncreaseThreshold: 8 * schedulerRate,
optsRMCDecreaseThreshold: 5 * schedulerRate,
optsSchedulerRate: schedulerRate,
optsMinMana: 1,
optsMaxBufferSize: 100 * iotago.MaxBlockSize,
}, opts, func(t *TestSuite) {
fmt.Println("Setup TestSuite -", testingT.Name(), " @ ", time.Now())
Expand Down Expand Up @@ -136,7 +134,6 @@ func NewTestSuite(testingT *testing.T, opts ...options.Option[TestSuite]) *TestS
t.optsRMCIncreaseThreshold,
t.optsRMCDecreaseThreshold,
t.optsSchedulerRate,
t.optsMinMana,
t.optsMaxBufferSize,
t.optsMaxBufferSize,
),
Expand Down Expand Up @@ -357,7 +354,7 @@ func (t *TestSuite) addNodeToPartition(name string, partition string, validator
Mana: iotago.Mana(amount),
IssuerKey: iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(ed25519.PublicKey(node.PubKey)),
ExpirySlot: iotago.MaxSlotIndex,
BlockIssuanceCredits: iotago.MaxBlockIssuanceCredits,
BlockIssuanceCredits: iotago.MaxBlockIssuanceCredits / 2,
}
if validator {
accountDetails.StakedAmount = accountDetails.Amount
Expand Down
2 changes: 1 addition & 1 deletion tools/evil-spammer/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ require (
github.com/iotaledger/hive.go/runtime v0.0.0-20230929122509-67f34bfed40d
github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000
github.com/iotaledger/iota-core/tools/genesis-snapshot v0.0.0-00010101000000-000000000000
github.com/iotaledger/iota.go/v4 v4.0.0-20231003122130-2871888a9297
github.com/iotaledger/iota.go/v4 v4.0.0-20231003154311-26aa2f0fd388
github.com/mr-tron/base58 v1.2.0
go.uber.org/atomic v1.11.0
)
Expand Down
4 changes: 2 additions & 2 deletions tools/evil-spammer/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,8 @@ github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230929122509-67f34bf
github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230929122509-67f34bfed40d/go.mod h1:IJgaaxbgKCsNat18jlJJEAxCY2oVYR3F30B+M4vJ89I=
github.com/iotaledger/hive.go/stringify v0.0.0-20230929122509-67f34bfed40d h1:ekHWRypoaiCXgrJVUQS7rCewsK3FuG1gTbPxu5jYn9c=
github.com/iotaledger/hive.go/stringify v0.0.0-20230929122509-67f34bfed40d/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003122130-2871888a9297 h1:kbpsa/gF0x6Cxu5lN9TL8u5EdaGv1P3/OKKPW0w83Og=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003122130-2871888a9297/go.mod h1:+e3bsJFDr9HxmUMe+eQOLNut5wfcB/ivhJdouOJgOnE=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003154311-26aa2f0fd388 h1:IGqHrJRmrzfalf1py+FGWzkWoaA5o6avBSYWznVG08s=
github.com/iotaledger/iota.go/v4 v4.0.0-20231003154311-26aa2f0fd388/go.mod h1:+e3bsJFDr9HxmUMe+eQOLNut5wfcB/ivhJdouOJgOnE=
github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
Expand Down
Loading

0 comments on commit 7f46ee8

Please sign in to comment.