Skip to content

Commit

Permalink
fix(cmds): use ipld multicodecs for cmds block put and cid
Browse files Browse the repository at this point in the history
  • Loading branch information
schomatis committed Nov 25, 2021
1 parent c00065c commit 6c90cda
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 25 deletions.
13 changes: 5 additions & 8 deletions core/commands/block.go
Expand Up @@ -114,6 +114,7 @@ It outputs to stdout, and <key> is a base58 encoded multihash.

const (
blockFormatOptionName = "format"
blockStoreCodecOptionName = "store-codec"
mhtypeOptionName = "mhtype"
mhlenOptionName = "mhlen"
)
Expand All @@ -135,6 +136,7 @@ other than 'sha2-256' or format to anything other than 'v0' will result in CIDv1
},
Options: []cmds.Option{
cmds.StringOption(blockFormatOptionName, "f", "cid format for blocks to be created with."),
cmds.StringOption(blockStoreCodecOptionName, "s", "multicodec name for blocks to be stored with"),
cmds.StringOption(mhtypeOptionName, "multihash hash function").WithDefault("sha2-256"),
cmds.IntOption(mhlenOptionName, "multihash hash length").WithDefault(-1),
cmds.BoolOption(pinOptionName, "pin added blocks recursively").WithDefault(false),
Expand All @@ -156,14 +158,8 @@ other than 'sha2-256' or format to anything other than 'v0' will result in CIDv1
return errors.New("missing option \"mhlen\"")
}

format, formatSet := req.Options[blockFormatOptionName].(string)
if !formatSet {
if mhtval != mh.SHA2_256 || (mhlen != -1 && mhlen != 32) {
format = "protobuf"
} else {
format = "v0"
}
}
format, _ := req.Options[blockFormatOptionName].(string)
storeCodec, _ := req.Options[blockStoreCodecOptionName].(string)

pin, _ := req.Options[pinOptionName].(bool)

Expand All @@ -177,6 +173,7 @@ other than 'sha2-256' or format to anything other than 'v0' will result in CIDv1
p, err := api.Block().Put(req.Context, file,
options.Block.Hash(mhtval, mhlen),
options.Block.Format(format),
options.Block.StoreCodec(storeCodec),
options.Block.Pin(pin))
if err != nil {
return err
Expand Down
31 changes: 26 additions & 5 deletions core/commands/cid.go
Expand Up @@ -11,7 +11,9 @@ import (
cidutil "github.com/ipfs/go-cidutil"
cmds "github.com/ipfs/go-ipfs-cmds"
verifcid "github.com/ipfs/go-verifcid"
"github.com/ipld/go-ipld-prime/multicodec"
mbase "github.com/multiformats/go-multibase"
mc "github.com/multiformats/go-multicodec"
mhash "github.com/multiformats/go-multihash"
)

Expand Down Expand Up @@ -296,21 +298,40 @@ var basesCmd = &cmds.Command{
}

const (
codecsNumericOptionName = "numeric"
codecsNumericOptionName = "numeric"
codecsSupportedOptionName = "supported"
)

var codecsCmd = &cmds.Command{
Helptext: cmds.HelpText{
Tagline: "List available CID codecs.",
},
Options: []cmds.Option{
cmds.BoolOption(codecsNumericOptionName, "also include numeric codes"),
cmds.BoolOption(codecsNumericOptionName, "n", "also include numeric codes"),
cmds.BoolOption(codecsSupportedOptionName, "s", "list only codecs supported by go-ipfs commands"),
},
Run: func(req *cmds.Request, resp cmds.ResponseEmitter, env cmds.Environment) error {
listSupported, _ := req.Options[codecsSupportedOptionName].(bool)
supportedCodecs := make(map[uint64]struct{})
if listSupported {
for _, code := range multicodec.ListEncoders() {
supportedCodecs[code] = struct{}{}
}
for _, code := range multicodec.ListDecoders() {
supportedCodecs[code] = struct{}{}
}
}

var res []CodeAndName
// use CodecToStr as there are multiple names for a given code
for code, name := range cid.CodecToStr {
res = append(res, CodeAndName{int(code), name})
for _, code := range mc.KnownCodes() {
if code.Tag() == "ipld" {
if listSupported {
if _, ok := supportedCodecs[uint64(code)]; !ok {
continue
}
}
res = append(res, CodeAndName{int(code), mc.Code(code).String()})
}
}
return cmds.EmitOnce(resp, res)
},
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Expand Up @@ -56,7 +56,7 @@ require (
github.com/ipfs/go-unixfs v0.2.5
github.com/ipfs/go-unixfsnode v1.1.3
github.com/ipfs/go-verifcid v0.0.1
github.com/ipfs/interface-go-ipfs-core v0.5.1
github.com/ipfs/interface-go-ipfs-core v0.5.3-0.20211119141042-1187b2462b7e
github.com/ipfs/tar-utils v0.0.1
github.com/ipld/go-car v0.3.2
github.com/ipld/go-codec-dagpb v1.3.0
Expand Down Expand Up @@ -94,7 +94,7 @@ require (
github.com/multiformats/go-multiaddr v0.4.0
github.com/multiformats/go-multiaddr-dns v0.3.1
github.com/multiformats/go-multibase v0.0.3
github.com/multiformats/go-multicodec v0.3.0
github.com/multiformats/go-multicodec v0.3.1-0.20211123212544-3a381346297b
github.com/multiformats/go-multihash v0.0.15
github.com/opentracing/opentracing-go v1.2.0
github.com/pkg/errors v0.9.1
Expand Down
6 changes: 6 additions & 0 deletions go.sum
Expand Up @@ -569,6 +569,10 @@ github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZ
github.com/ipfs/interface-go-ipfs-core v0.4.0/go.mod h1:UJBcU6iNennuI05amq3FQ7g0JHUkibHFAfhfUIy927o=
github.com/ipfs/interface-go-ipfs-core v0.5.1 h1:1KMM7RkjUD8W5fSoRsa9xR6ZMzeL8fLHOUM1UEW9Y4M=
github.com/ipfs/interface-go-ipfs-core v0.5.1/go.mod h1:lNBJrdXHtWS46evMPBdWtDQMDsrKcGbxCOGoKLkztOE=
github.com/ipfs/interface-go-ipfs-core v0.5.3-0.20211119134000-b0bd5d678161 h1:aFZxHab6QV30BJl1IruLwnUjKvtTHym72V2Lo+J7I8o=
github.com/ipfs/interface-go-ipfs-core v0.5.3-0.20211119134000-b0bd5d678161/go.mod h1:r0omGpym9f+OEyTaxiWAb76awt2DBGYB6B+IzncqvN4=
github.com/ipfs/interface-go-ipfs-core v0.5.3-0.20211119141042-1187b2462b7e h1:n2enLuMubj/eQwbrldfDGqeTSfXUkypKzVzeV8yBZsI=
github.com/ipfs/interface-go-ipfs-core v0.5.3-0.20211119141042-1187b2462b7e/go.mod h1:r0omGpym9f+OEyTaxiWAb76awt2DBGYB6B+IzncqvN4=
github.com/ipfs/tar-utils v0.0.1 h1:8Na0KBD6GddGyXwU4rXNtVTE24iuZws8mENJQPLG7W4=
github.com/ipfs/tar-utils v0.0.1/go.mod h1:ACflm9wXvV9w0eMJt6yYXxS2zuIV+yXGNwbuq1bhLeE=
github.com/ipld/go-car v0.3.2 h1:V9wt/80FNfbMRWSD98W5br6fyjUAyVgI2lDOTZX16Lg=
Expand Down Expand Up @@ -1094,6 +1098,8 @@ github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPw
github.com/multiformats/go-multicodec v0.2.0/go.mod h1:/y4YVwkfMyry5kFbMTbLJKErhycTIftytRV+llXdyS4=
github.com/multiformats/go-multicodec v0.3.0 h1:tstDwfIjiHbnIjeM5Lp+pMrSeN+LCMsEwOrkPmWm03A=
github.com/multiformats/go-multicodec v0.3.0/go.mod h1:qGGaQmioCDh+TeFOnxrbU0DaIPw8yFgAZgFG0V7p1qQ=
github.com/multiformats/go-multicodec v0.3.1-0.20211123212544-3a381346297b h1:T2Q2VpZkn97ifzs55j+zqqxUCnQOGWdFp3p6jcRF+uA=
github.com/multiformats/go-multicodec v0.3.1-0.20211123212544-3a381346297b/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ=
github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U=
github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po=
github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew=
Expand Down
25 changes: 19 additions & 6 deletions test/sharness/t0050-block.sh
Expand Up @@ -39,6 +39,15 @@ test_expect_success "'ipfs block put' output looks good" '
test_cmp expected_out actual_out
'

test_expect_success "can set cid store codec on block put" '
CODEC_HASH=$(ipfs block put --store-codec=dag-pb ../t0051-object-data/testPut.pb)
'

test_expect_success "block get output looks right" '
ipfs block get $CODEC_HASH > pb_block_out &&
test_cmp pb_block_out ../t0051-object-data/testPut.pb
'

#
# "block get" tests
#
Expand Down Expand Up @@ -236,13 +245,17 @@ test_expect_success "no panic in output" '
test_expect_code 1 grep "panic" stat_out
'

test_expect_success "can set multihash type and length on block put without format" '
HASH=$(echo "foooo" | ipfs block put --mhtype=sha3 --mhlen=20)
'
# FIXME: FAILING. This should work once 'protobuf' is added back in
# the default in https://github.com/ipfs/interface-go-ipfs-core/pull/80
# (after the first round of review passes).

test_expect_success "output looks good" '
test "bafybifctrq4xazzixy2v4ezymjcvzpskqdwlxra" = "$HASH"
'
#test_expect_success "can set multihash type and length on block put without format" '
# HASH=$(echo "foooo" | ipfs block put --mhtype=sha3 --mhlen=20)
#'
#
#test_expect_success "output looks good" '
# test "bafybifctrq4xazzixy2v4ezymjcvzpskqdwlxra" = "$HASH"
#'

test_expect_success "put with sha3 and cidv0 fails" '
echo "foooo" | test_must_fail ipfs block put --mhtype=sha3 --mhlen=20 --format=v0
Expand Down
46 changes: 42 additions & 4 deletions test/sharness/t0290-cid.sh
Expand Up @@ -103,10 +103,19 @@ Z 90 base58flickr
EOF

cat <<EOF > codecs_expect
81 cbor
85 raw
112 protobuf
113 cbor
112 dag-pb
113 dag-cbor
114 libp2p-key
120 git-raw
123 torrent-info
124 torrent-file
129 leofcoin-block
130 leofcoin-tx
131 leofcoin-pr
133 dag-jose
134 dag-cose
144 eth-block
145 eth-block-list
146 eth-tx-trie
Expand All @@ -116,16 +125,34 @@ cat <<EOF > codecs_expect
150 eth-state-trie
151 eth-account-snapshot
152 eth-storage-trie
153 eth-receipt-log-trie
154 eth-reciept-log
176 bitcoin-block
177 bitcoin-tx
178 bitcoin-witness-commitment
192 zcash-block
193 zcash-tx
208 stellar-block
209 stellar-tx
224 decred-block
225 decred-tx
240 dash-block
241 dash-tx
61697 fil-commitment-unsealed
61698 fil-commitment-sealed
250 swarm-manifest
251 swarm-feed
297 dag-json
496 swhid-1-snp
512 json
EOF

cat <<EOF > supported_codecs_expect
81 cbor
85 raw
112 dag-pb
113 dag-cbor
120 git-raw
297 dag-json
512 json
EOF

cat <<EOF > hashes_expect
Expand Down Expand Up @@ -231,6 +258,17 @@ test_expect_success "cid codecs --numeric" '
test_cmp codecs_expect actual
'

test_expect_success "cid codecs --supported" '
cut -c 8- supported_codecs_expect > expect &&
ipfs cid codecs --supported > actual
test_cmp expect actual
'

test_expect_success "cid codecs --supported --numeric" '
ipfs cid codecs --supported --numeric > actual &&
test_cmp supported_codecs_expect actual
'

test_expect_success "cid hashes" '
cut -c 8- hashes_expect > expect &&
ipfs cid hashes > actual
Expand Down

0 comments on commit 6c90cda

Please sign in to comment.