+8
.gitignore
+8
.gitignore
+22
Makefile
+22
Makefile
···
···
1
+
SHELL = /bin/bash
2
+
.SHELLFLAGS = -o pipefail -c
3
+
4
+
.PHONY: help
5
+
help: ## Print info about all commands
6
+
@echo "Commands:"
7
+
@echo
8
+
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[01;32m%-20s\033[0m %s\n", $$1, $$2}'
9
+
10
+
.PHONY: build
11
+
build: ## Build all executables
12
+
go build ./cmd/atr.go
13
+
14
+
install: ## Install all executables
15
+
go install ./cmd/atr.go
16
+
17
+
.PHONY: fmt
18
+
fmt: ## Format all go files
19
+
go fmt ./*.go
20
+
21
+
.PHONY: all
22
+
all: build
+9
README.md
+9
README.md
+300
cmd/atr.go
+300
cmd/atr.go
···
···
1
+
package main
2
+
3
+
import (
4
+
"context"
5
+
"errors"
6
+
"fmt"
7
+
"io"
8
+
"log"
9
+
"os"
10
+
"os/exec"
11
+
"path/filepath"
12
+
"regexp"
13
+
"strings"
14
+
15
+
"github.com/alecthomas/chroma"
16
+
"github.com/alecthomas/chroma/formatters"
17
+
"github.com/alecthomas/chroma/lexers"
18
+
"github.com/alecthomas/chroma/styles"
19
+
repo "github.com/atscan/atr/repo"
20
+
"github.com/ipfs/go-cid"
21
+
"github.com/itchyny/gojq"
22
+
jsoniter "github.com/json-iterator/go"
23
+
"github.com/klauspost/compress/zstd"
24
+
"github.com/urfave/cli/v2"
25
+
)
26
+
27
+
func main() {
28
+
29
+
app := &cli.App{
30
+
Name: "atr",
31
+
Usage: "AT Protocol IPLD-CAR Repository toolkit",
32
+
Flags: []cli.Flag{
33
+
&cli.StringFlag{
34
+
Name: "C",
35
+
Usage: "Working directory",
36
+
Value: ".",
37
+
},
38
+
},
39
+
Commands: []*cli.Command{
40
+
{
41
+
Name: "grep",
42
+
Aliases: []string{"g"},
43
+
Action: func(ctx *cli.Context) error {
44
+
return nil
45
+
},
46
+
},
47
+
{
48
+
Name: "show",
49
+
ArgsUsage: "[<target>]",
50
+
Flags: []cli.Flag{
51
+
&cli.StringFlag{
52
+
Name: "type",
53
+
Aliases: []string{"t"},
54
+
Usage: "Filter by item type",
55
+
Value: "",
56
+
},
57
+
&cli.StringFlag{
58
+
Name: "query",
59
+
Aliases: []string{"q"},
60
+
Usage: "Query results (jq syntax)",
61
+
Value: "",
62
+
},
63
+
&cli.BoolFlag{
64
+
Name: "raw",
65
+
Usage: "Do not use pretty print (faster)",
66
+
Value: false,
67
+
},
68
+
},
69
+
Action: func(ctx *cli.Context) error {
70
+
//q := ctx.Args().First()
71
+
q := ctx.String("query")
72
+
var query *gojq.Query
73
+
if q != "" {
74
+
tq, err := gojq.Parse(q)
75
+
if err != nil {
76
+
log.Fatalln("gojq parse error:", err)
77
+
//return err
78
+
} else {
79
+
query = tq
80
+
}
81
+
}
82
+
83
+
eo, err := exec.Command("defaults", "read", "-g", "AppleInterfaceStyle").Output()
84
+
if err != nil {
85
+
log.Fatal(err)
86
+
}
87
+
style := "paraiso-dark"
88
+
if strings.Index(string(eo), "Dark") != 0 {
89
+
style = "paraiso-light"
90
+
}
91
+
hg := highlight(style)
92
+
93
+
walk := func(list []RepoItem, err error) {
94
+
95
+
for _, e := range list {
96
+
tf := ctx.String("type")
97
+
if tf != "" {
98
+
if m := regexp.MustCompile(tf).Match([]byte(e.Path)); !m {
99
+
continue
100
+
}
101
+
}
102
+
var out interface{}
103
+
if q != "" {
104
+
json, err := jsoniter.Marshal(e.Body)
105
+
if err != nil {
106
+
log.Fatal("jsoniter error:", err)
107
+
continue
108
+
}
109
+
var pv interface{}
110
+
err = jsoniter.Unmarshal(json, &pv)
111
+
if err != nil {
112
+
log.Fatal("jsoniter error:", err)
113
+
continue
114
+
}
115
+
iter := query.Run(interface{}(pv))
116
+
for {
117
+
v, ok := iter.Next()
118
+
if !ok {
119
+
break
120
+
}
121
+
if err, ok := v.(error); ok {
122
+
log.Fatalln("gojq iter error:", err)
123
+
continue
124
+
}
125
+
if v == nil {
126
+
continue
127
+
}
128
+
out = v
129
+
}
130
+
} else {
131
+
out = e.Body
132
+
}
133
+
stat, _ := os.Stdout.Stat()
134
+
if ((stat.Mode() & os.ModeCharDevice) != 0) && ctx.Bool("raw") == false {
135
+
prettyPrint(out, hg)
136
+
} else {
137
+
print(out)
138
+
}
139
+
}
140
+
}
141
+
142
+
stat, _ := os.Stdin.Stat()
143
+
if (stat.Mode() & os.ModeCharDevice) == 0 {
144
+
// data is being piped to stdin
145
+
WalkStream(ctx, os.Stdin, walk)
146
+
} else {
147
+
//stdin is from a terminal
148
+
WalkFiles(ctx, walk)
149
+
}
150
+
return nil
151
+
},
152
+
},
153
+
},
154
+
}
155
+
156
+
if err := app.Run(os.Args); err != nil {
157
+
log.Fatal(err)
158
+
}
159
+
}
160
+
161
+
type RepoItem struct {
162
+
Cid cid.Cid
163
+
Path string
164
+
Body interface{}
165
+
}
166
+
167
+
func WalkFiles(ctx *cli.Context, cb func([]RepoItem, error)) error {
168
+
dir := ctx.Args().First()
169
+
if dir == "" {
170
+
dir = "."
171
+
}
172
+
info, err := os.Stat(dir)
173
+
if err != nil {
174
+
fmt.Println(err)
175
+
return err
176
+
}
177
+
//fmt.Println(info.IsDir())
178
+
179
+
if !info.IsDir() {
180
+
cb(Load(dir))
181
+
return nil
182
+
}
183
+
err = filepath.Walk(dir,
184
+
func(fn string, info os.FileInfo, err error) error {
185
+
if err != nil {
186
+
return err
187
+
}
188
+
cb(Load(fn))
189
+
return nil
190
+
})
191
+
if err != nil {
192
+
log.Println(err)
193
+
}
194
+
return nil
195
+
}
196
+
197
+
func WalkStream(ctx *cli.Context, input io.Reader, cb func([]RepoItem, error)) error {
198
+
arr, err := LoadFromStream(input)
199
+
if err != nil {
200
+
return nil
201
+
}
202
+
cb(arr, nil)
203
+
return nil
204
+
}
205
+
206
+
func Load(fn string) ([]RepoItem, error) {
207
+
var list []RepoItem
208
+
var err error
209
+
if strings.HasSuffix(fn, ".car.zst") {
210
+
list, err = LoadCompressed(fn)
211
+
} else if strings.HasSuffix(fn, ".car") {
212
+
list, err = LoadRaw(fn)
213
+
}
214
+
if err != nil {
215
+
log.Fatal("Cannot load: ", fn)
216
+
return list, errors.New("Cannot load")
217
+
}
218
+
return list, nil
219
+
}
220
+
221
+
func LoadRaw(fn string) ([]RepoItem, error) {
222
+
dat, err := os.Open(fn)
223
+
defer dat.Close()
224
+
225
+
if err != nil {
226
+
return nil, err
227
+
}
228
+
return LoadFromStream(dat)
229
+
}
230
+
231
+
func LoadCompressed(fn string) ([]RepoItem, error) {
232
+
dat, err := os.Open(fn)
233
+
defer dat.Close()
234
+
235
+
if err != nil {
236
+
return nil, err
237
+
}
238
+
decoder, _ := zstd.NewReader(dat)
239
+
return LoadFromStream(decoder)
240
+
}
241
+
242
+
func LoadFromStream(input io.Reader) ([]RepoItem, error) {
243
+
rctx := context.TODO()
244
+
r, err := repo.ReadRepoFromCar(rctx, input)
245
+
if err != nil {
246
+
return nil, err
247
+
}
248
+
var out []RepoItem
249
+
if err := r.ForEach(rctx, "", func(k string, v cid.Cid) error {
250
+
_, rec, err := r.GetRecord(rctx, k)
251
+
if err != nil {
252
+
log.Println("Cannot get record:", v.String())
253
+
}
254
+
out = append(out, RepoItem{Cid: v, Path: k, Body: rec})
255
+
return nil
256
+
}); err != nil {
257
+
return nil, err
258
+
}
259
+
return out, nil
260
+
}
261
+
262
+
func print(v interface{}) error {
263
+
json, err := jsoniter.Marshal(v)
264
+
if err != nil {
265
+
log.Fatal(err)
266
+
}
267
+
fmt.Println(string(json))
268
+
return nil
269
+
}
270
+
271
+
func prettyPrint(v interface{}, hg func(io.Writer, string)) error {
272
+
json, err := jsoniter.MarshalIndent(v, "", " ")
273
+
if err != nil {
274
+
log.Fatal(err)
275
+
}
276
+
hg(os.Stdout, string(json))
277
+
fmt.Println("")
278
+
return nil
279
+
}
280
+
281
+
func highlight(style string) func(w io.Writer, source string) {
282
+
// Determine lexer.
283
+
l := lexers.Get("json")
284
+
l = chroma.Coalesce(l)
285
+
286
+
// Determine formatter.
287
+
f := formatters.Get("terminal")
288
+
if f == nil {
289
+
f = formatters.Fallback
290
+
}
291
+
// Determine style.
292
+
s := styles.Get(style)
293
+
if s == nil {
294
+
s = styles.Fallback
295
+
}
296
+
return func(w io.Writer, source string) {
297
+
it, _ := l.Tokenise(nil, source)
298
+
f.Format(w, s, it)
299
+
}
300
+
}
+68
go.mod
+68
go.mod
···
···
1
+
module github.com/atscan/atr
2
+
3
+
go 1.20
4
+
5
+
require (
6
+
github.com/alecthomas/chroma v0.10.0
7
+
github.com/bluesky-social/indigo v0.0.0-20230714174244-57d75d8cfc65
8
+
github.com/fxamacker/cbor/v2 v2.4.0
9
+
github.com/ipfs/go-cid v0.4.1
10
+
github.com/ipfs/go-datastore v0.6.0
11
+
github.com/ipfs/go-ipfs-blockstore v1.3.0
12
+
github.com/ipfs/go-ipld-cbor v0.0.7-0.20230126201833-a73d038d90bc
13
+
github.com/ipld/go-car/v2 v2.10.1
14
+
github.com/itchyny/gojq v0.12.13
15
+
github.com/json-iterator/go v1.1.12
16
+
github.com/klauspost/compress v1.16.7
17
+
github.com/urfave/cli/v2 v2.25.7
18
+
github.com/whyrusleeping/cbor-gen v0.0.0-20230331140348-1f892b517e70
19
+
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
20
+
)
21
+
22
+
require (
23
+
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
24
+
github.com/dlclark/regexp2 v1.4.0 // indirect
25
+
github.com/gogo/protobuf v1.3.2 // indirect
26
+
github.com/google/uuid v1.3.0 // indirect
27
+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
28
+
github.com/hashicorp/go-retryablehttp v0.7.2 // indirect
29
+
github.com/hashicorp/golang-lru v0.5.4 // indirect
30
+
github.com/ipfs/bbloom v0.0.4 // indirect
31
+
github.com/ipfs/go-block-format v0.1.2 // indirect
32
+
github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect
33
+
github.com/ipfs/go-ipfs-util v0.0.2 // indirect
34
+
github.com/ipfs/go-ipld-format v0.5.0 // indirect
35
+
github.com/ipfs/go-log v1.0.5 // indirect
36
+
github.com/ipfs/go-log/v2 v2.5.1 // indirect
37
+
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
38
+
github.com/ipld/go-ipld-prime v0.20.0 // indirect
39
+
github.com/itchyny/timefmt-go v0.1.5 // indirect
40
+
github.com/jbenet/goprocess v0.1.4 // indirect
41
+
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
42
+
github.com/mattn/go-isatty v0.0.19 // indirect
43
+
github.com/minio/sha256-simd v1.0.0 // indirect
44
+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
45
+
github.com/modern-go/reflect2 v1.0.2 // indirect
46
+
github.com/mr-tron/base58 v1.2.0 // indirect
47
+
github.com/multiformats/go-base32 v0.1.0 // indirect
48
+
github.com/multiformats/go-base36 v0.2.0 // indirect
49
+
github.com/multiformats/go-multibase v0.2.0 // indirect
50
+
github.com/multiformats/go-multicodec v0.9.0 // indirect
51
+
github.com/multiformats/go-multihash v0.2.3 // indirect
52
+
github.com/multiformats/go-varint v0.0.7 // indirect
53
+
github.com/opentracing/opentracing-go v1.2.0 // indirect
54
+
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect
55
+
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f // indirect
56
+
github.com/russross/blackfriday/v2 v2.1.0 // indirect
57
+
github.com/spaolacci/murmur3 v1.1.0 // indirect
58
+
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
59
+
github.com/x448/float16 v0.8.4 // indirect
60
+
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
61
+
go.uber.org/atomic v1.10.0 // indirect
62
+
go.uber.org/multierr v1.11.0 // indirect
63
+
go.uber.org/zap v1.24.0 // indirect
64
+
golang.org/x/crypto v0.7.0 // indirect
65
+
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
66
+
golang.org/x/sys v0.10.0 // indirect
67
+
lukechampine.com/blake3 v1.1.7 // indirect
68
+
)
+267
go.sum
+267
go.sum
···
···
1
+
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
2
+
github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
3
+
github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
4
+
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
5
+
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
6
+
github.com/bluesky-social/indigo v0.0.0-20230714174244-57d75d8cfc65 h1:0z5rF7oA9eqqoAFoiHTfioBK8U4hzMmyGMoajEqJVFE=
7
+
github.com/bluesky-social/indigo v0.0.0-20230714174244-57d75d8cfc65/go.mod h1:oDI5NiD0XzShv5VITWyUJNP3pSh4prTDEzhKbkdKORA=
8
+
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
9
+
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
10
+
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
11
+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
12
+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
13
+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
14
+
github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
15
+
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
16
+
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
17
+
github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88=
18
+
github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo=
19
+
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
20
+
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
21
+
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
22
+
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
23
+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
24
+
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
25
+
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
26
+
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
27
+
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
28
+
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
29
+
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
30
+
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
31
+
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
32
+
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
33
+
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
34
+
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
35
+
github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0=
36
+
github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
37
+
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
38
+
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
39
+
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
40
+
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
41
+
github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
42
+
github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo=
43
+
github.com/ipfs/go-block-format v0.1.2/go.mod h1:mACVcrxarQKstUU3Yf/RdwbC4DzPV6++rO2a3d+a/KE=
44
+
github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog=
45
+
github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I=
46
+
github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
47
+
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
48
+
github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
49
+
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
50
+
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
51
+
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
52
+
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
53
+
github.com/ipfs/go-ipfs-blockstore v1.3.0 h1:m2EXaWgwTzAfsmt5UdJ7Is6l4gJcaM/A12XwJyvYvMM=
54
+
github.com/ipfs/go-ipfs-blockstore v1.3.0/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE=
55
+
github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8=
56
+
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
57
+
github.com/ipfs/go-ipfs-ds-help v1.1.0 h1:yLE2w9RAsl31LtfMt91tRZcrx+e61O5mDxFRR994w4Q=
58
+
github.com/ipfs/go-ipfs-ds-help v1.1.0/go.mod h1:YR5+6EaebOhfcqVCyqemItCLthrpVNot+rsOU/5IatU=
59
+
github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8=
60
+
github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ=
61
+
github.com/ipfs/go-ipld-cbor v0.0.7-0.20230126201833-a73d038d90bc h1:eUEo764smNy0EVRuMTSmirmuh552Mf2aBjfpDcLnDa8=
62
+
github.com/ipfs/go-ipld-cbor v0.0.7-0.20230126201833-a73d038d90bc/go.mod h1:X7SgEIwC4COC5OWfcepZBWafO5kA1Rmt9ZsLLbhihQk=
63
+
github.com/ipfs/go-ipld-format v0.5.0 h1:WyEle9K96MSrvr47zZHKKcDxJ/vlpET6PSiQsAFO+Ds=
64
+
github.com/ipfs/go-ipld-format v0.5.0/go.mod h1:ImdZqJQaEouMjCvqCe0ORUS+uoBmf7Hf+EO/jh+nk3M=
65
+
github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
66
+
github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo=
67
+
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
68
+
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
69
+
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
70
+
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
71
+
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
72
+
github.com/ipfs/go-unixfsnode v1.7.1 h1:RRxO2b6CSr5UQ/kxnGzaChTjp5LWTdf3Y4n8ANZgB/s=
73
+
github.com/ipld/go-car/v2 v2.10.1 h1:MRDqkONNW9WRhB79u+Z3U5b+NoN7lYA5B8n8qI3+BoI=
74
+
github.com/ipld/go-car/v2 v2.10.1/go.mod h1:sQEkXVM3csejlb1kCCb+vQ/pWBKX9QtvsrysMQjOgOg=
75
+
github.com/ipld/go-codec-dagpb v1.6.0 h1:9nYazfyu9B1p3NAgfVdpRco3Fs2nFC72DqVsMj6rOcc=
76
+
github.com/ipld/go-ipld-prime v0.20.0 h1:Ud3VwE9ClxpO2LkCYP7vWPc0Fo+dYdYzgxUJZ3uRG4g=
77
+
github.com/ipld/go-ipld-prime v0.20.0/go.mod h1:PzqZ/ZR981eKbgdr3y2DJYeD/8bgMawdGVlJDE8kK+M=
78
+
github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20230102063945-1a409dc236dd h1:gMlw/MhNr2Wtp5RwGdsW23cs+yCuj9k2ON7i9MiJlRo=
79
+
github.com/itchyny/gojq v0.12.13 h1:IxyYlHYIlspQHHTE0f3cJF0NKDMfajxViuhBLnHd/QU=
80
+
github.com/itchyny/gojq v0.12.13/go.mod h1:JzwzAqenfhrPUuwbmEz3nu3JQmFLlQTQMUcOdnu/Sf4=
81
+
github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE=
82
+
github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8=
83
+
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
84
+
github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o=
85
+
github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
86
+
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
87
+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
88
+
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
89
+
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
90
+
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
91
+
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
92
+
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
93
+
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
94
+
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
95
+
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
96
+
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
97
+
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
98
+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
99
+
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
100
+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
101
+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
102
+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
103
+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
104
+
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
105
+
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
106
+
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
107
+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
108
+
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
109
+
github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
110
+
github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
111
+
github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
112
+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
113
+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
114
+
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
115
+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
116
+
github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
117
+
github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
118
+
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
119
+
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
120
+
github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA=
121
+
github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
122
+
github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
123
+
github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM=
124
+
github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
125
+
github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
126
+
github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs=
127
+
github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc=
128
+
github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
129
+
github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
130
+
github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg=
131
+
github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k=
132
+
github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc=
133
+
github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
134
+
github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
135
+
github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
136
+
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
137
+
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
138
+
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
139
+
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
140
+
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk=
141
+
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw=
142
+
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
143
+
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
144
+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
145
+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
146
+
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f h1:VXTQfuJj9vKR4TCkEuWIckKvdHFeJH/huIFJ9/cXOB0=
147
+
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw=
148
+
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
149
+
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
150
+
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
151
+
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
152
+
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
153
+
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
154
+
github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs=
155
+
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
156
+
github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg=
157
+
github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM=
158
+
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
159
+
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
160
+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
161
+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
162
+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
163
+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
164
+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
165
+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
166
+
github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
167
+
github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs=
168
+
github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
169
+
github.com/warpfork/go-testmark v0.11.0 h1:J6LnV8KpceDvo7spaNU4+DauH2n1x+6RaO2rJrmpQ9U=
170
+
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ=
171
+
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
172
+
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0=
173
+
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ=
174
+
github.com/whyrusleeping/cbor-gen v0.0.0-20230331140348-1f892b517e70 h1:iNBzUKTsJc9RqStEVX2VYgVHATTU39IuB7g0e8OPWXU=
175
+
github.com/whyrusleeping/cbor-gen v0.0.0-20230331140348-1f892b517e70/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
176
+
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E=
177
+
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
178
+
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
179
+
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
180
+
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
181
+
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
182
+
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
183
+
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
184
+
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
185
+
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
186
+
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
187
+
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
188
+
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
189
+
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
190
+
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
191
+
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
192
+
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
193
+
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
194
+
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
195
+
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
196
+
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
197
+
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
198
+
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
199
+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
200
+
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
201
+
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
202
+
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
203
+
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
204
+
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
205
+
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
206
+
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
207
+
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
208
+
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
209
+
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
210
+
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
211
+
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
212
+
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
213
+
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
214
+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
215
+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
216
+
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
217
+
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
218
+
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
219
+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
220
+
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
221
+
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
222
+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
223
+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
224
+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
225
+
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
226
+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
227
+
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
228
+
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
229
+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
230
+
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
231
+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
232
+
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
233
+
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
234
+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
235
+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
236
+
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
237
+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
238
+
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
239
+
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
240
+
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
241
+
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
242
+
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
243
+
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
244
+
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
245
+
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
246
+
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
247
+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
248
+
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
249
+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
250
+
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
251
+
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
252
+
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
253
+
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
254
+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
255
+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
256
+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
257
+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
258
+
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
259
+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
260
+
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
261
+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
262
+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
263
+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
264
+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
265
+
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
266
+
lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0=
267
+
lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA=
+500
repo/cbor_gen.go
+500
repo/cbor_gen.go
···
···
1
+
// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT.
2
+
3
+
package repo
4
+
5
+
import (
6
+
"fmt"
7
+
"io"
8
+
"math"
9
+
"sort"
10
+
11
+
cid "github.com/ipfs/go-cid"
12
+
cbg "github.com/whyrusleeping/cbor-gen"
13
+
xerrors "golang.org/x/xerrors"
14
+
)
15
+
16
+
var _ = xerrors.Errorf
17
+
var _ = cid.Undef
18
+
var _ = math.E
19
+
var _ = sort.Sort
20
+
21
+
func (t *SignedCommit) MarshalCBOR(w io.Writer) error {
22
+
if t == nil {
23
+
_, err := w.Write(cbg.CborNull)
24
+
return err
25
+
}
26
+
27
+
cw := cbg.NewCborWriter(w)
28
+
29
+
if _, err := cw.Write([]byte{165}); err != nil {
30
+
return err
31
+
}
32
+
33
+
// t.Did (string) (string)
34
+
if len("did") > cbg.MaxLength {
35
+
return xerrors.Errorf("Value in field \"did\" was too long")
36
+
}
37
+
38
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("did"))); err != nil {
39
+
return err
40
+
}
41
+
if _, err := io.WriteString(w, string("did")); err != nil {
42
+
return err
43
+
}
44
+
45
+
if len(t.Did) > cbg.MaxLength {
46
+
return xerrors.Errorf("Value in field t.Did was too long")
47
+
}
48
+
49
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Did))); err != nil {
50
+
return err
51
+
}
52
+
if _, err := io.WriteString(w, string(t.Did)); err != nil {
53
+
return err
54
+
}
55
+
56
+
// t.Sig ([]uint8) (slice)
57
+
if len("sig") > cbg.MaxLength {
58
+
return xerrors.Errorf("Value in field \"sig\" was too long")
59
+
}
60
+
61
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("sig"))); err != nil {
62
+
return err
63
+
}
64
+
if _, err := io.WriteString(w, string("sig")); err != nil {
65
+
return err
66
+
}
67
+
68
+
if len(t.Sig) > cbg.ByteArrayMaxLen {
69
+
return xerrors.Errorf("Byte array in field t.Sig was too long")
70
+
}
71
+
72
+
if err := cw.WriteMajorTypeHeader(cbg.MajByteString, uint64(len(t.Sig))); err != nil {
73
+
return err
74
+
}
75
+
76
+
if _, err := cw.Write(t.Sig[:]); err != nil {
77
+
return err
78
+
}
79
+
80
+
// t.Data (cid.Cid) (struct)
81
+
if len("data") > cbg.MaxLength {
82
+
return xerrors.Errorf("Value in field \"data\" was too long")
83
+
}
84
+
85
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("data"))); err != nil {
86
+
return err
87
+
}
88
+
if _, err := io.WriteString(w, string("data")); err != nil {
89
+
return err
90
+
}
91
+
92
+
if err := cbg.WriteCid(cw, t.Data); err != nil {
93
+
return xerrors.Errorf("failed to write cid field t.Data: %w", err)
94
+
}
95
+
96
+
// t.Prev (cid.Cid) (struct)
97
+
if len("prev") > cbg.MaxLength {
98
+
return xerrors.Errorf("Value in field \"prev\" was too long")
99
+
}
100
+
101
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("prev"))); err != nil {
102
+
return err
103
+
}
104
+
if _, err := io.WriteString(w, string("prev")); err != nil {
105
+
return err
106
+
}
107
+
108
+
if t.Prev == nil {
109
+
if _, err := cw.Write(cbg.CborNull); err != nil {
110
+
return err
111
+
}
112
+
} else {
113
+
if err := cbg.WriteCid(cw, *t.Prev); err != nil {
114
+
return xerrors.Errorf("failed to write cid field t.Prev: %w", err)
115
+
}
116
+
}
117
+
118
+
// t.Version (int64) (int64)
119
+
if len("version") > cbg.MaxLength {
120
+
return xerrors.Errorf("Value in field \"version\" was too long")
121
+
}
122
+
123
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("version"))); err != nil {
124
+
return err
125
+
}
126
+
if _, err := io.WriteString(w, string("version")); err != nil {
127
+
return err
128
+
}
129
+
130
+
if t.Version >= 0 {
131
+
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Version)); err != nil {
132
+
return err
133
+
}
134
+
} else {
135
+
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Version-1)); err != nil {
136
+
return err
137
+
}
138
+
}
139
+
return nil
140
+
}
141
+
142
+
func (t *SignedCommit) UnmarshalCBOR(r io.Reader) (err error) {
143
+
*t = SignedCommit{}
144
+
145
+
cr := cbg.NewCborReader(r)
146
+
147
+
maj, extra, err := cr.ReadHeader()
148
+
if err != nil {
149
+
return err
150
+
}
151
+
defer func() {
152
+
if err == io.EOF {
153
+
err = io.ErrUnexpectedEOF
154
+
}
155
+
}()
156
+
157
+
if maj != cbg.MajMap {
158
+
return fmt.Errorf("cbor input should be of type map")
159
+
}
160
+
161
+
if extra > cbg.MaxLength {
162
+
return fmt.Errorf("SignedCommit: map struct too large (%d)", extra)
163
+
}
164
+
165
+
var name string
166
+
n := extra
167
+
168
+
for i := uint64(0); i < n; i++ {
169
+
170
+
{
171
+
sval, err := cbg.ReadString(cr)
172
+
if err != nil {
173
+
return err
174
+
}
175
+
176
+
name = string(sval)
177
+
}
178
+
179
+
switch name {
180
+
// t.Did (string) (string)
181
+
case "did":
182
+
183
+
{
184
+
sval, err := cbg.ReadString(cr)
185
+
if err != nil {
186
+
return err
187
+
}
188
+
189
+
t.Did = string(sval)
190
+
}
191
+
// t.Sig ([]uint8) (slice)
192
+
case "sig":
193
+
194
+
maj, extra, err = cr.ReadHeader()
195
+
if err != nil {
196
+
return err
197
+
}
198
+
199
+
if extra > cbg.ByteArrayMaxLen {
200
+
return fmt.Errorf("t.Sig: byte array too large (%d)", extra)
201
+
}
202
+
if maj != cbg.MajByteString {
203
+
return fmt.Errorf("expected byte array")
204
+
}
205
+
206
+
if extra > 0 {
207
+
t.Sig = make([]uint8, extra)
208
+
}
209
+
210
+
if _, err := io.ReadFull(cr, t.Sig[:]); err != nil {
211
+
return err
212
+
}
213
+
// t.Data (cid.Cid) (struct)
214
+
case "data":
215
+
216
+
{
217
+
218
+
c, err := cbg.ReadCid(cr)
219
+
if err != nil {
220
+
return xerrors.Errorf("failed to read cid field t.Data: %w", err)
221
+
}
222
+
223
+
t.Data = c
224
+
225
+
}
226
+
// t.Prev (cid.Cid) (struct)
227
+
case "prev":
228
+
229
+
{
230
+
231
+
b, err := cr.ReadByte()
232
+
if err != nil {
233
+
return err
234
+
}
235
+
if b != cbg.CborNull[0] {
236
+
if err := cr.UnreadByte(); err != nil {
237
+
return err
238
+
}
239
+
240
+
c, err := cbg.ReadCid(cr)
241
+
if err != nil {
242
+
return xerrors.Errorf("failed to read cid field t.Prev: %w", err)
243
+
}
244
+
245
+
t.Prev = &c
246
+
}
247
+
248
+
}
249
+
// t.Version (int64) (int64)
250
+
case "version":
251
+
{
252
+
maj, extra, err := cr.ReadHeader()
253
+
var extraI int64
254
+
if err != nil {
255
+
return err
256
+
}
257
+
switch maj {
258
+
case cbg.MajUnsignedInt:
259
+
extraI = int64(extra)
260
+
if extraI < 0 {
261
+
return fmt.Errorf("int64 positive overflow")
262
+
}
263
+
case cbg.MajNegativeInt:
264
+
extraI = int64(extra)
265
+
if extraI < 0 {
266
+
return fmt.Errorf("int64 negative overflow")
267
+
}
268
+
extraI = -1 - extraI
269
+
default:
270
+
return fmt.Errorf("wrong type for int64 field: %d", maj)
271
+
}
272
+
273
+
t.Version = int64(extraI)
274
+
}
275
+
276
+
default:
277
+
// Field doesn't exist on this type, so ignore it
278
+
cbg.ScanForLinks(r, func(cid.Cid) {})
279
+
}
280
+
}
281
+
282
+
return nil
283
+
}
284
+
func (t *UnsignedCommit) MarshalCBOR(w io.Writer) error {
285
+
if t == nil {
286
+
_, err := w.Write(cbg.CborNull)
287
+
return err
288
+
}
289
+
290
+
cw := cbg.NewCborWriter(w)
291
+
292
+
if _, err := cw.Write([]byte{164}); err != nil {
293
+
return err
294
+
}
295
+
296
+
// t.Did (string) (string)
297
+
if len("did") > cbg.MaxLength {
298
+
return xerrors.Errorf("Value in field \"did\" was too long")
299
+
}
300
+
301
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("did"))); err != nil {
302
+
return err
303
+
}
304
+
if _, err := io.WriteString(w, string("did")); err != nil {
305
+
return err
306
+
}
307
+
308
+
if len(t.Did) > cbg.MaxLength {
309
+
return xerrors.Errorf("Value in field t.Did was too long")
310
+
}
311
+
312
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Did))); err != nil {
313
+
return err
314
+
}
315
+
if _, err := io.WriteString(w, string(t.Did)); err != nil {
316
+
return err
317
+
}
318
+
319
+
// t.Data (cid.Cid) (struct)
320
+
if len("data") > cbg.MaxLength {
321
+
return xerrors.Errorf("Value in field \"data\" was too long")
322
+
}
323
+
324
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("data"))); err != nil {
325
+
return err
326
+
}
327
+
if _, err := io.WriteString(w, string("data")); err != nil {
328
+
return err
329
+
}
330
+
331
+
if err := cbg.WriteCid(cw, t.Data); err != nil {
332
+
return xerrors.Errorf("failed to write cid field t.Data: %w", err)
333
+
}
334
+
335
+
// t.Prev (cid.Cid) (struct)
336
+
if len("prev") > cbg.MaxLength {
337
+
return xerrors.Errorf("Value in field \"prev\" was too long")
338
+
}
339
+
340
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("prev"))); err != nil {
341
+
return err
342
+
}
343
+
if _, err := io.WriteString(w, string("prev")); err != nil {
344
+
return err
345
+
}
346
+
347
+
if t.Prev == nil {
348
+
if _, err := cw.Write(cbg.CborNull); err != nil {
349
+
return err
350
+
}
351
+
} else {
352
+
if err := cbg.WriteCid(cw, *t.Prev); err != nil {
353
+
return xerrors.Errorf("failed to write cid field t.Prev: %w", err)
354
+
}
355
+
}
356
+
357
+
// t.Version (int64) (int64)
358
+
if len("version") > cbg.MaxLength {
359
+
return xerrors.Errorf("Value in field \"version\" was too long")
360
+
}
361
+
362
+
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("version"))); err != nil {
363
+
return err
364
+
}
365
+
if _, err := io.WriteString(w, string("version")); err != nil {
366
+
return err
367
+
}
368
+
369
+
if t.Version >= 0 {
370
+
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Version)); err != nil {
371
+
return err
372
+
}
373
+
} else {
374
+
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Version-1)); err != nil {
375
+
return err
376
+
}
377
+
}
378
+
return nil
379
+
}
380
+
381
+
func (t *UnsignedCommit) UnmarshalCBOR(r io.Reader) (err error) {
382
+
*t = UnsignedCommit{}
383
+
384
+
cr := cbg.NewCborReader(r)
385
+
386
+
maj, extra, err := cr.ReadHeader()
387
+
if err != nil {
388
+
return err
389
+
}
390
+
defer func() {
391
+
if err == io.EOF {
392
+
err = io.ErrUnexpectedEOF
393
+
}
394
+
}()
395
+
396
+
if maj != cbg.MajMap {
397
+
return fmt.Errorf("cbor input should be of type map")
398
+
}
399
+
400
+
if extra > cbg.MaxLength {
401
+
return fmt.Errorf("UnsignedCommit: map struct too large (%d)", extra)
402
+
}
403
+
404
+
var name string
405
+
n := extra
406
+
407
+
for i := uint64(0); i < n; i++ {
408
+
409
+
{
410
+
sval, err := cbg.ReadString(cr)
411
+
if err != nil {
412
+
return err
413
+
}
414
+
415
+
name = string(sval)
416
+
}
417
+
418
+
switch name {
419
+
// t.Did (string) (string)
420
+
case "did":
421
+
422
+
{
423
+
sval, err := cbg.ReadString(cr)
424
+
if err != nil {
425
+
return err
426
+
}
427
+
428
+
t.Did = string(sval)
429
+
}
430
+
// t.Data (cid.Cid) (struct)
431
+
case "data":
432
+
433
+
{
434
+
435
+
c, err := cbg.ReadCid(cr)
436
+
if err != nil {
437
+
return xerrors.Errorf("failed to read cid field t.Data: %w", err)
438
+
}
439
+
440
+
t.Data = c
441
+
442
+
}
443
+
// t.Prev (cid.Cid) (struct)
444
+
case "prev":
445
+
446
+
{
447
+
448
+
b, err := cr.ReadByte()
449
+
if err != nil {
450
+
return err
451
+
}
452
+
if b != cbg.CborNull[0] {
453
+
if err := cr.UnreadByte(); err != nil {
454
+
return err
455
+
}
456
+
457
+
c, err := cbg.ReadCid(cr)
458
+
if err != nil {
459
+
return xerrors.Errorf("failed to read cid field t.Prev: %w", err)
460
+
}
461
+
462
+
t.Prev = &c
463
+
}
464
+
465
+
}
466
+
// t.Version (int64) (int64)
467
+
case "version":
468
+
{
469
+
maj, extra, err := cr.ReadHeader()
470
+
var extraI int64
471
+
if err != nil {
472
+
return err
473
+
}
474
+
switch maj {
475
+
case cbg.MajUnsignedInt:
476
+
extraI = int64(extra)
477
+
if extraI < 0 {
478
+
return fmt.Errorf("int64 positive overflow")
479
+
}
480
+
case cbg.MajNegativeInt:
481
+
extraI = int64(extra)
482
+
if extraI < 0 {
483
+
return fmt.Errorf("int64 negative overflow")
484
+
}
485
+
extraI = -1 - extraI
486
+
default:
487
+
return fmt.Errorf("wrong type for int64 field: %d", maj)
488
+
}
489
+
490
+
t.Version = int64(extraI)
491
+
}
492
+
493
+
default:
494
+
// Field doesn't exist on this type, so ignore it
495
+
cbg.ScanForLinks(r, func(cid.Cid) {})
496
+
}
497
+
}
498
+
499
+
return nil
500
+
}
+176
repo/repo.go
+176
repo/repo.go
···
···
1
+
package repo
2
+
3
+
import (
4
+
"context"
5
+
"fmt"
6
+
"io"
7
+
8
+
cbor2 "github.com/fxamacker/cbor/v2"
9
+
10
+
"github.com/bluesky-social/indigo/mst"
11
+
"github.com/bluesky-social/indigo/util"
12
+
"github.com/ipfs/go-cid"
13
+
"github.com/ipfs/go-datastore"
14
+
blockstore "github.com/ipfs/go-ipfs-blockstore"
15
+
cbor "github.com/ipfs/go-ipld-cbor"
16
+
"github.com/ipld/go-car/v2"
17
+
)
18
+
19
+
// current version of repo currently implemented
20
+
const ATP_REPO_VERSION int64 = 2
21
+
22
+
type SignedCommit struct {
23
+
Did string `cborgen:"did"`
24
+
Version int64 `cborgen:"version"`
25
+
Prev *cid.Cid `cborgen:"prev"`
26
+
Data cid.Cid `cborgen:"data"`
27
+
Sig []byte `cborgen:"sig"`
28
+
}
29
+
30
+
type UnsignedCommit struct {
31
+
Did string `cborgen:"did"`
32
+
Version int64 `cborgen:"version"`
33
+
Prev *cid.Cid `cborgen:"prev"`
34
+
Data cid.Cid `cborgen:"data"`
35
+
}
36
+
37
+
type Repo struct {
38
+
sc SignedCommit
39
+
cst cbor.IpldStore
40
+
bs blockstore.Blockstore
41
+
42
+
repoCid cid.Cid
43
+
44
+
mst *mst.MerkleSearchTree
45
+
46
+
dirty bool
47
+
}
48
+
49
+
// Returns a copy of commit without the Sig field. Helpful when verifying signature.
50
+
func (sc *SignedCommit) Unsigned() *UnsignedCommit {
51
+
return &UnsignedCommit{
52
+
Did: sc.Did,
53
+
Version: sc.Version,
54
+
Prev: sc.Prev,
55
+
Data: sc.Data,
56
+
}
57
+
}
58
+
59
+
// returns bytes of the DAG-CBOR representation of object. This is what gets
60
+
// signed; the `go-did` library will take the SHA-256 of the bytes and sign
61
+
// that.
62
+
/*func (uc *UnsignedCommit) BytesForSigning() ([]byte, error) {
63
+
buf := new(bytes.Buffer)
64
+
/if err := uc.MarshalCBOR(buf); err != nil {
65
+
return []byte{}, err
66
+
}
67
+
return buf.Bytes(), nil
68
+
}*/
69
+
70
+
func IngestRepo(ctx context.Context, bs blockstore.Blockstore, r io.Reader) (cid.Cid, error) {
71
+
br, err := car.NewBlockReader(r)
72
+
if err != nil {
73
+
return cid.Undef, err
74
+
}
75
+
76
+
for {
77
+
blk, err := br.Next()
78
+
if err != nil {
79
+
if err == io.EOF {
80
+
break
81
+
}
82
+
return cid.Undef, err
83
+
}
84
+
85
+
if err := bs.Put(ctx, blk); err != nil {
86
+
return cid.Undef, err
87
+
}
88
+
}
89
+
90
+
return br.Roots[0], nil
91
+
}
92
+
93
+
func ReadRepoFromCar(ctx context.Context, r io.Reader) (*Repo, error) {
94
+
bs := blockstore.NewBlockstore(datastore.NewMapDatastore())
95
+
root, err := IngestRepo(ctx, bs, r)
96
+
if err != nil {
97
+
return nil, err
98
+
}
99
+
100
+
return OpenRepo(ctx, bs, root, false)
101
+
}
102
+
103
+
func OpenRepo(ctx context.Context, bs blockstore.Blockstore, root cid.Cid, fullRepo bool) (*Repo, error) {
104
+
cst := util.CborStore(bs)
105
+
106
+
var sc SignedCommit
107
+
if err := cst.Get(ctx, root, &sc); err != nil {
108
+
return nil, fmt.Errorf("loading root from blockstore: %w", err)
109
+
}
110
+
111
+
if sc.Version != ATP_REPO_VERSION {
112
+
return nil, fmt.Errorf("unsupported repo version: %d", sc.Version)
113
+
}
114
+
115
+
return &Repo{
116
+
sc: sc,
117
+
bs: bs,
118
+
cst: cst,
119
+
repoCid: root,
120
+
}, nil
121
+
}
122
+
123
+
func (r *Repo) getMst(ctx context.Context) (*mst.MerkleSearchTree, error) {
124
+
if r.mst != nil {
125
+
return r.mst, nil
126
+
}
127
+
128
+
t := mst.LoadMST(r.cst, r.sc.Data)
129
+
r.mst = t
130
+
return t, nil
131
+
}
132
+
133
+
var ErrDoneIterating = fmt.Errorf("done iterating")
134
+
135
+
func (r *Repo) ForEach(ctx context.Context, prefix string, cb func(k string, v cid.Cid) error) error {
136
+
t := mst.LoadMST(r.cst, r.sc.Data)
137
+
138
+
if err := t.WalkLeavesFrom(ctx, prefix, cb); err != nil {
139
+
if err != ErrDoneIterating {
140
+
return err
141
+
}
142
+
}
143
+
144
+
return nil
145
+
}
146
+
147
+
func (r *Repo) GetRecord(ctx context.Context, rpath string) (cid.Cid, interface{}, error) {
148
+
mst, err := r.getMst(ctx)
149
+
if err != nil {
150
+
return cid.Undef, nil, fmt.Errorf("getting repo mst: %w", err)
151
+
}
152
+
153
+
cc, err := mst.Get(ctx, rpath)
154
+
if err != nil {
155
+
return cid.Undef, nil, fmt.Errorf("resolving rpath within mst: %w", err)
156
+
}
157
+
158
+
blk, err := r.bs.Get(ctx, cc)
159
+
if err != nil {
160
+
return cid.Undef, nil, err
161
+
}
162
+
163
+
//fmt.Println(hex.EncodeToString(blk.RawData()))
164
+
165
+
var v interface{}
166
+
cbor2.Unmarshal(blk.RawData(), &v)
167
+
168
+
//fmt.Println(string(json))
169
+
170
+
/*rec, err := lexutil.CborDecodeValue(blk.RawData())
171
+
if err != nil {
172
+
return cid.Undef, nil, err
173
+
}*/
174
+
175
+
return cc, v, nil
176
+
}