Skip to content

Commit b694f96

Browse files
committed
the UCAN server trusts attestations from trusted authorities
1 parent 3a05663 commit b694f96

File tree

4 files changed

+57
-31
lines changed

4 files changed

+57
-31
lines changed

cmd/etracker/start.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ import (
1111
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
1212
"github.com/spf13/cobra"
1313
"github.com/spf13/viper"
14+
ucancap "github.com/storacha/go-libstoracha/capabilities/ucan"
15+
"github.com/storacha/go-ucanto/core/delegation"
1416
"github.com/storacha/go-ucanto/did"
1517
ed25519 "github.com/storacha/go-ucanto/principal/ed25519/signer"
1618
"github.com/storacha/go-ucanto/principal/signer"
19+
"github.com/storacha/go-ucanto/ucan"
1720

1821
"github.com/storacha/etracker/internal/config"
1922
"github.com/storacha/etracker/internal/consolidator"
@@ -211,6 +214,33 @@ func startService(cmd *cobra.Command, args []string) error {
211214
return fmt.Errorf("creating principal resolver: %w", err)
212215
}
213216

217+
// Trust attestations from trusted authorities
218+
var authProofs []delegation.Delegation
219+
for _, authority := range cfg.TrustedAuthorities {
220+
auth, err := did.Parse(authority)
221+
if err != nil {
222+
return fmt.Errorf("parsing trusted authority: %w", err)
223+
}
224+
225+
attestDlg, err := delegation.Delegate(
226+
id,
227+
auth,
228+
[]ucan.Capability[ucan.NoCaveats]{
229+
ucan.NewCapability(
230+
ucancap.AttestAbility,
231+
id.DID().String(),
232+
ucan.NoCaveats{},
233+
),
234+
},
235+
delegation.WithNoExpiration(),
236+
)
237+
if err != nil {
238+
return err
239+
}
240+
241+
authProofs = append(authProofs, attestDlg)
242+
}
243+
214244
// Create and start consolidator
215245
interval := time.Duration(cfg.ConsolidationInterval) * time.Second
216246
batchSize := cfg.ConsolidationBatchSize
@@ -226,7 +256,7 @@ func startService(cmd *cobra.Command, args []string) error {
226256
interval,
227257
batchSize,
228258
presolver.ResolveDIDKey,
229-
cfg.TrustedAuthorities,
259+
authProofs,
230260
)
231261
if err != nil {
232262
return fmt.Errorf("creating consolidator: %w", err)
@@ -243,6 +273,7 @@ func startService(cmd *cobra.Command, args []string) error {
243273
server.WithMetricsEndpoint(cfg.MetricsAuthToken),
244274
server.WithAdminCreds(cfg.AdminDashboardUser, cfg.AdminDashboardPassword),
245275
server.WithPrincipalResolver(presolver),
276+
server.WithAuthorityProofs(authProofs...),
246277
)
247278
if err != nil {
248279
return fmt.Errorf("creating server: %w", err)

internal/consolidator/consolidator.go

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
logging "github.com/ipfs/go-log/v2"
1414
"github.com/storacha/go-libstoracha/capabilities/space/content"
1515
capegress "github.com/storacha/go-libstoracha/capabilities/space/egress"
16-
ucancap "github.com/storacha/go-libstoracha/capabilities/ucan"
1716
"github.com/storacha/go-ucanto/client"
1817
"github.com/storacha/go-ucanto/core/car"
1918
"github.com/storacha/go-ucanto/core/dag/blockstore"
@@ -71,35 +70,8 @@ func New(
7170
interval time.Duration,
7271
batchSize int,
7372
presolver validator.PrincipalResolverFunc,
74-
trustedAuthorities []string,
73+
authProofs []delegation.Delegation,
7574
) (*Consolidator, error) {
76-
// trust attestations from trusted authorities
77-
var authProofs []delegation.Delegation
78-
for _, authority := range trustedAuthorities {
79-
auth, err := did.Parse(authority)
80-
if err != nil {
81-
return nil, fmt.Errorf("parsing trusted authority: %w", err)
82-
}
83-
84-
attestDlg, err := delegation.Delegate(
85-
id,
86-
auth,
87-
[]ucan.Capability[ucan.NoCaveats]{
88-
ucan.NewCapability(
89-
ucancap.AttestAbility,
90-
id.DID().String(),
91-
ucan.NoCaveats{},
92-
),
93-
},
94-
delegation.WithNoExpiration(),
95-
)
96-
if err != nil {
97-
return nil, err
98-
}
99-
100-
authProofs = append(authProofs, attestDlg)
101-
}
102-
10375
retrieveValidationCtx := validator.NewValidationContext(
10476
id.Verifier(),
10577
content.Retrieve,

internal/consolidator/consolidator_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ func TestValidateRetrievalReceipt(t *testing.T) {
6161

6262
// trust attestations from the upload service
6363
uploadServiceID := testutil.WebService
64+
attestDlg, err := delegation.Delegate(
65+
consolidatorID,
66+
uploadServiceID,
67+
[]ucan.Capability[ucan.NoCaveats]{
68+
ucan.NewCapability(
69+
ucancap.AttestAbility,
70+
consolidatorID.DID().String(),
71+
ucan.NoCaveats{},
72+
),
73+
},
74+
delegation.WithNoExpiration(),
75+
)
76+
require.NoError(t, err)
6477

6578
knownProvider, err := did.Parse("did:web:up.test.storacha.network")
6679
require.NoError(t, err)
@@ -85,7 +98,7 @@ func TestValidateRetrievalReceipt(t *testing.T) {
8598

8699
return did.Undef, validator.NewDIDKeyResolutionError(input, fmt.Errorf("%s not found in mapping", input.String()))
87100
},
88-
[]string{uploadServiceID.DID().String()},
101+
[]delegation.Delegation{attestDlg},
89102
)
90103
require.NoError(t, err)
91104

internal/server/server.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"net/http"
66

77
logging "github.com/ipfs/go-log/v2"
8+
"github.com/storacha/go-ucanto/core/delegation"
89
"github.com/storacha/go-ucanto/principal"
910
ucanto "github.com/storacha/go-ucanto/server"
1011
"github.com/storacha/go-ucanto/validator"
@@ -22,6 +23,7 @@ type config struct {
2223
adminUser string
2324
adminPassword string
2425
principalResolver validator.PrincipalResolver
26+
authProofs []delegation.Delegation
2527
}
2628

2729
type Option func(*config)
@@ -45,6 +47,12 @@ func WithPrincipalResolver(resolver validator.PrincipalResolver) Option {
4547
}
4648
}
4749

50+
func WithAuthorityProofs(authProofs ...delegation.Delegation) Option {
51+
return func(c *config) {
52+
c.authProofs = authProofs
53+
}
54+
}
55+
4856
type Server struct {
4957
cfg *config
5058
ucantoSrv ucanto.ServerView[ucanto.Service]
@@ -64,6 +72,8 @@ func New(id principal.Signer, svc *service.Service, cons *consolidator.Consolida
6472
ucantoOpts = append(ucantoOpts, ucanto.WithPrincipalResolver(cfg.principalResolver.ResolveDIDKey))
6573
}
6674

75+
ucantoOpts = append(ucantoOpts, ucanto.WithAuthorityProofs(cfg.authProofs...))
76+
6777
ucantoSrv, err := ucanto.NewServer(id, ucantoOpts...)
6878
if err != nil {
6979
return nil, err

0 commit comments

Comments
 (0)