@blinklabs/dingo 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/{bin/dingo → dingo} +0 -0
- package/dingo.yaml.example +53 -0
- package/package.json +2 -2
- package/.github/CODEOWNERS +0 -5
- package/.github/assets/dingo-ate-my-blockchain.png +0 -0
- package/.github/assets/dingo-illustration.png +0 -0
- package/.github/assets/dingo-logo-with-text-horizontal.png +0 -0
- package/.github/assets/dingo-logo-with-text.png +0 -0
- package/.github/dependabot.yml +0 -19
- package/.github/dingo-20241210.png +0 -0
- package/.github/dingo.md +0 -56
- package/.github/workflows/ci-docker.yml +0 -36
- package/.github/workflows/conventional-commits.yml +0 -17
- package/.github/workflows/go-test.yml +0 -29
- package/.github/workflows/golangci-lint.yml +0 -23
- package/.github/workflows/publish.yml +0 -207
- package/Dockerfile +0 -25
- package/Makefile +0 -53
- package/blockfetch.go +0 -144
- package/chain/chain.go +0 -504
- package/chain/chain_test.go +0 -468
- package/chain/errors.go +0 -80
- package/chain/event.go +0 -33
- package/chain/iter.go +0 -64
- package/chainsync/chainsync.go +0 -97
- package/chainsync.go +0 -223
- package/cmd/dingo/load.go +0 -52
- package/cmd/dingo/main.go +0 -118
- package/cmd/dingo/serve.go +0 -49
- package/config/cardano/node.go +0 -192
- package/config/cardano/node_test.go +0 -85
- package/config/cardano/preview/README.md +0 -4
- package/config/cardano/preview/alonzo-genesis.json +0 -196
- package/config/cardano/preview/byron-genesis.json +0 -117
- package/config/cardano/preview/config.json +0 -114
- package/config/cardano/preview/conway-genesis.json +0 -297
- package/config/cardano/preview/shelley-genesis.json +0 -68
- package/config.go +0 -245
- package/connmanager/connection_manager.go +0 -105
- package/connmanager/connection_manager_test.go +0 -185
- package/connmanager/event.go +0 -37
- package/connmanager/listener.go +0 -140
- package/connmanager/outbound.go +0 -93
- package/connmanager/socket.go +0 -55
- package/connmanager/unix.go +0 -78
- package/custom-p2p-topology.json +0 -24
- package/custom-p2p-topology.json.backup +0 -24
- package/custom-p2p-topology.json.mainnet +0 -37
- package/database/account.go +0 -180
- package/database/block.go +0 -362
- package/database/certs.go +0 -53
- package/database/commit_timestamp.go +0 -77
- package/database/database.go +0 -118
- package/database/database_test.go +0 -62
- package/database/drep.go +0 -47
- package/database/epoch.go +0 -121
- package/database/immutable/chunk.go +0 -182
- package/database/immutable/immutable.go +0 -350
- package/database/immutable/immutable_test.go +0 -59
- package/database/immutable/primary.go +0 -106
- package/database/immutable/secondary.go +0 -103
- package/database/immutable/testdata/08893.chunk +0 -0
- package/database/immutable/testdata/08893.primary +0 -0
- package/database/immutable/testdata/08893.secondary +0 -0
- package/database/immutable/testdata/08894.chunk +0 -0
- package/database/immutable/testdata/08894.primary +0 -0
- package/database/immutable/testdata/08894.secondary +0 -0
- package/database/immutable/testdata/README.md +0 -4
- package/database/plugin/blob/badger/commit_timestamp.go +0 -50
- package/database/plugin/blob/badger/database.go +0 -152
- package/database/plugin/blob/badger/logger.go +0 -63
- package/database/plugin/blob/badger/metrics.go +0 -98
- package/database/plugin/blob/blob.go +0 -19
- package/database/plugin/blob/store.go +0 -40
- package/database/plugin/log.go +0 -27
- package/database/plugin/metadata/metadata.go +0 -19
- package/database/plugin/metadata/sqlite/account.go +0 -313
- package/database/plugin/metadata/sqlite/certs.go +0 -58
- package/database/plugin/metadata/sqlite/commit_timestamp.go +0 -68
- package/database/plugin/metadata/sqlite/database.go +0 -218
- package/database/plugin/metadata/sqlite/drep.go +0 -140
- package/database/plugin/metadata/sqlite/epoch.go +0 -120
- package/database/plugin/metadata/sqlite/models/account.go +0 -118
- package/database/plugin/metadata/sqlite/models/auth_committee_hot.go +0 -26
- package/database/plugin/metadata/sqlite/models/drep.go +0 -52
- package/database/plugin/metadata/sqlite/models/epoch.go +0 -31
- package/database/plugin/metadata/sqlite/models/models.go +0 -46
- package/database/plugin/metadata/sqlite/models/pool.go +0 -97
- package/database/plugin/metadata/sqlite/models/pparam_update.go +0 -27
- package/database/plugin/metadata/sqlite/models/pparams.go +0 -27
- package/database/plugin/metadata/sqlite/models/resign_committee_cold.go +0 -27
- package/database/plugin/metadata/sqlite/models/stake_vote_delegation.go +0 -27
- package/database/plugin/metadata/sqlite/models/tip.go +0 -26
- package/database/plugin/metadata/sqlite/models/update_drep.go +0 -27
- package/database/plugin/metadata/sqlite/models/utxo.go +0 -30
- package/database/plugin/metadata/sqlite/models/vote_delegation.go +0 -26
- package/database/plugin/metadata/sqlite/models/vote_registration_delegation.go +0 -15
- package/database/plugin/metadata/sqlite/pool.go +0 -240
- package/database/plugin/metadata/sqlite/pparams.go +0 -110
- package/database/plugin/metadata/sqlite/tip.go +0 -83
- package/database/plugin/metadata/sqlite/utxo.go +0 -292
- package/database/plugin/metadata/store.go +0 -198
- package/database/plugin/option.go +0 -190
- package/database/plugin/plugin.go +0 -20
- package/database/plugin/register.go +0 -118
- package/database/pparams.go +0 -145
- package/database/tip.go +0 -45
- package/database/txn.go +0 -147
- package/database/types/types.go +0 -74
- package/database/types/types_test.go +0 -83
- package/database/utxo.go +0 -263
- package/dist/artifacts.json +0 -1
- package/dist/checksums.txt +0 -22
- package/dist/config.yaml +0 -253
- package/dist/dingo-0.5.0-SNAPSHOT-d9431e4.tar.gz +0 -0
- package/dist/dingo-0.5.0-SNAPSHOT-d9431e4.tar.gz.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_arm64.tar.gz +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_arm64.tar.gz.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_x86_64.tar.gz +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_x86_64.tar.gz.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.apk +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.apk.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.deb +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.deb.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.rpm +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.rpm.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.apk +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.apk.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.deb +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.deb.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.rpm +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.rpm.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.tar.gz +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.tar.gz.sbom.json +0 -1
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_x86_64.tar.gz +0 -0
- package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_x86_64.tar.gz.sbom.json +0 -1
- package/dist/dingo_darwin_amd64_v1/dingo +0 -0
- package/dist/dingo_darwin_arm64_v8.0/dingo +0 -0
- package/dist/dingo_linux_amd64_v1/dingo +0 -0
- package/dist/dingo_linux_arm64_v8.0/dingo +0 -0
- package/dist/homebrew/dingo.rb +0 -51
- package/dist/metadata.json +0 -1
- package/event/event.go +0 -141
- package/event/event_test.go +0 -115
- package/event/metrics.go +0 -44
- package/go.mod +0 -98
- package/go.sum +0 -358
- package/internal/config/config.go +0 -145
- package/internal/config/config_test.go +0 -118
- package/internal/node/load.go +0 -149
- package/internal/node/node.go +0 -176
- package/internal/version/version.go +0 -33
- package/ledger/certs.go +0 -164
- package/ledger/chainsync.go +0 -504
- package/ledger/delta.go +0 -99
- package/ledger/eras/allegra.go +0 -154
- package/ledger/eras/alonzo.go +0 -156
- package/ledger/eras/babbage.go +0 -154
- package/ledger/eras/byron.go +0 -42
- package/ledger/eras/conway.go +0 -166
- package/ledger/eras/eras.go +0 -44
- package/ledger/eras/mary.go +0 -154
- package/ledger/eras/shelley.go +0 -164
- package/ledger/error.go +0 -19
- package/ledger/event.go +0 -50
- package/ledger/metrics.go +0 -53
- package/ledger/queries.go +0 -258
- package/ledger/slot.go +0 -127
- package/ledger/slot_test.go +0 -147
- package/ledger/state.go +0 -821
- package/ledger/view.go +0 -73
- package/localstatequery.go +0 -50
- package/localtxmonitor.go +0 -44
- package/localtxsubmission.go +0 -52
- package/mempool/consumer.go +0 -98
- package/mempool/mempool.go +0 -322
- package/node.go +0 -320
- package/peergov/event.go +0 -27
- package/peergov/peer.go +0 -67
- package/peergov/peergov.go +0 -290
- package/peersharing.go +0 -70
- package/preview-local-topology.json +0 -23
- package/topology/topology.go +0 -69
- package/topology/topology_test.go +0 -179
- package/tracing.go +0 -65
- package/txsubmission.go +0 -233
- package/utxorpc/query.go +0 -311
- package/utxorpc/submit.go +0 -395
- package/utxorpc/sync.go +0 -276
- package/utxorpc/utxorpc.go +0 -166
- package/utxorpc/watch.go +0 -310
package/utxorpc/watch.go
DELETED
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 Blink Labs Software
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
package utxorpc
|
|
16
|
-
|
|
17
|
-
import (
|
|
18
|
-
"bytes"
|
|
19
|
-
"context"
|
|
20
|
-
"errors"
|
|
21
|
-
"fmt"
|
|
22
|
-
|
|
23
|
-
"connectrpc.com/connect"
|
|
24
|
-
"github.com/blinklabs-io/gouroboros/ledger"
|
|
25
|
-
ocommon "github.com/blinklabs-io/gouroboros/protocol/common"
|
|
26
|
-
cardano "github.com/utxorpc/go-codegen/utxorpc/v1alpha/cardano"
|
|
27
|
-
watch "github.com/utxorpc/go-codegen/utxorpc/v1alpha/watch"
|
|
28
|
-
"github.com/utxorpc/go-codegen/utxorpc/v1alpha/watch/watchconnect"
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
// watchServiceServer implements the WatchService API
|
|
32
|
-
type watchServiceServer struct {
|
|
33
|
-
watchconnect.UnimplementedWatchServiceHandler
|
|
34
|
-
utxorpc *Utxorpc
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// WatchTx
|
|
38
|
-
func (s *watchServiceServer) WatchTx(
|
|
39
|
-
ctx context.Context,
|
|
40
|
-
req *connect.Request[watch.WatchTxRequest],
|
|
41
|
-
stream *connect.ServerStream[watch.WatchTxResponse],
|
|
42
|
-
) error {
|
|
43
|
-
predicate := req.Msg.GetPredicate() // Predicate
|
|
44
|
-
fieldMask := req.Msg.GetFieldMask()
|
|
45
|
-
intersect := req.Msg.GetIntersect() // []*BlockRef
|
|
46
|
-
|
|
47
|
-
s.utxorpc.config.Logger.Info(
|
|
48
|
-
fmt.Sprintf(
|
|
49
|
-
"Got a WatchTx request with predicate %v and fieldMask %v and intersect %v",
|
|
50
|
-
predicate,
|
|
51
|
-
fieldMask,
|
|
52
|
-
intersect,
|
|
53
|
-
),
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
// Get our points
|
|
57
|
-
var points []ocommon.Point
|
|
58
|
-
if len(intersect) > 0 {
|
|
59
|
-
for _, blockRef := range intersect {
|
|
60
|
-
blockIdx := blockRef.GetIndex()
|
|
61
|
-
blockHash := blockRef.GetHash()
|
|
62
|
-
slot := blockIdx
|
|
63
|
-
point := ocommon.NewPoint(slot, blockHash)
|
|
64
|
-
points = append(points, point)
|
|
65
|
-
}
|
|
66
|
-
} else {
|
|
67
|
-
point := s.utxorpc.config.LedgerState.Tip().Point
|
|
68
|
-
points = append(points, point)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Get our starting point matching our chain
|
|
72
|
-
point, err := s.utxorpc.config.LedgerState.GetIntersectPoint(points)
|
|
73
|
-
if err != nil {
|
|
74
|
-
s.utxorpc.config.Logger.Error(
|
|
75
|
-
"failed to get points",
|
|
76
|
-
"error", err,
|
|
77
|
-
)
|
|
78
|
-
return err
|
|
79
|
-
}
|
|
80
|
-
if point == nil {
|
|
81
|
-
s.utxorpc.config.Logger.Error(
|
|
82
|
-
"nil point returned",
|
|
83
|
-
)
|
|
84
|
-
return errors.New("nil point returned")
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Create our chain iterator
|
|
88
|
-
chainIter, err := s.utxorpc.config.LedgerState.GetChainFromPoint(
|
|
89
|
-
*point,
|
|
90
|
-
false,
|
|
91
|
-
)
|
|
92
|
-
if err != nil {
|
|
93
|
-
s.utxorpc.config.Logger.Error(
|
|
94
|
-
"failed to get chain iterator",
|
|
95
|
-
"error", err,
|
|
96
|
-
)
|
|
97
|
-
return err
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
for {
|
|
101
|
-
// Check for available block
|
|
102
|
-
next, err := chainIter.Next(true)
|
|
103
|
-
if err != nil {
|
|
104
|
-
s.utxorpc.config.Logger.Error(
|
|
105
|
-
"failed to iterate chain",
|
|
106
|
-
"error", err,
|
|
107
|
-
)
|
|
108
|
-
return err
|
|
109
|
-
}
|
|
110
|
-
if next != nil {
|
|
111
|
-
// Get ledger.Block from bytes
|
|
112
|
-
blockBytes := next.Block.Cbor[:]
|
|
113
|
-
blockType, err := ledger.DetermineBlockType(blockBytes)
|
|
114
|
-
if err != nil {
|
|
115
|
-
s.utxorpc.config.Logger.Error(
|
|
116
|
-
"failed to get block type",
|
|
117
|
-
"error", err,
|
|
118
|
-
)
|
|
119
|
-
return err
|
|
120
|
-
}
|
|
121
|
-
block, err := ledger.NewBlockFromCbor(blockType, blockBytes)
|
|
122
|
-
if err != nil {
|
|
123
|
-
s.utxorpc.config.Logger.Error(
|
|
124
|
-
"failed to get block",
|
|
125
|
-
"error", err,
|
|
126
|
-
)
|
|
127
|
-
return err
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Loop through transactions
|
|
131
|
-
for _, tx := range block.Transactions() {
|
|
132
|
-
var act watch.AnyChainTx
|
|
133
|
-
actc := watch.AnyChainTx_Cardano{
|
|
134
|
-
Cardano: tx.Utxorpc(),
|
|
135
|
-
}
|
|
136
|
-
act.Chain = &actc
|
|
137
|
-
resp := &watch.WatchTxResponse{
|
|
138
|
-
Action: &watch.WatchTxResponse_Apply{
|
|
139
|
-
Apply: &act,
|
|
140
|
-
},
|
|
141
|
-
}
|
|
142
|
-
if predicate == nil {
|
|
143
|
-
err := stream.Send(resp)
|
|
144
|
-
if err != nil {
|
|
145
|
-
return err
|
|
146
|
-
}
|
|
147
|
-
} else {
|
|
148
|
-
found := false
|
|
149
|
-
assetFound := false
|
|
150
|
-
|
|
151
|
-
// Check Predicate
|
|
152
|
-
addressPattern := predicate.GetMatch().GetCardano().GetHasAddress()
|
|
153
|
-
mintAssetPattern := predicate.GetMatch().GetCardano().GetMintsAsset()
|
|
154
|
-
moveAssetPattern := predicate.GetMatch().GetCardano().GetMovesAsset()
|
|
155
|
-
|
|
156
|
-
var addresses []ledger.Address
|
|
157
|
-
if addressPattern != nil {
|
|
158
|
-
// Handle Exact Address
|
|
159
|
-
exactAddressBytes := addressPattern.GetExactAddress()
|
|
160
|
-
if exactAddressBytes != nil {
|
|
161
|
-
var addr ledger.Address
|
|
162
|
-
err := addr.UnmarshalCBOR(exactAddressBytes)
|
|
163
|
-
if err != nil {
|
|
164
|
-
return fmt.Errorf(
|
|
165
|
-
"failed to decode exact address: %w",
|
|
166
|
-
err,
|
|
167
|
-
)
|
|
168
|
-
}
|
|
169
|
-
addresses = append(addresses, addr)
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// Handle Payment Part
|
|
173
|
-
paymentPart := addressPattern.GetPaymentPart()
|
|
174
|
-
if paymentPart != nil {
|
|
175
|
-
s.utxorpc.config.Logger.Info("PaymentPart is present, decoding...")
|
|
176
|
-
var paymentAddr ledger.Address
|
|
177
|
-
err := paymentAddr.UnmarshalCBOR(paymentPart)
|
|
178
|
-
if err != nil {
|
|
179
|
-
return fmt.Errorf("failed to decode payment part: %w", err)
|
|
180
|
-
}
|
|
181
|
-
addresses = append(addresses, paymentAddr)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Handle Delegation Part
|
|
185
|
-
delegationPart := addressPattern.GetDelegationPart()
|
|
186
|
-
if delegationPart != nil {
|
|
187
|
-
s.utxorpc.config.Logger.Info(
|
|
188
|
-
"DelegationPart is present, decoding...",
|
|
189
|
-
)
|
|
190
|
-
var delegationAddr ledger.Address
|
|
191
|
-
err := delegationAddr.UnmarshalCBOR(delegationPart)
|
|
192
|
-
if err != nil {
|
|
193
|
-
return fmt.Errorf(
|
|
194
|
-
"failed to decode delegation part: %w",
|
|
195
|
-
err,
|
|
196
|
-
)
|
|
197
|
-
}
|
|
198
|
-
addresses = append(addresses, delegationAddr)
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
var assetPatterns []*cardano.AssetPattern
|
|
203
|
-
if mintAssetPattern != nil {
|
|
204
|
-
assetPatterns = append(assetPatterns, mintAssetPattern)
|
|
205
|
-
}
|
|
206
|
-
if moveAssetPattern != nil {
|
|
207
|
-
assetPatterns = append(assetPatterns, moveAssetPattern)
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Convert everything to utxos (ledger.TransactionOutput) for matching
|
|
211
|
-
var utxos []ledger.TransactionOutput
|
|
212
|
-
utxos = append(tx.Outputs(), tx.CollateralReturn())
|
|
213
|
-
var inputs []ledger.TransactionInput
|
|
214
|
-
inputs = append(tx.Inputs(), tx.ReferenceInputs()...)
|
|
215
|
-
inputs = append(inputs, tx.Collateral()...)
|
|
216
|
-
for _, input := range inputs {
|
|
217
|
-
utxo, err := s.utxorpc.config.LedgerState.UtxoByRef(
|
|
218
|
-
input.Id().Bytes(),
|
|
219
|
-
input.Index(),
|
|
220
|
-
)
|
|
221
|
-
if err != nil {
|
|
222
|
-
return fmt.Errorf(
|
|
223
|
-
"failed to look up input: %w",
|
|
224
|
-
err,
|
|
225
|
-
)
|
|
226
|
-
}
|
|
227
|
-
ret, err := utxo.Decode() // ledger.TransactionOutput
|
|
228
|
-
if err != nil {
|
|
229
|
-
return err
|
|
230
|
-
}
|
|
231
|
-
if ret == nil {
|
|
232
|
-
return errors.New("decode returned empty utxo")
|
|
233
|
-
}
|
|
234
|
-
utxos = append(utxos, ret)
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// Check UTxOs for addresses
|
|
238
|
-
for _, address := range addresses {
|
|
239
|
-
if found {
|
|
240
|
-
break
|
|
241
|
-
}
|
|
242
|
-
if assetFound {
|
|
243
|
-
found = true
|
|
244
|
-
break
|
|
245
|
-
}
|
|
246
|
-
for _, utxo := range utxos {
|
|
247
|
-
if found {
|
|
248
|
-
break
|
|
249
|
-
}
|
|
250
|
-
if assetFound {
|
|
251
|
-
found = true
|
|
252
|
-
break
|
|
253
|
-
}
|
|
254
|
-
if utxo.Address().String() == address.String() {
|
|
255
|
-
if found {
|
|
256
|
-
break
|
|
257
|
-
}
|
|
258
|
-
if assetFound {
|
|
259
|
-
found = true
|
|
260
|
-
break
|
|
261
|
-
}
|
|
262
|
-
// We matched address, check assetPatterns
|
|
263
|
-
for _, assetPattern := range assetPatterns {
|
|
264
|
-
// Address found, no assetPattern
|
|
265
|
-
if assetPattern == nil {
|
|
266
|
-
found = true
|
|
267
|
-
break
|
|
268
|
-
}
|
|
269
|
-
// Filter on assetPattern
|
|
270
|
-
for _, policyId := range utxo.Assets().Policies() {
|
|
271
|
-
if assetFound {
|
|
272
|
-
found = true
|
|
273
|
-
break
|
|
274
|
-
}
|
|
275
|
-
if bytes.Equal(
|
|
276
|
-
policyId.Bytes(),
|
|
277
|
-
assetPattern.GetPolicyId(),
|
|
278
|
-
) {
|
|
279
|
-
for _, asset := range utxo.Assets().Assets(policyId) {
|
|
280
|
-
if bytes.Equal(asset, assetPattern.GetAssetName()) {
|
|
281
|
-
found = true
|
|
282
|
-
assetFound = true
|
|
283
|
-
break
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
if found {
|
|
290
|
-
break
|
|
291
|
-
}
|
|
292
|
-
// Asset not found; skip this UTxO
|
|
293
|
-
if !assetFound {
|
|
294
|
-
continue
|
|
295
|
-
}
|
|
296
|
-
found = true
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
if found {
|
|
301
|
-
err := stream.Send(resp)
|
|
302
|
-
if err != nil {
|
|
303
|
-
return err
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|