Trusted Assertions (NIP-85)
low level
When to use
Trusted assertions are data events computed by a provider. It's useful when certain operations might be too expensive (bandwidth, compute) on the edge device.
Usage Example
1) Option A: Use NDK default trusted providers
NDK ships defaultTrustedProviders preconfigured for NIP-85.
final metrics = await ndk.ta.getUserMetrics(
'0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
metrics: {Nip85Metric.rank, Nip85Metric.followers},
);
print('rank=${metrics?.rank}, followers=${metrics?.followers}');
2) Option B: Override providers with your Cipolin instance
final NdkConfig ndkConfig = NdkConfig(
cache: db!,
eventVerifier: eventVerifier,
bootstrapRelays: APP_DEFAULT_BOOTSTRAP_RELAYS,
logLevel: Logger.logLevels.info,
defaultTrustedProviders: APP_DEFAULT_NIP85_PROVIDERS,
);
or per request
final stream = ndk.ta.getUserMetrics(
<eventId>,
metrics: <metrics>,
providers: <providers>,
);
print('user rank=${user?.rank} postCount=${user?.postCount}');
final user = await ndk.ta.getUserMetrics(
'0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
metrics: {Nip85Metric.rank, Nip85Metric.postCount, Nip85Metric.replyCount},
providers: providers,
);
print('user rank=${user?.rank} postCount=${user?.postCount}');
3) Streaming updates (recommended for trust providers that stream their values like cipolin)
Providers like Cipolin emit progressive updates while syncing, so streaming APIs are the best fit.
final sub = ndk.ta
.streamUserMetrics(
'0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
metrics: {Nip85Metric.rank, Nip85Metric.followers, Nip85Metric.reactionsCount},
providers: providers,
)
.listen((m) {
print('update createdAt=${m.createdAt} rank=${m.rank} followers=${m.followers}');
});
// Later:
await sub.cancel();
4) Event and addressable lookups
Event metrics (kind 30383):
final eventMetrics = await ndk.ta.getEventMetrics(
'<eventId>',
metrics: {Nip85Metric.rank, Nip85Metric.commentCount, Nip85Metric.zapAmount},
providers: providers,
);
print('event rank=${eventMetrics?.rank} comments=${eventMetrics?.commentCount}');
Addressable metrics (kind 30384):
final addressMetrics = await ndk.ta.getAddressableMetrics(
'30023:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef:my-article-slug',
metrics: {Nip85Metric.rank, Nip85Metric.reactionCount, Nip85Metric.zapCount},
providers: providers,
);
print('address rank=${addressMetrics?.rank} zaps=${addressMetrics?.zapCount}');