swarm/storage/feeds: Final package rename and moved files
This commit is contained in:
parent
83705ef6aa
commit
b6ccc06cda
|
@ -27,6 +27,6 @@ swarm/services @zelig
|
||||||
swarm/state @justelad
|
swarm/state @justelad
|
||||||
swarm/storage/encryption @gbalint @zelig @nagydani
|
swarm/storage/encryption @gbalint @zelig @nagydani
|
||||||
swarm/storage/mock @janos
|
swarm/storage/mock @janos
|
||||||
swarm/storage/mru @nolash
|
swarm/storage/feeds @nolash
|
||||||
swarm/testutil @lmars
|
swarm/testutil @lmars
|
||||||
whisper/ @gballet @gluk256
|
whisper/ @gballet @gluk256
|
||||||
|
|
|
@ -27,15 +27,15 @@ import (
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/cmd/utils"
|
"github.com/ethereum/go-ethereum/cmd/utils"
|
||||||
swarm "github.com/ethereum/go-ethereum/swarm/api/client"
|
swarm "github.com/ethereum/go-ethereum/swarm/api/client"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewGenericSigner(ctx *cli.Context) mru.Signer {
|
func NewGenericSigner(ctx *cli.Context) feeds.Signer {
|
||||||
return mru.NewGenericSigner(getPrivKey(ctx))
|
return feeds.NewGenericSigner(getPrivKey(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTopic(ctx *cli.Context) (topic mru.Topic) {
|
func getTopic(ctx *cli.Context) (topic feeds.Topic) {
|
||||||
var name = ctx.String(SwarmFeedNameFlag.Name)
|
var name = ctx.String(SwarmFeedNameFlag.Name)
|
||||||
var relatedTopic = ctx.String(SwarmFeedTopicFlag.Name)
|
var relatedTopic = ctx.String(SwarmFeedTopicFlag.Name)
|
||||||
var relatedTopicBytes []byte
|
var relatedTopicBytes []byte
|
||||||
|
@ -48,7 +48,7 @@ func getTopic(ctx *cli.Context) (topic mru.Topic) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
topic, err = mru.NewTopic(name, relatedTopicBytes)
|
topic, err = feeds.NewTopic(name, relatedTopicBytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("Error parsing topic: %s", err)
|
utils.Fatalf("Error parsing topic: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ func feedCreateManifest(ctx *cli.Context) {
|
||||||
client = swarm.NewClient(bzzapi)
|
client = swarm.NewClient(bzzapi)
|
||||||
)
|
)
|
||||||
|
|
||||||
newFeedUpdateRequest := mru.NewFirstRequest(getTopic(ctx))
|
newFeedUpdateRequest := feeds.NewFirstRequest(getTopic(ctx))
|
||||||
newFeedUpdateRequest.Feed.User = feedGetUser(ctx)
|
newFeedUpdateRequest.Feed.User = feedGetUser(ctx)
|
||||||
|
|
||||||
manifestAddress, err := client.CreateFeedWithManifest(newFeedUpdateRequest)
|
manifestAddress, err := client.CreateFeedWithManifest(newFeedUpdateRequest)
|
||||||
|
@ -100,18 +100,18 @@ func feedUpdate(ctx *cli.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var updateRequest *mru.Request
|
var updateRequest *feeds.Request
|
||||||
var query *mru.Query
|
var query *feeds.Query
|
||||||
|
|
||||||
if manifestAddressOrDomain == "" {
|
if manifestAddressOrDomain == "" {
|
||||||
query = new(mru.Query)
|
query = new(feeds.Query)
|
||||||
query.User = signer.Address()
|
query.User = signer.Address()
|
||||||
query.Topic = getTopic(ctx)
|
query.Topic = getTopic(ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieve feed status and metadata out of the manifest
|
// Retrieve a feed update request
|
||||||
updateRequest, err = client.GetFeedMetadata(query, manifestAddressOrDomain)
|
updateRequest, err = client.GetFeedRequest(query, manifestAddressOrDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("Error retrieving feed status: %s", err.Error())
|
utils.Fatalf("Error retrieving feed status: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
@ -139,14 +139,14 @@ func feedInfo(ctx *cli.Context) {
|
||||||
manifestAddressOrDomain = ctx.String(SwarmFeedManifestFlag.Name)
|
manifestAddressOrDomain = ctx.String(SwarmFeedManifestFlag.Name)
|
||||||
)
|
)
|
||||||
|
|
||||||
var query *mru.Query
|
var query *feeds.Query
|
||||||
if manifestAddressOrDomain == "" {
|
if manifestAddressOrDomain == "" {
|
||||||
query = new(mru.Query)
|
query = new(feeds.Query)
|
||||||
query.Topic = getTopic(ctx)
|
query.Topic = getTopic(ctx)
|
||||||
query.User = feedGetUser(ctx)
|
query.User = feedGetUser(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata, err := client.GetFeedMetadata(query, manifestAddressOrDomain)
|
metadata, err := client.GetFeedRequest(query, manifestAddressOrDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("Error retrieving feed metadata: %s", err.Error())
|
utils.Fatalf("Error retrieving feed metadata: %s", err.Error())
|
||||||
return
|
return
|
|
@ -26,11 +26,11 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/api"
|
"github.com/ethereum/go-ethereum/swarm/api"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
"github.com/ethereum/go-ethereum/swarm/testutil"
|
"github.com/ethereum/go-ethereum/swarm/testutil"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
|
@ -65,7 +65,7 @@ func TestCLIFeedUpdate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// compose a topic. We'll be doing quotes about Miguel de Cervantes
|
// compose a topic. We'll be doing quotes about Miguel de Cervantes
|
||||||
var topic mru.Topic
|
var topic feeds.Topic
|
||||||
subject := []byte("Miguel de Cervantes")
|
subject := []byte("Miguel de Cervantes")
|
||||||
copy(topic[:], subject[:])
|
copy(topic[:], subject[:])
|
||||||
name := "quotes"
|
name := "quotes"
|
||||||
|
@ -95,19 +95,19 @@ func TestCLIFeedUpdate(t *testing.T) {
|
||||||
|
|
||||||
// build the same topic as before, this time
|
// build the same topic as before, this time
|
||||||
// we use NewTopic to create a topic automatically.
|
// we use NewTopic to create a topic automatically.
|
||||||
topic, err = mru.NewTopic(name, subject)
|
topic, err = feeds.NewTopic(name, subject)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Feed configures whose updates we will be looking up.
|
// Feed configures whose updates we will be looking up.
|
||||||
feed := mru.Feed{
|
feed := feeds.Feed{
|
||||||
Topic: topic,
|
Topic: topic,
|
||||||
User: address,
|
User: address,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build a query to get the latest update
|
// Build a query to get the latest update
|
||||||
query := mru.NewQueryLatest(&feed, lookup.NoClue)
|
query := feeds.NewQueryLatest(&feed, lookup.NoClue)
|
||||||
|
|
||||||
// retrieve content!
|
// retrieve content!
|
||||||
reader, err := client.QueryFeed(query, "")
|
reader, err := client.QueryFeed(query, "")
|
||||||
|
@ -139,7 +139,7 @@ func TestCLIFeedUpdate(t *testing.T) {
|
||||||
cmd.ExpectExit()
|
cmd.ExpectExit()
|
||||||
|
|
||||||
// verify we can deserialize the result as a valid JSON
|
// verify we can deserialize the result as a valid JSON
|
||||||
var request mru.Request
|
var request feeds.Request
|
||||||
err = json.Unmarshal([]byte(matches[0]), &request)
|
err = json.Unmarshal([]byte(matches[0]), &request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
|
@ -22,5 +22,5 @@ swarm
|
||||||
├── storage ─────────────── ethersphere
|
├── storage ─────────────── ethersphere
|
||||||
│ ├── encryption ──────── @gbalint, @zelig, @nagydani
|
│ ├── encryption ──────── @gbalint, @zelig, @nagydani
|
||||||
│ ├── mock ────────────── @janos
|
│ ├── mock ────────────── @janos
|
||||||
│ └── mru ─────────────── @nolash
|
│ └── feeds ───────────── @nolash
|
||||||
└── testutil ────────────── @lmars
|
└── testutil ────────────── @lmars
|
|
@ -45,9 +45,10 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/swarm/multihash"
|
"github.com/ethereum/go-ethereum/swarm/multihash"
|
||||||
"github.com/ethereum/go-ethereum/swarm/spancontext"
|
"github.com/ethereum/go-ethereum/swarm/spancontext"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
"github.com/opentracing/opentracing-go"
|
|
||||||
|
opentracing "github.com/opentracing/opentracing-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -235,14 +236,14 @@ on top of the FileStore
|
||||||
it is the public interface of the FileStore which is included in the ethereum stack
|
it is the public interface of the FileStore which is included in the ethereum stack
|
||||||
*/
|
*/
|
||||||
type API struct {
|
type API struct {
|
||||||
feeds *mru.Handler
|
feeds *feeds.Handler
|
||||||
fileStore *storage.FileStore
|
fileStore *storage.FileStore
|
||||||
dns Resolver
|
dns Resolver
|
||||||
Decryptor func(context.Context, string) DecryptFunc
|
Decryptor func(context.Context, string) DecryptFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAPI the api constructor initialises a new API instance.
|
// NewAPI the api constructor initialises a new API instance.
|
||||||
func NewAPI(fileStore *storage.FileStore, dns Resolver, feedsHandler *mru.Handler, pk *ecdsa.PrivateKey) (self *API) {
|
func NewAPI(fileStore *storage.FileStore, dns Resolver, feedsHandler *feeds.Handler, pk *ecdsa.PrivateKey) (self *API) {
|
||||||
self = &API{
|
self = &API{
|
||||||
fileStore: fileStore,
|
fileStore: fileStore,
|
||||||
dns: dns,
|
dns: dns,
|
||||||
|
@ -408,7 +409,7 @@ func (a *API) Get(ctx context.Context, decrypt DecryptFunc, manifestAddr storage
|
||||||
if entry.Feed == nil {
|
if entry.Feed == nil {
|
||||||
return reader, mimeType, status, nil, fmt.Errorf("Cannot decode Feed in manifest")
|
return reader, mimeType, status, nil, fmt.Errorf("Cannot decode Feed in manifest")
|
||||||
}
|
}
|
||||||
_, err := a.feeds.Lookup(ctx, mru.NewQueryLatest(entry.Feed, lookup.NoClue))
|
_, err := a.feeds.Lookup(ctx, feeds.NewQueryLatest(entry.Feed, lookup.NoClue))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
apiGetNotFound.Inc(1)
|
apiGetNotFound.Inc(1)
|
||||||
status = http.StatusNotFound
|
status = http.StatusNotFound
|
||||||
|
@ -957,7 +958,7 @@ func (a *API) BuildDirectoryTree(ctx context.Context, mhash string, nameresolver
|
||||||
}
|
}
|
||||||
|
|
||||||
// FeedsLookup finds Swarm Feeds Updates at specific points in time, or the latest update
|
// FeedsLookup finds Swarm Feeds Updates at specific points in time, or the latest update
|
||||||
func (a *API) FeedsLookup(ctx context.Context, query *mru.Query) ([]byte, error) {
|
func (a *API) FeedsLookup(ctx context.Context, query *feeds.Query) ([]byte, error) {
|
||||||
_, err := a.feeds.Lookup(ctx, query)
|
_, err := a.feeds.Lookup(ctx, query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -971,12 +972,12 @@ func (a *API) FeedsLookup(ctx context.Context, query *mru.Query) ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FeedsNewRequest creates a Request object to update a specific Feed
|
// FeedsNewRequest creates a Request object to update a specific Feed
|
||||||
func (a *API) FeedsNewRequest(ctx context.Context, feed *mru.Feed) (*mru.Request, error) {
|
func (a *API) FeedsNewRequest(ctx context.Context, feed *feeds.Feed) (*feeds.Request, error) {
|
||||||
return a.feeds.NewRequest(ctx, feed)
|
return a.feeds.NewRequest(ctx, feed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FeedsUpdate publishes a new update on the given Feed
|
// FeedsUpdate publishes a new update on the given Feed
|
||||||
func (a *API) FeedsUpdate(ctx context.Context, request *mru.Request) (storage.Address, error) {
|
func (a *API) FeedsUpdate(ctx context.Context, request *feeds.Request) (storage.Address, error) {
|
||||||
return a.feeds.Update(ctx, request)
|
return a.feeds.Update(ctx, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -992,7 +993,7 @@ var ErrCannotLoadFeedManifest = errors.New("Cannot load feed manifest")
|
||||||
var ErrNotAFeedManifest = errors.New("Not a feed manifest")
|
var ErrNotAFeedManifest = errors.New("Not a feed manifest")
|
||||||
|
|
||||||
// ResolveFeedManifest retrieves the Feed manifest for the given address, and returns the referenced Feed.
|
// ResolveFeedManifest retrieves the Feed manifest for the given address, and returns the referenced Feed.
|
||||||
func (a *API) ResolveFeedManifest(ctx context.Context, addr storage.Address) (*mru.Feed, error) {
|
func (a *API) ResolveFeedManifest(ctx context.Context, addr storage.Address) (*feeds.Feed, error) {
|
||||||
trie, err := loadManifest(ctx, a.fileStore, addr, nil, NOOPDecrypt)
|
trie, err := loadManifest(ctx, a.fileStore, addr, nil, NOOPDecrypt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrCannotLoadFeedManifest
|
return nil, ErrCannotLoadFeedManifest
|
||||||
|
@ -1015,8 +1016,8 @@ var ErrCannotResolveFeed = errors.New("Cannot resolve Feed")
|
||||||
|
|
||||||
// ResolveFeed attempts to extract Feed information out of the manifest, if provided
|
// ResolveFeed attempts to extract Feed information out of the manifest, if provided
|
||||||
// If not, it attempts to extract the Feed out of a set of key-value pairs
|
// If not, it attempts to extract the Feed out of a set of key-value pairs
|
||||||
func (a *API) ResolveFeed(ctx context.Context, uri *URI, values mru.Values) (*mru.Feed, error) {
|
func (a *API) ResolveFeed(ctx context.Context, uri *URI, values feeds.Values) (*feeds.Feed, error) {
|
||||||
var feed *mru.Feed
|
var feed *feeds.Feed
|
||||||
var err error
|
var err error
|
||||||
if uri.Addr != "" {
|
if uri.Addr != "" {
|
||||||
// resolve the content key.
|
// resolve the content key.
|
||||||
|
@ -1035,7 +1036,7 @@ func (a *API) ResolveFeed(ctx context.Context, uri *URI, values mru.Values) (*mr
|
||||||
}
|
}
|
||||||
log.Debug("handle.get.feed: resolved", "manifestkey", manifestAddr, "feed", feed.Hex())
|
log.Debug("handle.get.feed: resolved", "manifestkey", manifestAddr, "feed", feed.Hex())
|
||||||
} else {
|
} else {
|
||||||
var v mru.Feed
|
var v feeds.Feed
|
||||||
if err := v.FromValues(values); err != nil {
|
if err := v.FromValues(values); err != nil {
|
||||||
return nil, ErrCannotResolveFeed
|
return nil, ErrCannotResolveFeed
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/api"
|
"github.com/ethereum/go-ethereum/swarm/api"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -608,7 +608,7 @@ var ErrNoFeedUpdatesFound = errors.New("No updates found for this feed")
|
||||||
// data
|
// data
|
||||||
// Returns the resulting Feed Manifest address that you can use to include in an ENS Resolver (setContent)
|
// Returns the resulting Feed Manifest address that you can use to include in an ENS Resolver (setContent)
|
||||||
// or reference future updates (Client.UpdateFeed)
|
// or reference future updates (Client.UpdateFeed)
|
||||||
func (c *Client) CreateFeedWithManifest(request *mru.Request) (string, error) {
|
func (c *Client) CreateFeedWithManifest(request *feeds.Request) (string, error) {
|
||||||
responseStream, err := c.updateFeed(request, true)
|
responseStream, err := c.updateFeed(request, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -628,12 +628,12 @@ func (c *Client) CreateFeedWithManifest(request *mru.Request) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateFeed allows you to set a new version of your content
|
// UpdateFeed allows you to set a new version of your content
|
||||||
func (c *Client) UpdateFeed(request *mru.Request) error {
|
func (c *Client) UpdateFeed(request *feeds.Request) error {
|
||||||
_, err := c.updateFeed(request, false)
|
_, err := c.updateFeed(request, false)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) updateFeed(request *mru.Request, createManifest bool) (io.ReadCloser, error) {
|
func (c *Client) updateFeed(request *feeds.Request, createManifest bool) (io.ReadCloser, error) {
|
||||||
URL, err := url.Parse(c.Gateway)
|
URL, err := url.Parse(c.Gateway)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -662,7 +662,7 @@ func (c *Client) updateFeed(request *mru.Request, createManifest bool) (io.ReadC
|
||||||
// QueryFeed returns a byte stream with the raw content of the feed update
|
// QueryFeed returns a byte stream with the raw content of the feed update
|
||||||
// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver
|
// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver
|
||||||
// points to that address
|
// points to that address
|
||||||
func (c *Client) QueryFeed(query *mru.Query, manifestAddressOrDomain string) (io.ReadCloser, error) {
|
func (c *Client) QueryFeed(query *feeds.Query, manifestAddressOrDomain string) (io.ReadCloser, error) {
|
||||||
return c.queryFeed(query, manifestAddressOrDomain, false)
|
return c.queryFeed(query, manifestAddressOrDomain, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -670,7 +670,7 @@ func (c *Client) QueryFeed(query *mru.Query, manifestAddressOrDomain string) (io
|
||||||
// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver
|
// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver
|
||||||
// points to that address
|
// points to that address
|
||||||
// meta set to true will instruct the node return Feed metainformation instead
|
// meta set to true will instruct the node return Feed metainformation instead
|
||||||
func (c *Client) queryFeed(query *mru.Query, manifestAddressOrDomain string, meta bool) (io.ReadCloser, error) {
|
func (c *Client) queryFeed(query *feeds.Query, manifestAddressOrDomain string, meta bool) (io.ReadCloser, error) {
|
||||||
URL, err := url.Parse(c.Gateway)
|
URL, err := url.Parse(c.Gateway)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -706,10 +706,10 @@ func (c *Client) queryFeed(query *mru.Query, manifestAddressOrDomain string, met
|
||||||
return res.Body, nil
|
return res.Body, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFeedMetadata returns a structure that describes the referenced Feed status
|
// GetFeedRequest returns a structure that describes the referenced Feed status
|
||||||
// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver
|
// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver
|
||||||
// points to that address
|
// points to that address
|
||||||
func (c *Client) GetFeedMetadata(query *mru.Query, manifestAddressOrDomain string) (*mru.Request, error) {
|
func (c *Client) GetFeedRequest(query *feeds.Query, manifestAddressOrDomain string) (*feeds.Request, error) {
|
||||||
|
|
||||||
responseStream, err := c.queryFeed(query, manifestAddressOrDomain, true)
|
responseStream, err := c.queryFeed(query, manifestAddressOrDomain, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -722,7 +722,7 @@ func (c *Client) GetFeedMetadata(query *mru.Query, manifestAddressOrDomain strin
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var metadata mru.Request
|
var metadata feeds.Request
|
||||||
if err := metadata.UnmarshalJSON(body); err != nil {
|
if err := metadata.UnmarshalJSON(body); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,14 +25,14 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/swarm/api"
|
"github.com/ethereum/go-ethereum/swarm/api"
|
||||||
swarmhttp "github.com/ethereum/go-ethereum/swarm/api/http"
|
swarmhttp "github.com/ethereum/go-ethereum/swarm/api/http"
|
||||||
"github.com/ethereum/go-ethereum/swarm/multihash"
|
"github.com/ethereum/go-ethereum/swarm/multihash"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
"github.com/ethereum/go-ethereum/swarm/testutil"
|
"github.com/ethereum/go-ethereum/swarm/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -361,12 +361,12 @@ func TestClientMultipartUpload(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestSigner() (*mru.GenericSigner, error) {
|
func newTestSigner() (*feeds.GenericSigner, error) {
|
||||||
privKey, err := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")
|
privKey, err := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return mru.NewGenericSigner(privKey), nil
|
return feeds.NewGenericSigner(privKey), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// test the transparent resolving of multihash feed updates with bzz:// scheme
|
// test the transparent resolving of multihash feed updates with bzz:// scheme
|
||||||
|
@ -394,9 +394,9 @@ func TestClientCreateFeedMultihash(t *testing.T) {
|
||||||
mh := multihash.ToMultihash(s)
|
mh := multihash.ToMultihash(s)
|
||||||
|
|
||||||
// our feed topic
|
// our feed topic
|
||||||
topic, _ := mru.NewTopic("foo.eth", nil)
|
topic, _ := feeds.NewTopic("foo.eth", nil)
|
||||||
|
|
||||||
createRequest := mru.NewFirstRequest(topic)
|
createRequest := feeds.NewFirstRequest(topic)
|
||||||
|
|
||||||
createRequest.SetData(mh)
|
createRequest.SetData(mh)
|
||||||
if err := createRequest.Sign(signer); err != nil {
|
if err := createRequest.Sign(signer); err != nil {
|
||||||
|
@ -448,8 +448,8 @@ func TestClientCreateUpdateFeed(t *testing.T) {
|
||||||
databytes := []byte("En un lugar de La Mancha, de cuyo nombre no quiero acordarme...")
|
databytes := []byte("En un lugar de La Mancha, de cuyo nombre no quiero acordarme...")
|
||||||
|
|
||||||
// our feed topic name
|
// our feed topic name
|
||||||
topic, _ := mru.NewTopic("El Quijote", nil)
|
topic, _ := feeds.NewTopic("El Quijote", nil)
|
||||||
createRequest := mru.NewFirstRequest(topic)
|
createRequest := feeds.NewFirstRequest(topic)
|
||||||
|
|
||||||
createRequest.SetData(databytes)
|
createRequest.SetData(databytes)
|
||||||
if err := createRequest.Sign(signer); err != nil {
|
if err := createRequest.Sign(signer); err != nil {
|
||||||
|
@ -479,7 +479,7 @@ func TestClientCreateUpdateFeed(t *testing.T) {
|
||||||
// define different data
|
// define different data
|
||||||
databytes = []byte("... no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero ...")
|
databytes = []byte("... no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero ...")
|
||||||
|
|
||||||
updateRequest, err := client.GetFeedMetadata(nil, correctManifestAddrHex)
|
updateRequest, err := client.GetFeedRequest(nil, correctManifestAddrHex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error retrieving update request template: %s", err)
|
t.Fatalf("Error retrieving update request template: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -508,12 +508,12 @@ func TestClientCreateUpdateFeed(t *testing.T) {
|
||||||
|
|
||||||
// now try retrieving feed updates without a manifest
|
// now try retrieving feed updates without a manifest
|
||||||
|
|
||||||
feed := &mru.Feed{
|
feed := &feeds.Feed{
|
||||||
Topic: topic,
|
Topic: topic,
|
||||||
User: signer.Address(),
|
User: signer.Address(),
|
||||||
}
|
}
|
||||||
|
|
||||||
lookupParams := mru.NewQueryLatest(feed, lookup.NoClue)
|
lookupParams := feeds.NewQueryLatest(feed, lookup.NoClue)
|
||||||
reader, err = client.QueryFeed(lookupParams, "")
|
reader, err = client.QueryFeed(lookupParams, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error retrieving feed updates: %s", err)
|
t.Fatalf("Error retrieving feed updates: %s", err)
|
||||||
|
|
|
@ -40,7 +40,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/swarm/api"
|
"github.com/ethereum/go-ethereum/swarm/api"
|
||||||
"github.com/ethereum/go-ethereum/swarm/log"
|
"github.com/ethereum/go-ethereum/swarm/log"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
|
|
||||||
"github.com/rs/cors"
|
"github.com/rs/cors"
|
||||||
)
|
)
|
||||||
|
@ -466,7 +466,7 @@ func (s *Server) HandlePostFeed(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Debug("handle.post.feed", "ruid", ruid)
|
log.Debug("handle.post.feed", "ruid", ruid)
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// Creation and update must send mru.updateRequestJSON JSON structure
|
// Creation and update must send feeds.updateRequestJSON JSON structure
|
||||||
body, err := ioutil.ReadAll(r.Body)
|
body, err := ioutil.ReadAll(r.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
RespondError(w, r, err.Error(), http.StatusInternalServerError)
|
RespondError(w, r, err.Error(), http.StatusInternalServerError)
|
||||||
|
@ -484,7 +484,7 @@ func (s *Server) HandlePostFeed(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var updateRequest mru.Request
|
var updateRequest feeds.Request
|
||||||
updateRequest.Feed = *feed
|
updateRequest.Feed = *feed
|
||||||
query := r.URL.Query()
|
query := r.URL.Query()
|
||||||
|
|
||||||
|
@ -582,7 +582,7 @@ func (s *Server) HandleGetFeed(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
lookupParams := &mru.Query{Feed: *feed}
|
lookupParams := &feeds.Query{Feed: *feed}
|
||||||
if err = lookupParams.FromValues(r.URL.Query()); err != nil { // parse period, version
|
if err = lookupParams.FromValues(r.URL.Query()); err != nil { // parse period, version
|
||||||
RespondError(w, r, fmt.Sprintf("invalid feed update request:%s", err), http.StatusBadRequest)
|
RespondError(w, r, fmt.Sprintf("invalid feed update request:%s", err), http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
|
@ -606,7 +606,7 @@ func (s *Server) HandleGetFeed(w http.ResponseWriter, r *http.Request) {
|
||||||
func (s *Server) translateFeedError(w http.ResponseWriter, r *http.Request, supErr string, err error) (int, error) {
|
func (s *Server) translateFeedError(w http.ResponseWriter, r *http.Request, supErr string, err error) (int, error) {
|
||||||
code := 0
|
code := 0
|
||||||
defaultErr := fmt.Errorf("%s: %v", supErr, err)
|
defaultErr := fmt.Errorf("%s: %v", supErr, err)
|
||||||
rsrcErr, ok := err.(*mru.Error)
|
rsrcErr, ok := err.(*feeds.Error)
|
||||||
if !ok && rsrcErr != nil {
|
if !ok && rsrcErr != nil {
|
||||||
code = rsrcErr.Code()
|
code = rsrcErr.Code()
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
@ -48,7 +48,7 @@ import (
|
||||||
swarm "github.com/ethereum/go-ethereum/swarm/api/client"
|
swarm "github.com/ethereum/go-ethereum/swarm/api/client"
|
||||||
"github.com/ethereum/go-ethereum/swarm/multihash"
|
"github.com/ethereum/go-ethereum/swarm/multihash"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
"github.com/ethereum/go-ethereum/swarm/testutil"
|
"github.com/ethereum/go-ethereum/swarm/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -62,12 +62,12 @@ func serverFunc(api *api.API) testutil.TestServer {
|
||||||
return NewServer(api, "")
|
return NewServer(api, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestSigner() (*mru.GenericSigner, error) {
|
func newTestSigner() (*feeds.GenericSigner, error) {
|
||||||
privKey, err := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")
|
privKey, err := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return mru.NewGenericSigner(privKey), nil
|
return feeds.NewGenericSigner(privKey), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// test the transparent resolving of multihash-containing feed updates with bzz:// scheme
|
// test the transparent resolving of multihash-containing feed updates with bzz:// scheme
|
||||||
|
@ -103,8 +103,8 @@ func TestBzzFeedMultihash(t *testing.T) {
|
||||||
|
|
||||||
log.Info("added data", "manifest", string(b), "data", common.ToHex(mh))
|
log.Info("added data", "manifest", string(b), "data", common.ToHex(mh))
|
||||||
|
|
||||||
topic, _ := mru.NewTopic("foo.eth", nil)
|
topic, _ := feeds.NewTopic("foo.eth", nil)
|
||||||
updateRequest := mru.NewFirstRequest(topic)
|
updateRequest := feeds.NewFirstRequest(topic)
|
||||||
|
|
||||||
updateRequest.SetData(mh)
|
updateRequest.SetData(mh)
|
||||||
|
|
||||||
|
@ -182,8 +182,8 @@ func TestBzzFeed(t *testing.T) {
|
||||||
//data for update 2
|
//data for update 2
|
||||||
update2Data := []byte("foo")
|
update2Data := []byte("foo")
|
||||||
|
|
||||||
topic, _ := mru.NewTopic("foo.eth", nil)
|
topic, _ := feeds.NewTopic("foo.eth", nil)
|
||||||
updateRequest := mru.NewFirstRequest(topic)
|
updateRequest := feeds.NewFirstRequest(topic)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -319,7 +319,7 @@ func TestBzzFeed(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
updateRequest = &mru.Request{}
|
updateRequest = &feeds.Request{}
|
||||||
if err = updateRequest.UnmarshalJSON(b); err != nil {
|
if err = updateRequest.UnmarshalJSON(b); err != nil {
|
||||||
t.Fatalf("Error decoding feed metadata: %s", err)
|
t.Fatalf("Error decoding feed metadata: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -365,7 +365,7 @@ func TestBzzFeed(t *testing.T) {
|
||||||
|
|
||||||
// test manifest-less queries
|
// test manifest-less queries
|
||||||
log.Info("get first update in update1Timestamp via direct query")
|
log.Info("get first update in update1Timestamp via direct query")
|
||||||
query := mru.NewQuery(&updateRequest.Feed, update1Timestamp, lookup.NoClue)
|
query := feeds.NewQuery(&updateRequest.Feed, update1Timestamp, lookup.NoClue)
|
||||||
|
|
||||||
urlq, err := url.Parse(fmt.Sprintf("%s/bzz-feed:/", srv.URL))
|
urlq, err := url.Parse(fmt.Sprintf("%s/bzz-feed:/", srv.URL))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -27,7 +27,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/swarm/log"
|
"github.com/ethereum/go-ethereum/swarm/log"
|
||||||
|
@ -56,7 +56,7 @@ type ManifestEntry struct {
|
||||||
ModTime time.Time `json:"mod_time,omitempty"`
|
ModTime time.Time `json:"mod_time,omitempty"`
|
||||||
Status int `json:"status,omitempty"`
|
Status int `json:"status,omitempty"`
|
||||||
Access *AccessEntry `json:"access,omitempty"`
|
Access *AccessEntry `json:"access,omitempty"`
|
||||||
Feed *mru.Feed `json:"feed,omitempty"`
|
Feed *feeds.Feed `json:"feed,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ManifestList represents the result of listing files in a manifest
|
// ManifestList represents the result of listing files in a manifest
|
||||||
|
@ -82,7 +82,7 @@ func (a *API) NewManifest(ctx context.Context, toEncrypt bool) (storage.Address,
|
||||||
|
|
||||||
// Manifest hack for supporting Feeds from the bzz: scheme
|
// Manifest hack for supporting Feeds from the bzz: scheme
|
||||||
// see swarm/api/api.go:API.Get() for more information
|
// see swarm/api/api.go:API.Get() for more information
|
||||||
func (a *API) NewFeedManifest(ctx context.Context, feed *mru.Feed) (storage.Address, error) {
|
func (a *API) NewFeedManifest(ctx context.Context, feed *feeds.Feed) (storage.Address, error) {
|
||||||
var manifest Manifest
|
var manifest Manifest
|
||||||
entry := ManifestEntry{
|
entry := ManifestEntry{
|
||||||
Feed: feed,
|
Feed: feed,
|
||||||
|
|
|
@ -317,7 +317,7 @@ func (c *Controller) handleStartMsg(msg *Msg, keyid string) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO this is set to zero-length byte pending decision on protocol for initial message, whether it should include message or not, and how to trigger the initial message so that current state of MRU is sent upon subscription
|
// TODO this is set to zero-length byte pending decision on protocol for initial message, whether it should include message or not, and how to trigger the initial message so that current state of Swarm Feed is sent upon subscription
|
||||||
notify := []byte{}
|
notify := []byte{}
|
||||||
replyMsg := NewMsg(MsgCodeNotifyWithKey, msg.namestring, make([]byte, len(notify)+symKeyLength))
|
replyMsg := NewMsg(MsgCodeNotifyWithKey, msg.namestring, make([]byte, len(notify)+symKeyLength))
|
||||||
copy(replyMsg.Payload, notify)
|
copy(replyMsg.Payload, notify)
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import "github.com/ethereum/go-ethereum/common/hexutil"
|
import "github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
|
@ -40,4 +40,4 @@ Request: Feed Update with signature
|
||||||
Epoch: time slot where the update is stored
|
Epoch: time slot where the update is stored
|
||||||
|
|
||||||
*/
|
*/
|
||||||
package mru
|
package feeds
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -47,7 +47,7 @@ func (e *Error) Error() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Code returns the error code
|
// Code returns the error code
|
||||||
// Error codes are enumerated in the error.go file within the mru package
|
// Error codes are enumerated in the error.go file within the feeds package
|
||||||
func (e *Error) Code() int {
|
func (e *Error) Code() int {
|
||||||
return e.code
|
return e.code
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"hash"
|
"hash"
|
||||||
|
@ -37,9 +37,9 @@ type Feed struct {
|
||||||
const feedLength = TopicLength + common.AddressLength
|
const feedLength = TopicLength + common.AddressLength
|
||||||
|
|
||||||
// mapKey calculates a unique id for this feed. Used by the cache map in `Handler`
|
// mapKey calculates a unique id for this feed. Used by the cache map in `Handler`
|
||||||
func (u *Feed) mapKey() uint64 {
|
func (f *Feed) mapKey() uint64 {
|
||||||
serializedData := make([]byte, feedLength)
|
serializedData := make([]byte, feedLength)
|
||||||
u.binaryPut(serializedData)
|
f.binaryPut(serializedData)
|
||||||
hasher := hashPool.Get().(hash.Hash)
|
hasher := hashPool.Get().(hash.Hash)
|
||||||
defer hashPool.Put(hasher)
|
defer hashPool.Put(hasher)
|
||||||
hasher.Reset()
|
hasher.Reset()
|
||||||
|
@ -49,54 +49,54 @@ func (u *Feed) mapKey() uint64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// binaryPut serializes this Feed instance into the provided slice
|
// binaryPut serializes this Feed instance into the provided slice
|
||||||
func (u *Feed) binaryPut(serializedData []byte) error {
|
func (f *Feed) binaryPut(serializedData []byte) error {
|
||||||
if len(serializedData) != feedLength {
|
if len(serializedData) != feedLength {
|
||||||
return NewErrorf(ErrInvalidValue, "Incorrect slice size to serialize Feed. Expected %d, got %d", feedLength, len(serializedData))
|
return NewErrorf(ErrInvalidValue, "Incorrect slice size to serialize Feed. Expected %d, got %d", feedLength, len(serializedData))
|
||||||
}
|
}
|
||||||
var cursor int
|
var cursor int
|
||||||
copy(serializedData[cursor:cursor+TopicLength], u.Topic[:TopicLength])
|
copy(serializedData[cursor:cursor+TopicLength], f.Topic[:TopicLength])
|
||||||
cursor += TopicLength
|
cursor += TopicLength
|
||||||
|
|
||||||
copy(serializedData[cursor:cursor+common.AddressLength], u.User[:])
|
copy(serializedData[cursor:cursor+common.AddressLength], f.User[:])
|
||||||
cursor += common.AddressLength
|
cursor += common.AddressLength
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// binaryLength returns the expected size of this structure when serialized
|
// binaryLength returns the expected size of this structure when serialized
|
||||||
func (u *Feed) binaryLength() int {
|
func (f *Feed) binaryLength() int {
|
||||||
return feedLength
|
return feedLength
|
||||||
}
|
}
|
||||||
|
|
||||||
// binaryGet restores the current instance from the information contained in the passed slice
|
// binaryGet restores the current instance from the information contained in the passed slice
|
||||||
func (u *Feed) binaryGet(serializedData []byte) error {
|
func (f *Feed) binaryGet(serializedData []byte) error {
|
||||||
if len(serializedData) != feedLength {
|
if len(serializedData) != feedLength {
|
||||||
return NewErrorf(ErrInvalidValue, "Incorrect slice size to read Feed. Expected %d, got %d", feedLength, len(serializedData))
|
return NewErrorf(ErrInvalidValue, "Incorrect slice size to read Feed. Expected %d, got %d", feedLength, len(serializedData))
|
||||||
}
|
}
|
||||||
|
|
||||||
var cursor int
|
var cursor int
|
||||||
copy(u.Topic[:], serializedData[cursor:cursor+TopicLength])
|
copy(f.Topic[:], serializedData[cursor:cursor+TopicLength])
|
||||||
cursor += TopicLength
|
cursor += TopicLength
|
||||||
|
|
||||||
copy(u.User[:], serializedData[cursor:cursor+common.AddressLength])
|
copy(f.User[:], serializedData[cursor:cursor+common.AddressLength])
|
||||||
cursor += common.AddressLength
|
cursor += common.AddressLength
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hex serializes the Feed to a hex string
|
// Hex serializes the Feed to a hex string
|
||||||
func (u *Feed) Hex() string {
|
func (f *Feed) Hex() string {
|
||||||
serializedData := make([]byte, feedLength)
|
serializedData := make([]byte, feedLength)
|
||||||
u.binaryPut(serializedData)
|
f.binaryPut(serializedData)
|
||||||
return hexutil.Encode(serializedData)
|
return hexutil.Encode(serializedData)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromValues deserializes this instance from a string key-value store
|
// FromValues deserializes this instance from a string key-value store
|
||||||
// useful to parse query strings
|
// useful to parse query strings
|
||||||
func (u *Feed) FromValues(values Values) (err error) {
|
func (f *Feed) FromValues(values Values) (err error) {
|
||||||
topic := values.Get("topic")
|
topic := values.Get("topic")
|
||||||
if topic != "" {
|
if topic != "" {
|
||||||
if err := u.Topic.FromHex(values.Get("topic")); err != nil {
|
if err := f.Topic.FromHex(values.Get("topic")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else { // see if the user set name and relatedcontent
|
} else { // see if the user set name and relatedcontent
|
||||||
|
@ -108,18 +108,18 @@ func (u *Feed) FromValues(values Values) (err error) {
|
||||||
}
|
}
|
||||||
relatedContent = relatedContent[:storage.AddressLength]
|
relatedContent = relatedContent[:storage.AddressLength]
|
||||||
}
|
}
|
||||||
u.Topic, err = NewTopic(name, relatedContent)
|
f.Topic, err = NewTopic(name, relatedContent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
u.User = common.HexToAddress(values.Get("user"))
|
f.User = common.HexToAddress(values.Get("user"))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// AppendValues serializes this structure into the provided string key-value store
|
// AppendValues serializes this structure into the provided string key-value store
|
||||||
// useful to build query strings
|
// useful to build query strings
|
||||||
func (u *Feed) AppendValues(values Values) {
|
func (f *Feed) AppendValues(values Values) {
|
||||||
values.Set("topic", u.Topic.Hex())
|
values.Set("topic", f.Topic.Hex())
|
||||||
values.Set("user", u.User.Hex())
|
values.Set("user", f.User.Hex())
|
||||||
}
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
// Handler is the API for Feeds
|
// Handler is the API for Feeds
|
||||||
// It enables creating, updating, syncing and retrieving feed updates and their data
|
// It enables creating, updating, syncing and retrieving feed updates and their data
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -25,7 +25,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/log"
|
"github.com/ethereum/go-ethereum/swarm/log"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -31,7 +31,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/swarm/chunk"
|
"github.com/ethereum/go-ethereum/swarm/chunk"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -22,7 +22,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
)
|
)
|
|
@ -1,9 +1,9 @@
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getTestID() *ID {
|
func getTestID() *ID {
|
|
@ -3,7 +3,7 @@ package lookup_test
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMarshallers(t *testing.T) {
|
func TestMarshallers(t *testing.T) {
|
|
@ -22,7 +22,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/log"
|
"github.com/ethereum/go-ethereum/swarm/log"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Data struct {
|
type Data struct {
|
|
@ -14,14 +14,14 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Query is used to specify constraints when performing an update lookup
|
// Query is used to specify constraints when performing an update lookup
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -24,7 +24,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Request represents a request to sign or signed Feed Update message
|
// Request represents a request to sign or signed Feed Update message
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -26,7 +26,7 @@ import (
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru/lookup"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds/lookup"
|
||||||
)
|
)
|
||||||
|
|
||||||
func areEqualJSON(s1, s2 string) (bool, error) {
|
func areEqualJSON(s1, s2 string) (bool, error) {
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
@ -22,7 +22,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TimestampProvider sets the time source of the mru package
|
// TimestampProvider sets the time source of the feeds package
|
||||||
var TimestampProvider timestampProvider = NewDefaultTimestampProvider()
|
var TimestampProvider timestampProvider = NewDefaultTimestampProvider()
|
||||||
|
|
||||||
// Timestamp encodes a point in time as a Unix epoch
|
// Timestamp encodes a point in time as a Unix epoch
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
|
@ -1,4 +1,4 @@
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
|
@ -14,7 +14,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package mru
|
package feeds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
|
@ -50,7 +50,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/swarm/state"
|
"github.com/ethereum/go-ethereum/swarm/state"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mock"
|
"github.com/ethereum/go-ethereum/swarm/storage/mock"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
"github.com/ethereum/go-ethereum/swarm/tracing"
|
"github.com/ethereum/go-ethereum/swarm/tracing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -186,10 +186,10 @@ func NewSwarm(config *api.Config, mockStore *mock.NodeStore) (self *Swarm, err e
|
||||||
// Swarm Hash Merklised Chunking for Arbitrary-length Document/File storage
|
// Swarm Hash Merklised Chunking for Arbitrary-length Document/File storage
|
||||||
self.fileStore = storage.NewFileStore(self.netStore, self.config.FileStoreParams)
|
self.fileStore = storage.NewFileStore(self.netStore, self.config.FileStoreParams)
|
||||||
|
|
||||||
var feedsHandler *mru.Handler
|
var feedsHandler *feeds.Handler
|
||||||
fhParams := &mru.HandlerParams{}
|
fhParams := &feeds.HandlerParams{}
|
||||||
|
|
||||||
feedsHandler = mru.NewHandler(fhParams)
|
feedsHandler = feeds.NewHandler(fhParams)
|
||||||
feedsHandler.SetStore(self.netStore)
|
feedsHandler.SetStore(self.netStore)
|
||||||
|
|
||||||
lstore.Validators = []storage.ChunkValidator{
|
lstore.Validators = []storage.ChunkValidator{
|
||||||
|
|
|
@ -25,7 +25,7 @@ import (
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/api"
|
"github.com/ethereum/go-ethereum/swarm/api"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/mru"
|
"github.com/ethereum/go-ethereum/swarm/storage/feeds"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TestServer interface {
|
type TestServer interface {
|
||||||
|
@ -54,8 +54,8 @@ func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer, reso
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
rhparams := &mru.HandlerParams{}
|
rhparams := &feeds.HandlerParams{}
|
||||||
rh, err := mru.NewTestHandler(feedsDir, rhparams)
|
rh, err := feeds.NewTestHandler(feedsDir, rhparams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer, reso
|
||||||
},
|
},
|
||||||
CurrentTime: 42,
|
CurrentTime: 42,
|
||||||
}
|
}
|
||||||
mru.TimestampProvider = tss
|
feeds.TimestampProvider = tss
|
||||||
return tss
|
return tss
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +92,6 @@ func (t *TestSwarmServer) Close() {
|
||||||
t.cleanup()
|
t.cleanup()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TestSwarmServer) Now() mru.Timestamp {
|
func (t *TestSwarmServer) Now() feeds.Timestamp {
|
||||||
return mru.Timestamp{Time: t.CurrentTime}
|
return feeds.Timestamp{Time: t.CurrentTime}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue