AT Protocol IPLD-CAR Repository toolkit (CLI)

Initial commit

tree 010e62a4

+8
.gitignore
···
··· 1 + .DS_Store 2 + .vscode 3 + .env 4 + data 5 + __debug* 6 + 7 + # binaries 8 + /atr
+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
···
··· 1 + # atr 2 + 3 + AT Protocol IPLD-CAR Repository toolkit 4 + 5 + ## Examples 6 + 7 + ```bash 8 + curl 'https://bsky.social/xrpc/com.atproto.sync.getRepo?did=did:plc:524tuhdhh3m7li5gycdn6boe' | atr show 9 + ```
+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
···
··· 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
···
··· 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
···
··· 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
···
··· 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 + }