Skip to content

Commit

Permalink
fix: rebase and thread announce multiaddr better
Browse files Browse the repository at this point in the history
  • Loading branch information
alanshaw committed Feb 3, 2025
1 parent b208871 commit 454b198
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 29 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require (
github.com/aws/aws-sdk-go v1.55.6
github.com/aws/aws-sdk-go-v2 v1.34.0
github.com/aws/aws-sdk-go-v2/config v1.28.3
github.com/aws/aws-sdk-go-v2/credentials v1.17.44
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.15.15
github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression v1.7.50
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.36.5
Expand Down Expand Up @@ -36,7 +37,6 @@ require (

require (
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.44 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 // indirect
Expand Down
7 changes: 6 additions & 1 deletion pkg/aws/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/aws/aws-sdk-go-v2/service/ssm"
"github.com/libp2p/go-libp2p/core/crypto"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/multiformats/go-multiaddr"
"github.com/storacha/go-metadata"
"github.com/storacha/go-piece/pkg/piece"
"github.com/storacha/go-ucanto/core/delegation"
Expand Down Expand Up @@ -342,6 +343,10 @@ func Construct(cfg Config) (storage.Service, error) {
if err != nil {
return nil, fmt.Errorf("setting up receipt store: %w", err)
}
announceAddr, err := multiaddr.NewMultiaddr(cfg.IPNIPublisherAnnounceAddress)
if err != nil {
return nil, fmt.Errorf("parsing announce multiaddr: %w", err)
}
opts := []storage.Option{
storage.WithIdentity(cfg.Signer),
storage.WithBlobstore(blobStore),
Expand All @@ -350,7 +355,7 @@ func Construct(cfg Config) (storage.Service, error) {
storage.WithPublisherStore(publisherStore),
storage.WithPublicURL(*pubURL),
storage.WithPublisherDirectAnnounce(*announceURL),
storage.WithPublisherAnnounceAddr(cfg.IPNIPublisherAnnounceAddress),
storage.WithPublisherAnnounceAddress(announceAddr),
storage.WithPublisherIndexingServiceConfig(indexingServiceDID, *indexingServiceURL),
storage.WithPublisherIndexingServiceProof(indexingServiceProofs...),
storage.WithReceiptStore(receiptStore),
Expand Down
11 changes: 11 additions & 0 deletions pkg/service/claims/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@ import (
"net/url"

logging "github.com/ipfs/go-log/v2"
"github.com/multiformats/go-multiaddr"
"github.com/storacha/go-ucanto/client"
"github.com/storacha/go-ucanto/core/delegation"
"github.com/storacha/go-ucanto/transport/http"
"github.com/storacha/go-ucanto/ucan"
)

type options struct {
announceAddr multiaddr.Multiaddr
announceURLs []url.URL
indexingService client.Connection
indexingServiceProofs delegation.Proofs
}

type Option func(*options) error

// WithPublisherAnnounceAddress sets the address put into announce messages to
// tell indexers where to fetch advertisements from.
func WithPublisherAnnounceAddress(addr multiaddr.Multiaddr) Option {
return func(o *options) error {
o.announceAddr = addr
return nil
}
}

// WithPublisherDirectAnnounce sets indexer URLs to send direct HTTP
// announcements to.
func WithPublisherDirectAnnounce(announceURLs ...url.URL) Option {
Expand Down
6 changes: 3 additions & 3 deletions pkg/service/claims/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func (c *ClaimService) Store() claimstore.ClaimStore {

var _ Claims = (*ClaimService)(nil)

func New(id principal.Signer, claimStore claimstore.ClaimStore, publisherStore store.PublisherStore, announceAddr multiaddr.Multiaddr, peerAddr multiaddr.Multiaddr, opts ...Option) (*ClaimService, error) {
func New(id principal.Signer, claimStore claimstore.ClaimStore, publisherStore store.PublisherStore, publicAddr multiaddr.Multiaddr, opts ...Option) (*ClaimService, error) {
o := &options{}
for _, opt := range opts {
err := opt(o)
Expand All @@ -35,11 +35,11 @@ func New(id principal.Signer, claimStore claimstore.ClaimStore, publisherStore s
publisher, err := publisher.New(
id,
publisherStore,
announceAddr,
peerAddr,
publicAddr,
publisher.WithDirectAnnounce(o.announceURLs...),
publisher.WithIndexingService(o.indexingService),
publisher.WithIndexingServiceProof(o.indexingServiceProofs...),
publisher.WithAnnounceAddress(o.announceAddr),
)
if err != nil {
return nil, err
Expand Down
11 changes: 11 additions & 0 deletions pkg/service/publisher/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@ import (
"net/url"

logging "github.com/ipfs/go-log/v2"
"github.com/multiformats/go-multiaddr"
"github.com/storacha/go-ucanto/client"
"github.com/storacha/go-ucanto/core/delegation"
"github.com/storacha/go-ucanto/transport/http"
"github.com/storacha/go-ucanto/ucan"
)

type options struct {
announceAddr multiaddr.Multiaddr
announceURLs []url.URL
indexingService client.Connection
indexingServiceProofs delegation.Proofs
}

type Option func(*options) error

// WithAnnounceAddress sets the address put into announce messages to tell
// indexers where to fetch advertisements from.
func WithAnnounceAddress(addr multiaddr.Multiaddr) Option {
return func(o *options) error {
o.announceAddr = addr
return nil
}
}

// WithDirectAnnounce sets indexer URLs to send direct HTTP announcements to.
func WithDirectAnnounce(announceURLs ...url.URL) Option {
return func(o *options) error {
Expand Down
15 changes: 9 additions & 6 deletions pkg/service/publisher/publisher.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,8 +203,7 @@ var _ Publisher = (*PublisherService)(nil)
func New(
id principal.Signer,
publisherStore store.PublisherStore,
publicAnnounceAddr multiaddr.Multiaddr,
publicPeerAddr multiaddr.Multiaddr,
publicAddr multiaddr.Multiaddr,
opts ...Option,
) (*PublisherService, error) {
o := &options{}
Expand All @@ -220,7 +219,11 @@ func New(
return nil, fmt.Errorf("unmarshaling private key: %w", err)
}

ipnipubOpts := []ipnipub.Option{ipnipub.WithAnnounceAddrs(publicAnnounceAddr.String())}
if o.announceAddr == nil {
o.announceAddr = publicAddr
}

ipnipubOpts := []ipnipub.Option{ipnipub.WithAnnounceAddrs(o.announceAddr.String())}
for _, u := range o.announceURLs {
log.Infof("Announcing new IPNI adverts to: %s", u.String())
ipnipubOpts = append(ipnipubOpts, ipnipub.WithDirectAnnounce(u.String()))
Expand All @@ -231,21 +234,21 @@ func New(
}

found := false
for _, p := range publicPeerAddr.Protocols() {
for _, p := range publicAddr.Protocols() {
if p.Code == multiaddr.P_HTTPS || p.Code == multiaddr.P_HTTP {
found = true
break
}
}
if !found {
return nil, fmt.Errorf("IPNI publisher address is not HTTP(S): %s", publicPeerAddr)
return nil, fmt.Errorf("IPNI publisher address is not HTTP(S): %s", publicAddr)
}

peerid, err := peer.IDFromPrivateKey(priv)
if err != nil {
return nil, fmt.Errorf("creating libp2p peer ID from private key: %w", err)
}
provInfo := providerInfo(peerid, publicPeerAddr)
provInfo := providerInfo(peerid, publicAddr)

if o.indexingService == nil {
log.Errorf("Indexing service is not configured - claims will not be cached")
Expand Down
15 changes: 8 additions & 7 deletions pkg/service/storage/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/ipfs/go-datastore"
logging "github.com/ipfs/go-log/v2"
"github.com/multiformats/go-multiaddr"
"github.com/storacha/go-ucanto/client"
"github.com/storacha/go-ucanto/core/delegation"
"github.com/storacha/go-ucanto/principal"
Expand Down Expand Up @@ -38,7 +39,7 @@ type config struct {
claimDatastore datastore.Datastore
publisherStore store.PublisherStore
publisherDatastore datastore.Datastore
publisherAnnouceAddr string
publisherAnnouceAddr multiaddr.Multiaddr
receiptStore receiptstore.ReceiptStore
receiptDatastore datastore.Datastore
pdp *PDPConfig
Expand Down Expand Up @@ -154,18 +155,18 @@ func WithPublisherStore(publisherStore store.PublisherStore) Option {

// WithPublisherDatastore configures the underlying datastore to use for storing
// IPNI advertisements and their entries.
func WithPublisherAnnounceAddr(publisherAnnounceAddr string) Option {
func WithPublisherDatastore(dstore datastore.Datastore) Option {
return func(c *config) error {
c.publisherAnnouceAddr = publisherAnnounceAddr
c.publisherDatastore = dstore
return nil
}
}

// WithPublisherDatastore configures the underlying datastore to use for storing
// IPNI advertisements and their entries.
func WithPublisherDatastore(dstore datastore.Datastore) Option {
// WithPublisherAnnounceAddress sets the address put into announce messages to
// tell indexers where to fetch advertisements from.
func WithPublisherAnnounceAddress(addr multiaddr.Multiaddr) Option {
return func(c *config) error {
c.publisherDatastore = dstore
c.publisherAnnouceAddr = addr
return nil
}
}
Expand Down
15 changes: 4 additions & 11 deletions pkg/service/storage/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (

"github.com/ipfs/go-datastore"
"github.com/ipni/go-libipni/maurl"
"github.com/multiformats/go-multiaddr"
"github.com/storacha/go-metadata"
"github.com/storacha/go-ucanto/principal"
ed25519 "github.com/storacha/go-ucanto/principal/ed25519/signer"
Expand Down Expand Up @@ -170,13 +169,13 @@ func New(opts ...Option) (*StorageService, error) {
if c.blobsPublicURL != (url.URL{}) {
blobOpts = append(blobOpts, blobs.WithPublicURLAccess(c.blobsPublicURL))
} else {
blobOpts = append(blobOpts, blobs.WithPublicURLAccess(c.publicURL))
blobOpts = append(blobOpts, blobs.WithPublicURLAccess(pubURL))
}

if c.blobsPresigner != nil {
blobOpts = append(blobOpts, blobs.WithPresigner(c.blobsPresigner))
} else {
blobOpts = append(blobOpts, blobs.WithPublicURLPresigner(id, c.publicURL))
blobOpts = append(blobOpts, blobs.WithPublicURLPresigner(id, pubURL))
}
} else {
curioAuth, err := curio.CreateCurioJWTAuthHeader("storacha", id)
Expand All @@ -201,20 +200,14 @@ func New(opts ...Option) (*StorageService, error) {
if err != nil {
return nil, fmt.Errorf("parsing publisher url as multiaddr: %w", err)
}
announceAddr := peerAddr
if c.publisherAnnouceAddr != "" {
announceAddr, err = multiaddr.NewMultiaddr(c.publisherAnnouceAddr)
if err != nil {
return nil, fmt.Errorf("parsing publisher address: %w", err)
}
}

claims, err := claims.New(
id,
claimStore,
publisherStore,
announceAddr,
peerAddr,
claims.WithPublisherDirectAnnounce(c.announceURLs...),
claims.WithPublisherAnnounceAddress(c.publisherAnnouceAddr),
claims.WithPublisherIndexingService(c.indexingService),
claims.WithPublisherIndexingServiceProof(c.indexingServiceProofs...),
)
Expand Down

0 comments on commit 454b198

Please sign in to comment.