forked from cerc-io/ipld-eth-server
Update vendor directory and make necessary code changes
Fixes for new geth version
This commit is contained in:
+32
@@ -0,0 +1,32 @@
|
||||
os:
|
||||
- linux
|
||||
|
||||
language: go
|
||||
|
||||
go:
|
||||
- 1.11.x
|
||||
|
||||
env:
|
||||
global:
|
||||
- GOTFLAGS="-race"
|
||||
matrix:
|
||||
- BUILD_DEPTYPE=gx
|
||||
- BUILD_DEPTYPE=gomod
|
||||
|
||||
|
||||
# disable travis install
|
||||
install:
|
||||
- true
|
||||
|
||||
script:
|
||||
- bash <(curl -s https://raw.githubusercontent.com/ipfs/ci-helpers/master/travis-ci/run-standard-tests.sh)
|
||||
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $GOPATH/src/gx
|
||||
- $GOPATH/pkg/mod
|
||||
- $HOME/.cache/go-build
|
||||
|
||||
notifications:
|
||||
email: false
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# go-cidutil
|
||||
|
||||
[](http://ipn.io)
|
||||
[](http://ipfs.io/)
|
||||
[](https://github.com/RichardLitt/standard-readme)
|
||||
[](https://godoc.org/github.com/ipfs/go-ipfs-cidutil)
|
||||
[](https://travis-ci.org/ipfs/go-ipfs-cidutil)
|
||||
|
||||
> go-cidutil implements various utilities and helper functions for working with CIDs
|
||||
|
||||
## Contribute
|
||||
|
||||
PRs accepted.
|
||||
|
||||
Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification.
|
||||
|
||||
## License
|
||||
|
||||
MIT © Protocol Labs, Inc.
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
coverage:
|
||||
range: "50...100"
|
||||
comment: off
|
||||
+197
@@ -0,0 +1,197 @@
|
||||
package cidutil
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
c "github.com/ipfs/go-cid"
|
||||
mb "github.com/multiformats/go-multibase"
|
||||
mh "github.com/multiformats/go-multihash"
|
||||
)
|
||||
|
||||
// FormatRef is a string documenting the format string for the Format function
|
||||
const FormatRef = `
|
||||
%% literal %
|
||||
%b multibase name
|
||||
%B multibase code
|
||||
%v version string
|
||||
%V version number
|
||||
%c codec name
|
||||
%C codec code
|
||||
%h multihash name
|
||||
%H multihash code
|
||||
%L hash digest length
|
||||
%m multihash encoded in base %b (with multibase prefix)
|
||||
%M multihash encoded in base %b without multibase prefix
|
||||
%d hash digest encoded in base %b (with multibase prefix)
|
||||
%D hash digest encoded in base %b without multibase prefix
|
||||
%s cid string encoded in base %b (1)
|
||||
%S cid string encoded in base %b without multibase prefix
|
||||
%P cid prefix: %v-%c-%h-%L
|
||||
|
||||
(1) For CID version 0 the multibase must be base58btc and no prefix is
|
||||
used. For Cid version 1 the multibase prefix is included.
|
||||
`
|
||||
|
||||
// Format formats a cid according to the format specificer as
|
||||
// documented in the FormatRef constant
|
||||
func Format(fmtStr string, base mb.Encoding, cid c.Cid) (string, error) {
|
||||
p := cid.Prefix()
|
||||
var out bytes.Buffer
|
||||
var err error
|
||||
encoder, err := mb.NewEncoder(base)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
for i := 0; i < len(fmtStr); i++ {
|
||||
if fmtStr[i] != '%' {
|
||||
out.WriteByte(fmtStr[i])
|
||||
continue
|
||||
}
|
||||
i++
|
||||
if i >= len(fmtStr) {
|
||||
return "", FormatStringError{"premature end of format string", ""}
|
||||
}
|
||||
switch fmtStr[i] {
|
||||
case '%':
|
||||
out.WriteByte('%')
|
||||
case 'b': // base name
|
||||
out.WriteString(baseToString(base))
|
||||
case 'B': // base code
|
||||
out.WriteByte(byte(base))
|
||||
case 'v': // version string
|
||||
fmt.Fprintf(&out, "cidv%d", p.Version)
|
||||
case 'V': // version num
|
||||
fmt.Fprintf(&out, "%d", p.Version)
|
||||
case 'c': // codec name
|
||||
out.WriteString(codecToString(p.Codec))
|
||||
case 'C': // codec code
|
||||
fmt.Fprintf(&out, "%d", p.Codec)
|
||||
case 'h': // hash fun name
|
||||
out.WriteString(hashToString(p.MhType))
|
||||
case 'H': // hash fun code
|
||||
fmt.Fprintf(&out, "%d", p.MhType)
|
||||
case 'L': // hash length
|
||||
fmt.Fprintf(&out, "%d", p.MhLength)
|
||||
case 'm', 'M': // multihash encoded in base %b
|
||||
out.WriteString(encode(encoder, cid.Hash(), fmtStr[i] == 'M'))
|
||||
case 'd', 'D': // hash digest encoded in base %b
|
||||
dec, err := mh.Decode(cid.Hash())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
out.WriteString(encode(encoder, dec.Digest, fmtStr[i] == 'D'))
|
||||
case 's': // cid string encoded in base %b
|
||||
str, err := cid.StringOfBase(base)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
out.WriteString(str)
|
||||
case 'S': // cid string without base prefix
|
||||
out.WriteString(encode(encoder, cid.Bytes(), true))
|
||||
case 'P': // prefix
|
||||
fmt.Fprintf(&out, "cidv%d-%s-%s-%d",
|
||||
p.Version,
|
||||
codecToString(p.Codec),
|
||||
hashToString(p.MhType),
|
||||
p.MhLength,
|
||||
)
|
||||
default:
|
||||
return "", FormatStringError{"unrecognized specifier in format string", fmtStr[i-1 : i+1]}
|
||||
}
|
||||
|
||||
}
|
||||
return out.String(), err
|
||||
}
|
||||
|
||||
// FormatStringError is the error return from Format when the format
|
||||
// string is ill formed
|
||||
type FormatStringError struct {
|
||||
Message string
|
||||
Specifier string
|
||||
}
|
||||
|
||||
func (e FormatStringError) Error() string {
|
||||
if e.Specifier == "" {
|
||||
return e.Message
|
||||
} else {
|
||||
return fmt.Sprintf("%s: %s", e.Message, e.Specifier)
|
||||
}
|
||||
}
|
||||
|
||||
func baseToString(base mb.Encoding) string {
|
||||
baseStr, ok := mb.EncodingToStr[base]
|
||||
if !ok {
|
||||
return fmt.Sprintf("base?%c", base)
|
||||
}
|
||||
return baseStr
|
||||
}
|
||||
|
||||
func codecToString(num uint64) string {
|
||||
name, ok := c.CodecToStr[num]
|
||||
if !ok {
|
||||
return fmt.Sprintf("codec?%d", num)
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
func hashToString(num uint64) string {
|
||||
name, ok := mh.Codes[num]
|
||||
if !ok {
|
||||
return fmt.Sprintf("hash?%d", num)
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
func encode(base mb.Encoder, data []byte, strip bool) string {
|
||||
str := base.Encode(data)
|
||||
if strip {
|
||||
return str[1:]
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
// ScanForCid scans bytes for anything resembling a CID. If one is
|
||||
// found `i` will point to the begging of the cid and `j` to to the
|
||||
// end and the cid will be returned, otherwise `i` and `j` will point
|
||||
// the end of the buffer and the cid will be `Undef`.
|
||||
func ScanForCid(buf []byte) (i, j int, cid c.Cid, cidStr string) {
|
||||
i = 0
|
||||
for {
|
||||
i = j
|
||||
for i < len(buf) && !asciiIsAlpha(buf[i]) {
|
||||
i++
|
||||
}
|
||||
j = i
|
||||
if i == len(buf) {
|
||||
return
|
||||
}
|
||||
for j < len(buf) && asciiIsAlpha(buf[j]) {
|
||||
j++
|
||||
}
|
||||
if j-i <= 1 || j-i > 128 || !supported[buf[i]] {
|
||||
continue
|
||||
}
|
||||
var err error
|
||||
cidStr = string(buf[i:j])
|
||||
cid, err = c.Decode(cidStr)
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var supported = make([]bool, 256)
|
||||
|
||||
func init() {
|
||||
// for now base64 encoding are not supported as they contain non
|
||||
// alhphanumeric characters
|
||||
supportedPrefixes := []byte("QfFbBcCvVtThzZ")
|
||||
for _, b := range supportedPrefixes {
|
||||
supported[b] = true
|
||||
}
|
||||
}
|
||||
|
||||
func asciiIsAlpha(b byte) bool {
|
||||
return ('A' <= b && b <= 'Z') || ('a' <= b && b <= 'z') || ('0' <= b && b <= '9')
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
module github.com/ipfs/go-cidutil
|
||||
|
||||
require (
|
||||
github.com/ipfs/go-cid v0.0.2
|
||||
github.com/multiformats/go-multibase v0.0.1
|
||||
github.com/multiformats/go-multihash v0.0.1
|
||||
)
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
github.com/gxed/hashland/keccakpg v0.0.1 h1:wrk3uMNaMxbXiHibbPO4S0ymqJMm41WiudyFSs7UnsU=
|
||||
github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU=
|
||||
github.com/gxed/hashland/murmur3 v0.0.1 h1:SheiaIt0sda5K+8FLz952/1iWS9zrnKsEJaOJu4ZbSc=
|
||||
github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48=
|
||||
github.com/ipfs/go-cid v0.0.2 h1:tuuKaZPU1M6HcejsO3AcYWW8sZ8MTvyxfc4uqB4eFE8=
|
||||
github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
|
||||
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
|
||||
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
|
||||
github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 h1:5W7KhL8HVF3XCFOweFD3BNESdnO8ewyYTFT2R+/b8FQ=
|
||||
github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U=
|
||||
github.com/mr-tron/base58 v1.1.0 h1:Y51FGVJ91WBqCEabAi5OPUz38eAx8DakuAm5svLcsfQ=
|
||||
github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
|
||||
github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI=
|
||||
github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA=
|
||||
github.com/multiformats/go-multibase v0.0.1 h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA=
|
||||
github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs=
|
||||
github.com/multiformats/go-multihash v0.0.1 h1:HHwN1K12I+XllBCrqKnhX949Orn4oawPkegHMu2vDqQ=
|
||||
github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U=
|
||||
golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67 h1:ng3VDlRp5/DHpSWl02R4rM9I+8M2rhmsuLwAMmkLQWE=
|
||||
golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/sys v0.0.0-20190219092855-153ac476189d h1:Z0Ahzd7HltpJtjAHHxX8QFP3j1yYgiuvjbjRzDj/KH0=
|
||||
golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package cidutil
|
||||
|
||||
import (
|
||||
cid "github.com/ipfs/go-cid"
|
||||
mhash "github.com/multiformats/go-multihash"
|
||||
)
|
||||
|
||||
// InlineBuilder is a cid.Builder that will use the id multihash when the
|
||||
// size of the content is no more than limit
|
||||
type InlineBuilder struct {
|
||||
cid.Builder // Parent Builder
|
||||
Limit int // Limit (inclusive)
|
||||
}
|
||||
|
||||
// WithCodec implements the cid.Builder interface
|
||||
func (p InlineBuilder) WithCodec(c uint64) cid.Builder {
|
||||
return InlineBuilder{p.Builder.WithCodec(c), p.Limit}
|
||||
}
|
||||
|
||||
// Sum implements the cid.Builder interface
|
||||
func (p InlineBuilder) Sum(data []byte) (cid.Cid, error) {
|
||||
if len(data) > p.Limit {
|
||||
return p.Builder.Sum(data)
|
||||
}
|
||||
return cid.V1Builder{Codec: p.GetCodec(), MhType: mhash.ID}.Sum(data)
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"author": "kevina",
|
||||
"bugs": {},
|
||||
"gx": {
|
||||
"dvcsimport": "github.com/ipfs/go-cidutil"
|
||||
},
|
||||
"gxDependencies": [
|
||||
{
|
||||
"author": "multiformats",
|
||||
"hash": "QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW",
|
||||
"name": "go-multihash",
|
||||
"version": "1.0.9"
|
||||
},
|
||||
{
|
||||
"author": "whyrusleeping",
|
||||
"hash": "QmekxXDhCxCJRNuzmHreuaT3BsuJcsjcXWNrtV9C8DRHtd",
|
||||
"name": "go-multibase",
|
||||
"version": "0.3.0"
|
||||
},
|
||||
{
|
||||
"author": "whyrusleeping",
|
||||
"hash": "QmTbxNB1NwDesLmKTscr4udL2tVP7MaxvXnD1D9yX7g3PN",
|
||||
"name": "go-cid",
|
||||
"version": "0.9.3"
|
||||
}
|
||||
],
|
||||
"gxVersion": "0.12.1",
|
||||
"language": "go",
|
||||
"license": "",
|
||||
"name": "go-cidutil",
|
||||
"releaseCmd": "git commit -a -m \"gx publish $VERSION\"",
|
||||
"version": "0.2.1"
|
||||
}
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package cidutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
c "github.com/ipfs/go-cid"
|
||||
)
|
||||
|
||||
type Set = c.Set
|
||||
|
||||
func NewSet() *Set { return c.NewSet() }
|
||||
|
||||
// StreamingSet is an extension of Set which allows to implement back-pressure
|
||||
// for the Visit function
|
||||
type StreamingSet struct {
|
||||
Set *Set
|
||||
New chan c.Cid
|
||||
}
|
||||
|
||||
// NewStreamingSet initializes and returns new Set.
|
||||
func NewStreamingSet() *StreamingSet {
|
||||
return &StreamingSet{
|
||||
Set: c.NewSet(),
|
||||
New: make(chan c.Cid),
|
||||
}
|
||||
}
|
||||
|
||||
// Visitor creates new visitor which adds a Cids to the set and emits them to
|
||||
// the set.New channel
|
||||
func (s *StreamingSet) Visitor(ctx context.Context) func(c c.Cid) bool {
|
||||
return func(c c.Cid) bool {
|
||||
if s.Set.Visit(c) {
|
||||
select {
|
||||
case s.New <- c:
|
||||
case <-ctx.Done():
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package cidutil
|
||||
|
||||
import (
|
||||
"github.com/ipfs/go-cid"
|
||||
"sort"
|
||||
)
|
||||
|
||||
// Slice is a convenience type for sorting CIDs
|
||||
type Slice []cid.Cid
|
||||
|
||||
func (s Slice) Len() int {
|
||||
return len(s)
|
||||
}
|
||||
|
||||
func (s Slice) Less(i, j int) bool {
|
||||
return s[i].KeyString() < s[j].KeyString()
|
||||
}
|
||||
|
||||
func (s Slice) Swap(i, j int) {
|
||||
s[i], s[j] = s[j], s[i]
|
||||
}
|
||||
|
||||
func (s Slice) Sort() {
|
||||
sort.Sort(s)
|
||||
}
|
||||
|
||||
// Sort sorts a slice of CIDs
|
||||
func Sort(s []cid.Cid) {
|
||||
Slice(s).Sort()
|
||||
}
|
||||
Reference in New Issue
Block a user