diff --git a/.gitignore b/.gitignore index 321607e..18b3360 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .idea .DS_Store inx-mqtt +go.work +go.work.sum diff --git a/components/app/app.go b/components/app/app.go index e28697a..c6a78e0 100644 --- a/components/app/app.go +++ b/components/app/app.go @@ -4,7 +4,7 @@ import ( "github.com/iotaledger/hive.go/app" "github.com/iotaledger/hive.go/app/components/profiling" "github.com/iotaledger/hive.go/app/components/shutdown" - "github.com/iotaledger/inx-app/core/inx" + "github.com/iotaledger/inx-app/components/inx" "github.com/iotaledger/inx-mqtt/components/mqtt" "github.com/iotaledger/inx-mqtt/components/prometheus" ) diff --git a/components/mqtt/component.go b/components/mqtt/component.go index 0353f3b..3d71450 100644 --- a/components/mqtt/component.go +++ b/components/mqtt/component.go @@ -13,7 +13,7 @@ import ( ) const ( - APIRoute = "mqtt/v1" + APIRoute = "mqtt/v2" ) func init() { diff --git a/components/mqtt/publish.go b/components/mqtt/publish.go index 959e3ec..865741c 100644 --- a/components/mqtt/publish.go +++ b/components/mqtt/publish.go @@ -5,9 +5,9 @@ import ( "encoding/json" "strings" - "github.com/iotaledger/hive.go/serializer/v2" inx "github.com/iotaledger/inx/go" iotago "github.com/iotaledger/iota.go/v4" + "github.com/iotaledger/iota.go/v4/hexutil" ) func (s *Server) sendMessageOnTopic(topic string, payload []byte) { @@ -43,30 +43,51 @@ func (s *Server) PublishOnTopic(topic string, payload interface{}) { s.sendMessageOnTopic(topic, jsonPayload) } -/* -func (s *Server) PublishMilestoneOnTopic(topic string, ms *nodebridge.Milestone) { - if ms == nil || ms.Milestone == nil { +func (s *Server) PublishRawCommitmentOnTopic(topic string, commitment *iotago.Commitment) { + apiForVersion, err := s.NodeBridge.APIProvider().APIForVersion(commitment.Version) + if err != nil { + return + } + + rawCommitment, err := apiForVersion.Encode(commitment) + if err != nil { return } - s.PublishOnTopicIfSubscribed(topic, &milestoneInfoPayload{ - Index: ms.Milestone.Index, - Time: ms.Milestone.Timestamp, - MilestoneID: ms.MilestoneID.ToHex(), + s.PublishRawOnTopicIfSubscribed(topic, rawCommitment) +} + +func (s *Server) PublishCommitmentInfoOnTopic(topic string, id iotago.CommitmentID) { + s.PublishOnTopicIfSubscribed(topic, &commitmentInfoPayload{ + CommitmentID: id.ToHex(), + CommitmentIndex: uint64(id.Index()), }) } -*/ func (s *Server) PublishBlock(blk *inx.RawBlock) { + version, _, err := iotago.VersionFromBytes(blk.GetData()) + if err != nil { + return + } - block, err := blk.UnwrapBlock(serializer.DeSeriModeNoValidation, nil) + apiForVersion, err := s.NodeBridge.APIProvider().APIForVersion(version) + if err != nil { + return + } + + block, err := blk.UnwrapBlock(apiForVersion) if err != nil { return } s.PublishRawOnTopicIfSubscribed(topicBlocks, blk.GetData()) - switch payload := block.Payload.(type) { + basicBlk, isBasicBlk := block.Block.(*iotago.BasicBlock) + if !isBasicBlk { + return + } + + switch payload := basicBlk.Payload.(type) { case *iotago.Transaction: s.PublishRawOnTopicIfSubscribed(topicBlocksTransaction, blk.GetData()) @@ -75,7 +96,7 @@ func (s *Server) PublishBlock(blk *inx.RawBlock) { case *iotago.TaggedData: s.PublishRawOnTopicIfSubscribed(topicBlocksTransactionTaggedData, blk.GetData()) if len(p.Tag) > 0 { - txTaggedDataTagTopic := strings.ReplaceAll(topicBlocksTransactionTaggedDataTag, parameterTag, iotago.EncodeHex(p.Tag)) + txTaggedDataTagTopic := strings.ReplaceAll(topicBlocksTransactionTaggedDataTag, parameterTag, hexutil.EncodeHex(p.Tag)) s.PublishRawOnTopicIfSubscribed(txTaggedDataTagTopic, blk.GetData()) } } @@ -83,16 +104,9 @@ func (s *Server) PublishBlock(blk *inx.RawBlock) { case *iotago.TaggedData: s.PublishRawOnTopicIfSubscribed(topicBlocksTaggedData, blk.GetData()) if len(payload.Tag) > 0 { - taggedDataTagTopic := strings.ReplaceAll(topicBlocksTaggedDataTag, parameterTag, iotago.EncodeHex(payload.Tag)) + taggedDataTagTopic := strings.ReplaceAll(topicBlocksTaggedDataTag, parameterTag, hexutil.EncodeHex(payload.Tag)) s.PublishRawOnTopicIfSubscribed(taggedDataTagTopic, blk.GetData()) } - - case *iotago.Milestone: - payloadData, err := payload.Serialize(serializer.DeSeriModeNoValidation, nil) - if err != nil { - return - } - s.PublishRawOnTopicIfSubscribed(topicMilestones, payloadData) } } @@ -107,63 +121,23 @@ func (s *Server) PublishTransactionIncludedBlock(transactionID iotago.Transactio s.PublishRawOnTopicIfSubscribed(transactionTopic, block.GetData()) } -func hexEncodedBlockIDsFromINXBlockIDs(s []*inx.BlockId) []string { - results := make([]string, len(s)) - for i, blkID := range s { - blockID := blkID.Unwrap() - results[i] = iotago.EncodeHex(blockID[:]) - } - - return results -} - func (s *Server) PublishBlockMetadata(metadata *inx.BlockMetadata) { - - blockID := metadata.UnwrapBlockID().ToHex() + blockID := metadata.GetBlockId().Unwrap().ToHex() singleBlockTopic := strings.ReplaceAll(topicBlockMetadata, parameterBlockID, blockID) hasSingleBlockTopicSubscriber := s.MQTTBroker.HasSubscribers(singleBlockTopic) - hasAllBlocksTopicSubscriber := s.MQTTBroker.HasSubscribers(topicBlockMetadataReferenced) - hasTipScoreUpdatesSubscriber := s.MQTTBroker.HasSubscribers(topicTipScoreUpdates) + hasAcceptedBlocksTopicSubscriber := s.MQTTBroker.HasSubscribers(topicBlockMetadataAccepted) + hasConfirmedBlocksTopicSubscriber := s.MQTTBroker.HasSubscribers(topicBlockMetadataConfirmed) - if !hasSingleBlockTopicSubscriber && !hasAllBlocksTopicSubscriber && !hasTipScoreUpdatesSubscriber { + if !hasSingleBlockTopicSubscriber && !hasConfirmedBlocksTopicSubscriber && !hasAcceptedBlocksTopicSubscriber { return } response := &blockMetadataPayload{ - BlockID: blockID, - Parents: hexEncodedBlockIDsFromINXBlockIDs(metadata.GetParents()), - Solid: metadata.GetSolid(), - ReferencedByMilestoneIndex: metadata.GetReferencedByMilestoneIndex(), - MilestoneIndex: metadata.GetMilestoneIndex(), - } - - referenced := response.ReferencedByMilestoneIndex > 0 - - if referenced { - wfIndex := metadata.GetWhiteFlagIndex() - response.WhiteFlagIndex = &wfIndex - - switch metadata.GetLedgerInclusionState() { - - //nolint:nosnakecase // grpc uses underscores - case inx.BlockMetadata_LEDGER_INCLUSION_STATE_NO_TRANSACTION: - response.LedgerInclusionState = "noTransaction" - - //nolint:nosnakecase // grpc uses underscores - case inx.BlockMetadata_LEDGER_INCLUSION_STATE_CONFLICTING: - response.LedgerInclusionState = "conflicting" - conflict := metadata.GetConflictReason() - response.ConflictReason = &conflict - - //nolint:nosnakecase // grpc uses underscores - case inx.BlockMetadata_LEDGER_INCLUSION_STATE_INCLUDED: - response.LedgerInclusionState = "included" - } - } else if metadata.GetSolid() { - shouldPromote := metadata.GetShouldPromote() - shouldReattach := metadata.GetShouldReattach() - response.ShouldPromote = &shouldPromote - response.ShouldReattach = &shouldReattach + BlockID: blockID, + BlockState: metadata.GetBlockState(), + BlockFailureReason: metadata.GetBlockFailureReason(), + TxState: metadata.GetTxState(), + TxFailureReason: metadata.GetTxFailureReason(), } // Serialize here instead of using publishOnTopic to avoid double JSON marshaling @@ -175,44 +149,44 @@ func (s *Server) PublishBlockMetadata(metadata *inx.BlockMetadata) { if hasSingleBlockTopicSubscriber { s.sendMessageOnTopic(singleBlockTopic, jsonPayload) } - if referenced && hasAllBlocksTopicSubscriber { - s.sendMessageOnTopic(topicBlockMetadataReferenced, jsonPayload) + if hasConfirmedBlocksTopicSubscriber { + s.sendMessageOnTopic(topicBlockMetadataConfirmed, jsonPayload) } - if hasTipScoreUpdatesSubscriber { - s.sendMessageOnTopic(topicTipScoreUpdates, jsonPayload) + if hasAcceptedBlocksTopicSubscriber { + s.sendMessageOnTopic(topicBlockMetadataAccepted, jsonPayload) } } -func payloadForOutput(ledgerIndex uint32, output *inx.LedgerOutput, iotaOutput iotago.Output) *outputPayload { - rawOutputJSON, err := iotaOutput.MarshalJSON() +func payloadForOutput(api iotago.API, ledgerIndex iotago.SlotIndex, output *inx.LedgerOutput, iotaOutput iotago.Output) *outputPayload { + rawOutputJSON, err := api.JSONEncode(iotaOutput) if err != nil { return nil } - outputID := output.GetOutputId().Unwrap() rawRawOutputJSON := json.RawMessage(rawOutputJSON) + outputID := output.GetOutputId().Unwrap() return &outputPayload{ Metadata: &outputMetadataPayload{ - BlockID: output.GetBlockId().Unwrap().ToHex(), - TransactionID: outputID.TransactionID().ToHex(), - Spent: false, - OutputIndex: outputID.Index(), - MilestoneIndexBooked: output.GetMilestoneIndexBooked(), - MilestoneTimestampBooked: output.GetMilestoneTimestampBooked(), - LedgerIndex: ledgerIndex, + BlockID: output.GetBlockId().Unwrap().ToHex(), + TransactionID: outputID.TransactionID().ToHex(), + Spent: false, + OutputIndex: outputID.Index(), + IncludedSlot: output.GetSlotBooked(), + IncludedCommitmentID: output.GetCommitmentIdIncluded().Unwrap().ToHex(), + LedgerIndex: uint64(ledgerIndex), }, RawOutput: &rawRawOutputJSON, } } -func payloadForSpent(ledgerIndex uint32, spent *inx.LedgerSpent, iotaOutput iotago.Output) *outputPayload { - payload := payloadForOutput(ledgerIndex, spent.GetOutput(), iotaOutput) +func payloadForSpent(api iotago.API, ledgerIndex iotago.SlotIndex, spent *inx.LedgerSpent, iotaOutput iotago.Output) *outputPayload { + payload := payloadForOutput(api, ledgerIndex, spent.GetOutput(), iotaOutput) if payload != nil { payload.Metadata.Spent = true - payload.Metadata.MilestoneIndexSpent = spent.GetMilestoneIndexSpent() + payload.Metadata.SpentSlot = spent.GetSlotSpent() + payload.Metadata.CommitmentIDSpent = spent.GetCommitmentIdSpent().Unwrap().ToHex() payload.Metadata.TransactionIDSpent = spent.UnwrapTransactionIDSpent().ToHex() - payload.Metadata.MilestoneTimestampSpent = spent.GetMilestoneTimestampSpent() } return payload @@ -234,42 +208,42 @@ func (s *Server) PublishOnUnlockConditionTopics(baseTopic string, output iotago. address := unlockConditions.Address() if address != nil { - addr := address.Address.Bech32(s.NodeBridge.ProtocolParameters().Bech32HRP) + addr := address.Address.Bech32(s.NodeBridge.APIProvider().CurrentAPI().ProtocolParameters().Bech32HRP()) s.PublishPayloadFuncOnTopicIfSubscribed(topicFunc(unlockConditionAddress, addr), payloadFunc) addressesToPublishForAny[addr] = struct{}{} } storageReturn := unlockConditions.StorageDepositReturn() if storageReturn != nil { - addr := storageReturn.ReturnAddress.Bech32(s.NodeBridge.ProtocolParameters().Bech32HRP) + addr := storageReturn.ReturnAddress.Bech32(s.NodeBridge.APIProvider().CurrentAPI().ProtocolParameters().Bech32HRP()) s.PublishPayloadFuncOnTopicIfSubscribed(topicFunc(unlockConditionStorageReturn, addr), payloadFunc) addressesToPublishForAny[addr] = struct{}{} } expiration := unlockConditions.Expiration() if expiration != nil { - addr := expiration.ReturnAddress.Bech32(s.NodeBridge.ProtocolParameters().Bech32HRP) + addr := expiration.ReturnAddress.Bech32(s.NodeBridge.APIProvider().CurrentAPI().ProtocolParameters().Bech32HRP()) s.PublishPayloadFuncOnTopicIfSubscribed(topicFunc(unlockConditionExpiration, addr), payloadFunc) addressesToPublishForAny[addr] = struct{}{} } stateController := unlockConditions.StateControllerAddress() if stateController != nil { - addr := stateController.Address.Bech32(s.NodeBridge.ProtocolParameters().Bech32HRP) + addr := stateController.Address.Bech32(s.NodeBridge.APIProvider().CurrentAPI().ProtocolParameters().Bech32HRP()) s.PublishPayloadFuncOnTopicIfSubscribed(topicFunc(unlockConditionStateController, addr), payloadFunc) addressesToPublishForAny[addr] = struct{}{} } governor := unlockConditions.GovernorAddress() if governor != nil { - addr := governor.Address.Bech32(s.NodeBridge.ProtocolParameters().Bech32HRP) + addr := governor.Address.Bech32(s.NodeBridge.APIProvider().CurrentAPI().ProtocolParameters().Bech32HRP()) s.PublishPayloadFuncOnTopicIfSubscribed(topicFunc(unlockConditionGovernor, addr), payloadFunc) addressesToPublishForAny[addr] = struct{}{} } - immutableAlias := unlockConditions.ImmutableAlias() - if immutableAlias != nil { - addr := immutableAlias.Address.Bech32(s.NodeBridge.ProtocolParameters().Bech32HRP) + immutableAccount := unlockConditions.ImmutableAccount() + if immutableAccount != nil { + addr := immutableAccount.Address.Bech32(s.NodeBridge.APIProvider().CurrentAPI().ProtocolParameters().Bech32HRP()) s.PublishPayloadFuncOnTopicIfSubscribed(topicFunc(unlockConditionImmutableAlias, addr), payloadFunc) addressesToPublishForAny[addr] = struct{}{} } @@ -298,7 +272,7 @@ func (s *Server) PublishOnOutputChainTopics(outputID iotago.OutputID, output iot // Use implicit AccountID accountID = iotago.AccountIDFromOutputID(outputID) } - topic := strings.ReplaceAll(topicAliasOutputs, parameterAccountID, accountID.String()) + topic := strings.ReplaceAll(topicAccountOutputs, parameterAccountID, accountID.String()) s.PublishPayloadFuncOnTopicIfSubscribed(topic, payloadFunc) case *iotago.FoundryOutput: @@ -313,9 +287,9 @@ func (s *Server) PublishOnOutputChainTopics(outputID iotago.OutputID, output iot } } -func (s *Server) PublishOutput(ctx context.Context, ledgerIndex uint32, output *inx.LedgerOutput, publishOnAllTopics bool) { - - iotaOutput, err := output.UnwrapOutput(serializer.DeSeriModeNoValidation, nil) +func (s *Server) PublishOutput(ctx context.Context, ledgerIndex iotago.SlotIndex, output *inx.LedgerOutput, publishOnAllTopics bool) { + api := s.NodeBridge.APIProvider().CurrentAPI() + iotaOutput, err := output.UnwrapOutput(api) if err != nil { return } @@ -323,7 +297,7 @@ func (s *Server) PublishOutput(ctx context.Context, ledgerIndex uint32, output * var payload *outputPayload payloadFunc := func() interface{} { if payload == nil { - payload = payloadForOutput(ledgerIndex, output, iotaOutput) + payload = payloadForOutput(api, ledgerIndex, output, iotaOutput) } return payload @@ -350,9 +324,9 @@ func (s *Server) PublishOutput(ctx context.Context, ledgerIndex uint32, output * } } -func (s *Server) PublishSpent(ledgerIndex uint32, spent *inx.LedgerSpent) { - - iotaOutput, err := spent.GetOutput().UnwrapOutput(serializer.DeSeriModeNoValidation, nil) +func (s *Server) PublishSpent(ledgerIndex iotago.SlotIndex, spent *inx.LedgerSpent) { + api := s.NodeBridge.APIProvider().CurrentAPI() + iotaOutput, err := spent.GetOutput().UnwrapOutput(api) if err != nil { return } @@ -360,7 +334,7 @@ func (s *Server) PublishSpent(ledgerIndex uint32, spent *inx.LedgerSpent) { var payload *outputPayload payloadFunc := func() interface{} { if payload == nil { - payload = payloadForSpent(ledgerIndex, spent, iotaOutput) + payload = payloadForSpent(api, ledgerIndex, spent, iotaOutput) } return payload @@ -375,7 +349,7 @@ func (s *Server) PublishSpent(ledgerIndex uint32, spent *inx.LedgerSpent) { func blockIDFromBlockMetadataTopic(topic string) iotago.BlockID { if strings.HasPrefix(topic, "block-metadata/") && !strings.HasSuffix(topic, "/referenced") { blockIDHex := strings.Replace(topic, "block-metadata/", "", 1) - blockID, err := iotago.BlockIDFromHexString(blockIDHex) + blockID, err := iotago.SlotIdentifierFromHexString(blockIDHex) if err != nil { return iotago.EmptyBlockID() } @@ -391,12 +365,10 @@ func transactionIDFromTransactionsIncludedBlockTopic(topic string) iotago.Transa transactionIDHex := strings.Replace(topic, "transactions/", "", 1) transactionIDHex = strings.Replace(transactionIDHex, "/included-block", "", 1) - decoded, err := iotago.DecodeHex(transactionIDHex) - if err != nil || len(decoded) != iotago.TransactionIDLength { + transactionID, err := iotago.IdentifierFromHexString(transactionIDHex) + if err != nil || len(transactionID) != iotago.TransactionIDLength { return emptyTransactionID } - transactionID := iotago.TransactionID{} - copy(transactionID[:], decoded) return transactionID } diff --git a/components/mqtt/server.go b/components/mqtt/server.go index 81d78f1..fc3c5a7 100644 --- a/components/mqtt/server.go +++ b/components/mqtt/server.go @@ -23,11 +23,10 @@ import ( ) const ( - grpcListenToBlocks = "INX.ListenToBlocks" - grpcListenToSolidBlocks = "INX.ListenToSolidBlocks" - grpcListenToReferencedBlocks = "INX.ListenToReferencedBlocks" - grpcListenToLedgerUpdates = "INX.ListenToLedgerUpdates" - grpcListenToTipScoreUpdates = "INX.ListenToTipScoreUpdates" + grpcListenToBlocks = "INX.ListenToBlocks" + grpcListenToAcceptedBlocks = "INX.ListenToAcceptedBlocks" + grpcListenToConfirmedBlocks = "INX.ListenToConfirmedBlocks" + grpcListenToLedgerUpdates = "INX.ListenToLedgerUpdates" ) const ( @@ -120,23 +119,22 @@ func (s *Server) Run(ctx context.Context) { } // register node bridge events - /* - unhookNodeBridgeEvents := lo.Batch( - s.NodeBridge.Events.LatestMilestoneChanged.Hook(func(ms *nodebridge.Milestone) { - s.PublishMilestoneOnTopic(topicMilestoneInfoLatest, ms) - }).Unhook, - s.NodeBridge.Events.ConfirmedMilestoneChanged.Hook(func(ms *nodebridge.Milestone) { - s.PublishMilestoneOnTopic(topicMilestoneInfoConfirmed, ms) - }).Unhook, - ) - */ + unhookNodeBridgeEvents := lo.Batch( + s.NodeBridge.Events.LatestCommittedSlotChanged.Hook(func(c *nodebridge.Commitment) { + s.PublishCommitmentInfoOnTopic(topicCommitmentInfoLatest, c.CommitmentID) + s.PublishRawCommitmentOnTopic(topicCommitments, c.Commitment) + }).Unhook, + s.NodeBridge.Events.LatestFinalizedSlotChanged.Hook(func(cID iotago.CommitmentID) { + s.PublishCommitmentInfoOnTopic(topicCommitmentInfoFinalized, cID) + }).Unhook, + ) s.LogInfo("Starting MQTT Broker ... done") <-ctx.Done() s.LogInfo("Stopping MQTT Broker ...") unhookBrokerEvents() - //unhookNodeBridgeEvents() + unhookNodeBridgeEvents() if s.brokerOptions.WebsocketEnabled { ctxUnregister, cancelUnregister := context.WithTimeout(context.Background(), 5*time.Second) @@ -168,24 +166,22 @@ func (s *Server) onClientDisconnect(clientID string) { func (s *Server) onSubscribeTopic(ctx context.Context, clientID string, topic string) { s.LogDebugf("%s subscribed to %s", clientID, topic) switch topic { - /* - case topicMilestoneInfoLatest: - go s.publishLatestMilestoneTopic() - case topicMilestoneInfoConfirmed: - go s.publishConfirmedMilestoneTopic() - */ - - case topicBlocks, topicBlocksTransaction, topicBlocksTransactionTaggedData, topicBlocksTaggedData: //, topicMilestones: - s.startListenIfNeeded(ctx, grpcListenToBlocks, s.listenToBlocks) - case topicTipScoreUpdates: - s.startListenIfNeeded(ctx, grpcListenToTipScoreUpdates, s.listenToTipScoreUpdates) + case topicCommitmentInfoLatest: + go s.publishLatestCommitmentInfoTopic() + case topicCommitmentInfoFinalized: + go s.publishFinalizedCommitmentInfoTopic() + case topicCommitments: + go s.publishLatestCommitmentTopic() + + case topicBlocks, topicBlocksTransaction, topicBlocksTransactionTaggedData, topicBlocksTaggedData: + s.startListenIfNeeded(ctx, grpcListenToBlocks, s.listenToBlocks) default: switch { case strings.HasPrefix(topic, "block-metadata/"): - s.startListenIfNeeded(ctx, grpcListenToSolidBlocks, s.listenToSolidBlocks) - s.startListenIfNeeded(ctx, grpcListenToReferencedBlocks, s.listenToReferencedBlocks) + s.startListenIfNeeded(ctx, grpcListenToAcceptedBlocks, s.listenToAcceptedBlocks) + s.startListenIfNeeded(ctx, grpcListenToConfirmedBlocks, s.listenToConfirmedBlocks) if blockID := blockIDFromBlockMetadataTopic(topic); !blockID.Empty() { go s.fetchAndPublishBlockMetadata(ctx, blockID) @@ -210,17 +206,14 @@ func (s *Server) onSubscribeTopic(ctx context.Context, clientID string, topic st func (s *Server) onUnsubscribeTopic(clientID string, topic string) { s.LogDebugf("%s unsubscribed from %s", clientID, topic) switch topic { - case topicBlocks, topicBlocksTransaction, topicBlocksTransactionTaggedData, topicBlocksTaggedData: //, topicMilestones: + case topicBlocks, topicBlocksTransaction, topicBlocksTransactionTaggedData, topicBlocksTaggedData: s.stopListenIfNeeded(grpcListenToBlocks) - case topicTipScoreUpdates: - s.stopListenIfNeeded(grpcListenToTipScoreUpdates) - default: switch { case strings.HasPrefix(topic, "block-metadata/"): - s.stopListenIfNeeded(grpcListenToSolidBlocks) - s.stopListenIfNeeded(grpcListenToReferencedBlocks) + s.stopListenIfNeeded(grpcListenToAcceptedBlocks) + s.stopListenIfNeeded(grpcListenToConfirmedBlocks) case strings.HasPrefix(topic, "blocks/") && strings.Contains(topic, "tagged-data"): s.stopListenIfNeeded(grpcListenToBlocks) @@ -318,35 +311,9 @@ func (s *Server) listenToBlocks(ctx context.Context) error { return nil } -func (s *Server) listenToSolidBlocks(ctx context.Context) error { - - stream, err := s.NodeBridge.Client().ListenToSolidBlocks(ctx, &inx.NoParams{}) - if err != nil { - return err - } - - for { - blockMetadata, err := stream.Recv() - if err != nil { - if errors.Is(err, io.EOF) || status.Code(err) == codes.Canceled { - break - } - - return err - } - if ctx.Err() != nil { - break - } - s.PublishBlockMetadata(blockMetadata) - } - - //nolint:nilerr // false positive - return nil -} - -func (s *Server) listenToReferencedBlocks(ctx context.Context) error { +func (s *Server) listenToAcceptedBlocks(ctx context.Context) error { - stream, err := s.NodeBridge.Client().ListenToReferencedBlocks(ctx, &inx.NoParams{}) + stream, err := s.NodeBridge.Client().ListenToAcceptedBlocks(ctx, &inx.NoParams{}) if err != nil { return err } @@ -370,9 +337,9 @@ func (s *Server) listenToReferencedBlocks(ctx context.Context) error { return nil } -func (s *Server) listenToTipScoreUpdates(ctx context.Context) error { +func (s *Server) listenToConfirmedBlocks(ctx context.Context) error { - stream, err := s.NodeBridge.Client().ListenToTipScoreUpdates(ctx, &inx.NoParams{}) + stream, err := s.NodeBridge.Client().ListenToConfirmedBlocks(ctx, &inx.NoParams{}) if err != nil { return err } @@ -397,13 +364,12 @@ func (s *Server) listenToTipScoreUpdates(ctx context.Context) error { } func (s *Server) listenToLedgerUpdates(ctx context.Context) error { - - stream, err := s.NodeBridge.Client().ListenToLedgerUpdates(ctx, &inx.MilestoneRangeRequest{}) + stream, err := s.NodeBridge.Client().ListenToLedgerUpdates(ctx, &inx.SlotRangeRequest{}) if err != nil { return err } - var latestIndex iotago.MilestoneIndex + var latestIndex iotago.SlotIndex for { payload, err := stream.Recv() if err != nil { @@ -416,12 +382,12 @@ func (s *Server) listenToLedgerUpdates(ctx context.Context) error { if ctx.Err() != nil { break } - switch op := payload.GetOp().(type) { + switch op := payload.GetOp().(type) { //nolint:nosnakecase // grpc uses underscores case *inx.LedgerUpdate_BatchMarker: if op.BatchMarker.GetMarkerType() == inx.LedgerUpdate_Marker_BEGIN { - latestIndex = op.BatchMarker.GetMilestoneIndex() + latestIndex = iotago.SlotIndex(op.BatchMarker.Slot) } //nolint:nosnakecase // grpc uses underscores @@ -438,28 +404,52 @@ func (s *Server) listenToLedgerUpdates(ctx context.Context) error { return nil } -/* -func (s *Server) publishLatestMilestoneTopic() { - s.LogDebug("publishLatestMilestoneTopic") - latest, err := s.NodeBridge.LatestMilestone() - if err == nil { - s.PublishMilestoneOnTopic(topicMilestoneInfoLatest, latest) +func (s *Server) publishLatestCommitmentTopic() { + s.LogDebug("publishLatestCommitmentTopic") + latest, err := s.NodeBridge.LatestCommitment() + if err != nil { + s.LogErrorf("failed to retrieve latest commitment: %v", err) + + return } + + s.PublishRawCommitmentOnTopic(topicCommitmentInfoLatest, latest) } -func (s *Server) publishConfirmedMilestoneTopic() { - s.LogDebug("publishConfirmedMilestoneTopic") - confirmed, err := s.NodeBridge.ConfirmedMilestone() - if err == nil { - s.PublishMilestoneOnTopic(topicMilestoneInfoConfirmed, confirmed) +func (s *Server) publishLatestCommitmentInfoTopic() { + s.LogDebug("publishLatestCommitmentInfoTopic") + latest, err := s.NodeBridge.LatestCommitment() + if err != nil { + s.LogErrorf("failed to retrieve latest commitment: %v", err) + + return } + + id, err := latest.ID() + if err != nil { + s.LogErrorf("failed to retrieve latest commitment: %v", err) + + return + } + + s.PublishCommitmentInfoOnTopic(topicCommitmentInfoLatest, id) + + s.LogDebug("publishLatestCommitmentTopic") + s.PublishRawCommitmentOnTopic(topicCommitmentInfoLatest, latest) +} + +func (s *Server) publishFinalizedCommitmentInfoTopic() { + s.LogDebug("publishFinalizedCommitmentInfoTopic") + finalized := s.NodeBridge.LatestFinalizedCommitmentID() + s.PublishCommitmentInfoOnTopic(topicCommitmentInfoFinalized, finalized) } -*/ func (s *Server) fetchAndPublishBlockMetadata(ctx context.Context, blockID iotago.BlockID) { s.LogDebugf("fetchAndPublishBlockMetadata: %s", blockID.ToHex()) resp, err := s.NodeBridge.Client().ReadBlockMetadata(ctx, inx.NewBlockId(blockID)) if err != nil { + s.LogErrorf("failed to retrieve block metadata %s: %v", blockID.ToHex(), err) + return } s.PublishBlockMetadata(resp) @@ -469,9 +459,11 @@ func (s *Server) fetchAndPublishOutput(ctx context.Context, outputID iotago.Outp s.LogDebugf("fetchAndPublishOutput: %s", outputID.ToHex()) resp, err := s.NodeBridge.Client().ReadOutput(ctx, inx.NewOutputId(outputID)) if err != nil { + s.LogErrorf("failed to retrieve output %s: %v", outputID.ToHex(), err) + return } - s.PublishOutput(ctx, resp.GetLedgerIndex(), resp.GetOutput(), false) + s.PublishOutput(ctx, resp.GetLatestCommitmentId().Unwrap().Index(), resp.GetOutput(), false) } func (s *Server) fetchAndPublishTransactionInclusion(ctx context.Context, transactionID iotago.TransactionID) { @@ -481,6 +473,8 @@ func (s *Server) fetchAndPublishTransactionInclusion(ctx context.Context, transa resp, err := s.NodeBridge.Client().ReadOutput(ctx, inx.NewOutputId(outputID)) if err != nil { + s.LogErrorf("failed to retrieve output of transaction %s :%v", transactionID.ToHex(), err) + return } @@ -494,6 +488,8 @@ func (s *Server) fetchAndPublishTransactionInclusionWithBlock(ctx context.Contex s.LogDebugf("fetchAndPublishTransactionInclusionWithBlock: %s", transactionID.ToHex()) resp, err := s.NodeBridge.Client().ReadBlock(ctx, inx.NewBlockId(blockID)) if err != nil { + s.LogErrorf("failed to retrieve block %s :%v", blockID.ToHex(), err) + return } s.PublishTransactionIncludedBlock(transactionID, resp) diff --git a/components/mqtt/topics.go b/components/mqtt/topics.go index fe7d1d8..5bb839b 100644 --- a/components/mqtt/topics.go +++ b/components/mqtt/topics.go @@ -12,9 +12,9 @@ const ( parameterCondition = "{condition}" parameterAddress = "{address}" - //topicMilestoneInfoLatest = "milestone-info/latest" // milestoneInfoPayload - //topicMilestoneInfoConfirmed = "milestone-info/confirmed" // milestoneInfoPayload - //topicMilestones = "milestones" // iotago.Milestone serialized => []bytes + topicCommitmentInfoLatest = "commitment-info/latest" // commitmentInfoPayload + topicCommitmentInfoFinalized = "commitment-info/finalized" // commitmentInfoPayload + topicCommitments = "commitments" // iotago.Commitment serialized => []bytes topicBlocks = "blocks" // iotago.Block serialized => []bytes topicBlocksTransaction = "blocks/transaction" // iotago.Block serialized => []bytes @@ -25,14 +25,13 @@ const ( topicTransactionsIncludedBlock = "transactions/" + parameterTransactionID + "/included-block" // iotago.Block serialized => []bytes - topicBlockMetadata = "block-metadata/" + parameterBlockID // blockMetadataPayload // renotify if "reattach" or "promote" changes? => add new INX event? - topicBlockMetadataReferenced = "block-metadata/referenced" // blockMetadataPayload - - topicTipScoreUpdates = "tip-score-updates" // blockMetadataPayload + topicBlockMetadata = "block-metadata/" + parameterBlockID // blockMetadataPayload + topicBlockMetadataAccepted = "block-metadata/accepted" // blockMetadataPayload + topicBlockMetadataConfirmed = "block-metadata/confirmed" // blockMetadataPayload topicOutputs = "outputs/" + parameterOutputID // outputPayload topicNFTOutputs = "outputs/nft/" + parameterNFTID // outputPayload - topicAliasOutputs = "outputs/alias/" + parameterAccountID // outputPayload + topicAccountOutputs = "outputs/account/" + parameterAccountID // outputPayload topicFoundryOutputs = "outputs/foundry/" + parameterFoundryID // outputPayload topicOutputsByUnlockConditionAndAddress = "outputs/unlock/" + parameterCondition + "/" + parameterAddress // outputPayload topicSpentOutputsByUnlockConditionAndAddress = "outputs/unlock/" + parameterCondition + "/" + parameterAddress + "/spent" // outputPayload diff --git a/components/mqtt/types.go b/components/mqtt/types.go index fa17015..8865fa0 100644 --- a/components/mqtt/types.go +++ b/components/mqtt/types.go @@ -6,39 +6,30 @@ import ( inx "github.com/iotaledger/inx/go" ) -// milestoneInfoPayload defines the payload of the milestone latest and confirmed topics. -type milestoneInfoPayload struct { - // The index of the milestone. - Index uint32 `json:"index"` - // The unix time of the milestone payload. - Time uint32 `json:"timestamp"` - // The ID of the milestone. - MilestoneID string `json:"milestoneId"` +// commitmentInfoPayload defines the payload of the commitment latest and confirmed topics. +type commitmentInfoPayload struct { + // The identifier of commitment. + CommitmentID string `json:"commitmentId"` + // The slot index of the commitment. + CommitmentIndex uint64 `json:"commitmentIndex"` } // blockMetadataPayload defines the payload of the block metadata topic. type blockMetadataPayload struct { // The hex encoded block ID of the block. BlockID string `json:"blockId"` - // The hex encoded block IDs of the parents the block references. - Parents []string `json:"parentBlockIds"` - // Whether the block is solid. - Solid bool `json:"isSolid"` - // The milestone index that references this block. - ReferencedByMilestoneIndex uint32 `json:"referencedByMilestoneIndex,omitempty"` - // If this block represents a milestone this is the milestone index - MilestoneIndex uint32 `json:"milestoneIndex,omitempty"` - // The ledger inclusion state of the transaction payload. - LedgerInclusionState string `json:"ledgerInclusionState,omitempty"` - // The reason why this block is marked as conflicting. + // The state of the block. //nolint:nosnakecase // grpc uses underscores - ConflictReason *inx.BlockMetadata_ConflictReason `json:"conflictReason,omitempty"` - // Whether the block should be promoted. - ShouldPromote *bool `json:"shouldPromote,omitempty"` - // Whether the block should be reattached. - ShouldReattach *bool `json:"shouldReattach,omitempty"` - // If this block is referenced by a milestone this returns the index of that block inside the milestone by whiteflag ordering. - WhiteFlagIndex *uint32 `json:"whiteFlagIndex,omitempty"` + BlockState inx.BlockMetadata_BlockState `json:"blockState,omitempty"` + // The reason why the block failed. + //nolint:nosnakecase // grpc uses underscores + BlockFailureReason inx.BlockMetadata_BlockFailureReason `json:"blockFailureReason,omitempty"` + // The state of the transaction. + //nolint:nosnakecase // grpc uses underscores + TxState inx.BlockMetadata_TransactionState `json:"txState,omitempty"` + // The reason why the transaction failed. + //nolint:nosnakecase // grpc uses underscores + TxFailureReason inx.BlockMetadata_TransactionFailureReason `json:"txFailureReason,omitempty"` } // outputMetadataPayload defines the metadata of an output. @@ -47,22 +38,22 @@ type outputMetadataPayload struct { BlockID string `json:"blockId"` // The hex encoded transaction id from which this output originated. TransactionID string `json:"transactionId"` - // The milestone index at which this output was spent. - MilestoneIndexSpent uint32 `json:"milestoneIndexSpent,omitempty"` - // The milestone timestamp this output was spent. - MilestoneTimestampSpent uint32 `json:"milestoneTimestampSpent,omitempty"` - // The transaction this output was spent with. - TransactionIDSpent string `json:"transactionIdSpent,omitempty"` - // The milestone index at which this output was booked into the ledger. - MilestoneIndexBooked uint32 `json:"milestoneIndexBooked"` - // The milestone timestamp this output was booked in the ledger. - MilestoneTimestampBooked uint32 `json:"milestoneTimestampBooked"` - // The ledger index at which this output was available at. - LedgerIndex uint32 `json:"ledgerIndex"` // The index of the output. OutputIndex uint16 `json:"outputIndex"` // Whether this output is spent. Spent bool `json:"isSpent"` + // The slot index at which the output was spent. + SpentSlot uint64 `json:"spentSlot,omitempty"` + // The commitment ID at which this output was spent. + CommitmentIDSpent string `json:"commitmentIdSpent,omitempty"` + // The transaction this output was spent with. + TransactionIDSpent string `json:"transactionIdSpent,omitempty"` + // The slot index at which the output was booked. + IncludedSlot uint64 `json:"includedSlot,omitempty"` + // The commitment ID at which this output was booked into the ledger. + IncludedCommitmentID string `json:"includedCommitmentId"` + // The current ledger index of the node. + LedgerIndex uint64 `json:"ledgerIndex"` } // outputPayload defines the payload of the output topics. diff --git a/go.mod b/go.mod index 0b8e20d..6dc0774 100644 --- a/go.mod +++ b/go.mod @@ -5,13 +5,12 @@ go 1.21 replace github.com/mochi-co/mqtt => github.com/alexsporn/mqtt v0.0.0-20220909140721-d60c438960a4 require ( - github.com/iotaledger/hive.go/app v0.0.0-20230829152614-7afc7a4d89b3 - github.com/iotaledger/hive.go/lo v0.0.0-20230829152614-7afc7a4d89b3 - github.com/iotaledger/hive.go/logger v0.0.0-20230829152614-7afc7a4d89b3 - github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230829152614-7afc7a4d89b3 - github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 - github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230829161228-3f4eb50a4d14 - github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230829160617-69b96c7c9f9b + github.com/iotaledger/hive.go/app v0.0.0-20230912172434-dc477e1f5140 + github.com/iotaledger/hive.go/lo v0.0.0-20230912172434-dc477e1f5140 + github.com/iotaledger/hive.go/logger v0.0.0-20230912172434-dc477e1f5140 + github.com/iotaledger/hive.go/web v0.0.0-20230912172434-dc477e1f5140 + github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230919065227-618931c246c5 + github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230918132810-48814818bff9 github.com/iotaledger/iota.go/v4 v4.0.0-20230829160021-46cad51e89d1 github.com/labstack/echo/v4 v4.11.1 github.com/mochi-co/mqtt v1.3.2 @@ -28,7 +27,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/eclipse/paho.mqtt.golang v1.4.3 // indirect - github.com/ethereum/go-ethereum v1.12.2 // indirect + github.com/ethereum/go-ethereum v1.13.1 // indirect github.com/fatih/structs v1.1.0 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect @@ -43,13 +42,14 @@ require ( github.com/hashicorp/go-version v1.6.0 // indirect github.com/holiman/uint256 v1.2.3 // indirect github.com/iancoleman/orderedmap v0.3.0 // indirect - github.com/iotaledger/hive.go/constraints v0.0.0-20230829152614-7afc7a4d89b3 // indirect - github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20230829152614-7afc7a4d89b3 // indirect - github.com/iotaledger/hive.go/crypto v0.0.0-20230829152614-7afc7a4d89b3 // indirect - github.com/iotaledger/hive.go/ds v0.0.0-20230829152614-7afc7a4d89b3 // indirect - github.com/iotaledger/hive.go/ierrors v0.0.0-20230829152614-7afc7a4d89b3 // indirect - github.com/iotaledger/hive.go/runtime v0.0.0-20230829152614-7afc7a4d89b3 // indirect - github.com/iotaledger/hive.go/stringify v0.0.0-20230829152614-7afc7a4d89b3 // indirect + github.com/iotaledger/hive.go/constraints v0.0.0-20230912172434-dc477e1f5140 // indirect + github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20230912172434-dc477e1f5140 // indirect + github.com/iotaledger/hive.go/crypto v0.0.0-20230912172434-dc477e1f5140 // indirect + github.com/iotaledger/hive.go/ds v0.0.0-20230912172434-dc477e1f5140 // indirect + github.com/iotaledger/hive.go/ierrors v0.0.0-20230912172434-dc477e1f5140 // indirect + github.com/iotaledger/hive.go/runtime v0.0.0-20230912172434-dc477e1f5140 // indirect + github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230912172434-dc477e1f5140 // indirect + github.com/iotaledger/hive.go/stringify v0.0.0-20230912172434-dc477e1f5140 // indirect github.com/knadh/koanf v1.5.0 // indirect github.com/kr/text v0.2.0 // indirect github.com/labstack/gommon v0.4.0 // indirect @@ -62,7 +62,7 @@ require ( github.com/mr-tron/base58 v1.2.0 // indirect github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect - github.com/petermattis/goid v0.0.0-20230808133559-b036b712a89b // indirect + github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.11.1 // indirect @@ -75,12 +75,12 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.25.0 // indirect - golang.org/x/crypto v0.12.0 // indirect - golang.org/x/net v0.14.0 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/crypto v0.13.0 // indirect + golang.org/x/net v0.15.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/protobuf v1.31.0 // indirect diff --git a/go.sum b/go.sum index f759a43..c41e9bf 100644 --- a/go.sum +++ b/go.sum @@ -26,8 +26,6 @@ github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+ github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -65,8 +63,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.12.2 h1:eGHJ4ij7oyVqUQn48LBz3B7pvQ8sV0wGJiIE6gDq/6Y= -github.com/ethereum/go-ethereum v1.12.2/go.mod h1:1cRAEV+rp/xX0zraSCBnu9Py3HQ+geRMj3HdR+k0wfI= +github.com/ethereum/go-ethereum v1.13.1 h1:UF2FaUKPIy5jeZk3X06ait3y2Q4wI+vJ1l7+UARp+60= +github.com/ethereum/go-ethereum v1.13.1/go.mod h1:xHQKzwkHSl0gnSjZK1mWa06XEdm9685AHqhRknOzqGQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= @@ -186,34 +184,34 @@ github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZm github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc= github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/iotaledger/hive.go/app v0.0.0-20230829152614-7afc7a4d89b3 h1:LeaRBaBnQmuu60yoAhdPJTv9w+YSsR323Fj1FTRCp2U= -github.com/iotaledger/hive.go/app v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:eiZgbcwTDZ7d9hEait2EAwAhixWhceW4MXmuVk2EcEw= -github.com/iotaledger/hive.go/constraints v0.0.0-20230829152614-7afc7a4d89b3 h1:n03Q+VxmhzDf072BM+73gU91lhiVXaQkQqo0hbKATwo= -github.com/iotaledger/hive.go/constraints v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s= -github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20230829152614-7afc7a4d89b3 h1:050Lk+UXtoHcAeXpQmf2Qjoxzk4FPVZnr/EmdmBhXsY= -github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20230829152614-7afc7a4d89b3/go.mod h1:jn3TNmiNRIiQm/rS4VD+7wFHI2+UXABHvCA3PbQxBqI= -github.com/iotaledger/hive.go/crypto v0.0.0-20230829152614-7afc7a4d89b3 h1:ljemi2tZRpZTuE53wzxB8lXrKMxNSDZkIggHn1kAGso= -github.com/iotaledger/hive.go/crypto v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:jP68na941d9uq7RtnA8aQ/FtIGRGz/51cU4uXrInQFU= -github.com/iotaledger/hive.go/ds v0.0.0-20230829152614-7afc7a4d89b3 h1:L5INqiENOYTIOwKhL2oXztLdsW7KettZTlGGnCN3Vns= -github.com/iotaledger/hive.go/ds v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:G4azdfQMwAkSU5lHZNRAdGfRoLHNHF4+DfCudWTTKF8= -github.com/iotaledger/hive.go/ierrors v0.0.0-20230829152614-7afc7a4d89b3 h1:pMz5HyIGsp9VRB2gwqOgaEDhmlqbdvgS8G3tDu9PkkQ= -github.com/iotaledger/hive.go/ierrors v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8= -github.com/iotaledger/hive.go/lo v0.0.0-20230829152614-7afc7a4d89b3 h1:ZAg8B2w9Je/m0+JN+S7qW8bELfX1I2BjpNjLhU4IpQU= -github.com/iotaledger/hive.go/lo v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:/LERu5vqcessCqr40Wxmbx4x0bbymsK7GuL+TK/ckKo= -github.com/iotaledger/hive.go/logger v0.0.0-20230829152614-7afc7a4d89b3 h1:JdCeAesfEyBSxx7nVp0zSL4rEGg2PtRtmL4qtxCPy7A= -github.com/iotaledger/hive.go/logger v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:sxqWRdZ1OOxwkxVczuGcW034Mpt2vFh5ebJHO++ZYeI= -github.com/iotaledger/hive.go/runtime v0.0.0-20230829152614-7afc7a4d89b3 h1:fwJri2b4PXJJ19/W0iGjZSpu/vwK4QAytJ7PwDPNjMM= -github.com/iotaledger/hive.go/runtime v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:fXVyQ1MAwxe/EmjAnG8WcQqbzGk9EW/FsJ/n16H/f/w= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230829152614-7afc7a4d89b3 h1:WpL8R5ltMAf8rgksjBgdO2FXDa3zKN2R29lZ2C6pJGU= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230829152614-7afc7a4d89b3/go.mod h1:IJgaaxbgKCsNat18jlJJEAxCY2oVYR3F30B+M4vJ89I= -github.com/iotaledger/hive.go/stringify v0.0.0-20230829152614-7afc7a4d89b3 h1:iJ+AkAO6hj5tzoOvEFIfm67eG8g5UvvGYP+6xMA98sg= -github.com/iotaledger/hive.go/stringify v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= -github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 h1:T9Wg7bMu8NWoVDyVoPXFVvVF4OE4ZNybs3pSObffn3U= -github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= -github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230829161228-3f4eb50a4d14 h1:BkDuQxUYo9aZ4XYuh8EbXWtZBdh7WvL7oh2unWNUFMo= -github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230829161228-3f4eb50a4d14/go.mod h1:ADBXzdHXTldP0NB2Vf+KbhDxkYciGRjzQVXT6Rdne1g= -github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230829160617-69b96c7c9f9b h1:EPB/+iWeSx/WgJlzaXl8yjinxuD8CCOdi2ZPMLeeMVY= -github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230829160617-69b96c7c9f9b/go.mod h1:B7gyJP6GshCSlEmY3CxEk5TZdsMs3UNz5U92hkFDdMs= +github.com/iotaledger/hive.go/app v0.0.0-20230912172434-dc477e1f5140 h1:B1XC0lIs+Yz79HgytXN/y9qVDsbhp6N424GRE9W0YqE= +github.com/iotaledger/hive.go/app v0.0.0-20230912172434-dc477e1f5140/go.mod h1:eiZgbcwTDZ7d9hEait2EAwAhixWhceW4MXmuVk2EcEw= +github.com/iotaledger/hive.go/constraints v0.0.0-20230912172434-dc477e1f5140 h1:/GDTCmFXcjDabg8HwfYL78BsN0cfGyd2onhRPWqDY20= +github.com/iotaledger/hive.go/constraints v0.0.0-20230912172434-dc477e1f5140/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s= +github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20230912172434-dc477e1f5140 h1:5vyVnYnC6j1kvRrWrcgq2oLaBYomFvFHUq7R/7mC4Ns= +github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20230912172434-dc477e1f5140/go.mod h1:jn3TNmiNRIiQm/rS4VD+7wFHI2+UXABHvCA3PbQxBqI= +github.com/iotaledger/hive.go/crypto v0.0.0-20230912172434-dc477e1f5140 h1:Rnor/2Bcy8luSAFO+HBRxoLzPtxJzpLZjRle4OSyjBA= +github.com/iotaledger/hive.go/crypto v0.0.0-20230912172434-dc477e1f5140/go.mod h1:jP68na941d9uq7RtnA8aQ/FtIGRGz/51cU4uXrInQFU= +github.com/iotaledger/hive.go/ds v0.0.0-20230912172434-dc477e1f5140 h1:HIYMX4qEA8IqM02eOI2ZYVyn01zhCCvJ6YpMzf+P/RM= +github.com/iotaledger/hive.go/ds v0.0.0-20230912172434-dc477e1f5140/go.mod h1:ZrqsjIJS2QCgGp7Ki+l4hWJQgzfBObUCemb5Upwlx18= +github.com/iotaledger/hive.go/ierrors v0.0.0-20230912172434-dc477e1f5140 h1:N4Qpd7vCNhuFQ+Wg8k9gInVpHjqLlNrEfEVgYuC/aDs= +github.com/iotaledger/hive.go/ierrors v0.0.0-20230912172434-dc477e1f5140/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8= +github.com/iotaledger/hive.go/lo v0.0.0-20230912172434-dc477e1f5140 h1:OhsjldIlatxskIfpEXDyodi1RpV9w9aXUEit9uVLBs8= +github.com/iotaledger/hive.go/lo v0.0.0-20230912172434-dc477e1f5140/go.mod h1:/LERu5vqcessCqr40Wxmbx4x0bbymsK7GuL+TK/ckKo= +github.com/iotaledger/hive.go/logger v0.0.0-20230912172434-dc477e1f5140 h1:qiCT8nQ1R67YUsp5Xmp0aK1/ggXehdu5VQ//9OYmCNQ= +github.com/iotaledger/hive.go/logger v0.0.0-20230912172434-dc477e1f5140/go.mod h1:sxqWRdZ1OOxwkxVczuGcW034Mpt2vFh5ebJHO++ZYeI= +github.com/iotaledger/hive.go/runtime v0.0.0-20230912172434-dc477e1f5140 h1:XxDIaa6kzWxoQ1Hd22AQJpqhV6ySXO5ysGeI7QjVDCg= +github.com/iotaledger/hive.go/runtime v0.0.0-20230912172434-dc477e1f5140/go.mod h1:fXVyQ1MAwxe/EmjAnG8WcQqbzGk9EW/FsJ/n16H/f/w= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230912172434-dc477e1f5140 h1:VFBVUIvYn78TjG8Rjxvovud9KZjfVaS4qmfqAaTzJdI= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230912172434-dc477e1f5140/go.mod h1:IJgaaxbgKCsNat18jlJJEAxCY2oVYR3F30B+M4vJ89I= +github.com/iotaledger/hive.go/stringify v0.0.0-20230912172434-dc477e1f5140 h1:ZGeNsbWhWzJMmomjX8UqZJ4493nZ7B4kN/wWUdnyltM= +github.com/iotaledger/hive.go/stringify v0.0.0-20230912172434-dc477e1f5140/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= +github.com/iotaledger/hive.go/web v0.0.0-20230912172434-dc477e1f5140 h1:VkeWPMafzf6DMMhi9Ef3ZI9LQNIwsKVmuY+Gv5JFRBc= +github.com/iotaledger/hive.go/web v0.0.0-20230912172434-dc477e1f5140/go.mod h1:RVlTa6pmKvwpQZAhVKFaU9vNA13iognNVA63zdE6i6U= +github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230919065227-618931c246c5 h1:7GuYO/SI/mZnXwv7QBYwn2NWjr4OF/Re+aSzmwx+CT0= +github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230919065227-618931c246c5/go.mod h1:luLlwdZT26MqUWBbiEOYxBwYLVrfz+65D+Tme84+Slw= +github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230918132810-48814818bff9 h1:BJb6+fF7zTyrbKQY3JG1Hiw6klONR4anwCFOcNdWu9o= +github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230918132810-48814818bff9/go.mod h1:B7gyJP6GshCSlEmY3CxEk5TZdsMs3UNz5U92hkFDdMs= github.com/iotaledger/iota.go/v4 v4.0.0-20230829160021-46cad51e89d1 h1:10hGLm62uQ2V2HgqCR6FV0fvgpXo5GqlL/SIJ/t4VmY= github.com/iotaledger/iota.go/v4 v4.0.0-20230829160021-46cad51e89d1/go.mod h1:MM3RLtTEsfT6Wh0EhpgmzVO/HM0/NOw+E7+mnGTnyA0= github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= @@ -303,8 +301,8 @@ github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAv github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230808133559-b036b712a89b h1:vab8deKC4QoIfm9fJM59iuNz1ELGsuLoYYpiF+pHiG8= -github.com/petermattis/goid v0.0.0-20230808133559-b036b712a89b/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA= +github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -394,15 +392,15 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -430,8 +428,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -484,8 +482,8 @@ golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -493,8 +491,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/tools/gendoc/go.mod b/tools/gendoc/go.mod index 8f33014..62d9202 100644 --- a/tools/gendoc/go.mod +++ b/tools/gendoc/go.mod @@ -44,8 +44,8 @@ require ( github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230829152614-7afc7a4d89b3 // indirect github.com/iotaledger/hive.go/stringify v0.0.0-20230829152614-7afc7a4d89b3 // indirect github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 // indirect - github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230829161228-3f4eb50a4d14 // indirect - github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230829160617-69b96c7c9f9b // indirect + github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230906120020-eb566076caf6 // indirect + github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230904035052-54cba612a7bb // indirect github.com/iotaledger/iota.go/v4 v4.0.0-20230829160021-46cad51e89d1 // indirect github.com/knadh/koanf v1.5.0 // indirect github.com/kr/text v0.2.0 // indirect diff --git a/tools/gendoc/go.sum b/tools/gendoc/go.sum index fb7951c..f24e3cd 100644 --- a/tools/gendoc/go.sum +++ b/tools/gendoc/go.sum @@ -212,10 +212,10 @@ github.com/iotaledger/hive.go/stringify v0.0.0-20230829152614-7afc7a4d89b3 h1:iJ github.com/iotaledger/hive.go/stringify v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 h1:T9Wg7bMu8NWoVDyVoPXFVvVF4OE4ZNybs3pSObffn3U= github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= -github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230829161228-3f4eb50a4d14 h1:BkDuQxUYo9aZ4XYuh8EbXWtZBdh7WvL7oh2unWNUFMo= -github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230829161228-3f4eb50a4d14/go.mod h1:ADBXzdHXTldP0NB2Vf+KbhDxkYciGRjzQVXT6Rdne1g= -github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230829160617-69b96c7c9f9b h1:EPB/+iWeSx/WgJlzaXl8yjinxuD8CCOdi2ZPMLeeMVY= -github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230829160617-69b96c7c9f9b/go.mod h1:B7gyJP6GshCSlEmY3CxEk5TZdsMs3UNz5U92hkFDdMs= +github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230906120020-eb566076caf6 h1:Sv517D+AVhRhI7GraXukobk0uFvawR+j+qRDf46btiI= +github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230906120020-eb566076caf6/go.mod h1:C1CCtRn+VbKwIcPYzqg4gZn64in15Ka82ZTYeCCgjqI= +github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230904035052-54cba612a7bb h1:sHaw5Nkdbz9t4SYqghN34ZSbvYHU/PhoYKBkkqpa0Kw= +github.com/iotaledger/inx/go v1.0.0-rc.2.0.20230904035052-54cba612a7bb/go.mod h1:B7gyJP6GshCSlEmY3CxEk5TZdsMs3UNz5U92hkFDdMs= github.com/iotaledger/iota.go/v4 v4.0.0-20230829160021-46cad51e89d1 h1:10hGLm62uQ2V2HgqCR6FV0fvgpXo5GqlL/SIJ/t4VmY= github.com/iotaledger/iota.go/v4 v4.0.0-20230829160021-46cad51e89d1/go.mod h1:MM3RLtTEsfT6Wh0EhpgmzVO/HM0/NOw+E7+mnGTnyA0= github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=