Veral is fanning out across the public evidence sources for this subject. Cold reads can take a few seconds while sources respond — the page will paint as soon as the score settles.
Veral is fanning out across the public evidence sources for this subject. Cold reads can take a few seconds while sources respond — the page will paint as soon as the score settles.
Veral is reading the public evidence for jesse.base.eth. Cold reads can take a few seconds while sources respond — the score panel will paint as soon as the reading settles.
Caution-band standing, but one or more negative signals fired — review the overlay below.
This macro has no contributing evidence yet. Publish the records that drive it (ENS, GitHub, audits) to lift it from — into a graded band.
What evidence would grade this →Publishing requires control of this subject — only the wallet its ENS primary address resolves to can issue the certificate.
10 of 29 sources verified evidence; among the rest, 7 had nothing to report (thin subject is honest, not a defect); 1 source couldn't reach data. The score of 37/100 reflects the thin public footprint. Low scores are expected for subjects with little public footprint — this is a finding, not an error.
Your counterparty graph shows a closed-loop or low-diversity high-volume pattern — the heuristic Veral uses to detect wash trading or sybil clusters. Either same addresses repeatedly transacting, or a small handful of counterparties carrying the majority of value.
Wash / sybil patterns are detected from on-chain transfer history; they cannot be retroactively cleared. Practical paths: • If the pattern reflects internal operations (e.g. an aggregator routing through a fixed set of pools), diversify your counterparty set going forward — the 90-day window will reflect the change. • If the pattern is structural and intentional (e.g. settlement-only addresses for a closed-system service), the flag may be permanent under current methodology. Consider a signed manifest declaring the operational shape; future Anchored tier review can override the heuristic.
90-day rolling window. Diversification effects visible after the window cycles.
Your subject is an upgradeable proxy contract whose admin is NOT a timelock. Buyers can be exposed to a no-notice upgrade if the admin key is compromised — Veral caps the score at the top of the Established band to reflect this governance gap.
Add upgrade governance proportional to the value at risk: • Transfer proxy admin to a timelock contract (e.g. OpenZeppelin TimelockController) with a delay ≥ 24h. • Alternatively, transfer admin to a multisig (Safe with threshold ≥ 3) — the next methodology iteration will distinguish EOA / multisig / timelock admins, and a verified multisig will reduce (but not fully clear) this flag. • If the proxy is intended to be permanently non-upgradeable, transfer admin to address(0) — the proxy then behaves as immutable code and this flag clears.
On-chain change visible after one block confirmation; admin-probe cache TTL is ~6 hours.
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| upgrade.proxyAdmin· clean baseline, no adverse flag | 0.25 | 0.00 | 0.0500 |
| upgrade.isUpgradeable | 0.25 | 1.00 | 0.0500 |
| upgrade.hasTimelock· clean baseline, no adverse flag | 0.25 | 0.00 | 0.0500 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| fid | 0.17 | 1.00 | 0.1404 |
| accountAgeSeconds | 0.17 | 0.53 | 0.1404 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| firstTxBlock | 0.13 | 1.00 | 0.0487 |
| isContract | 0.13 | 1.00 | 0.0487 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| counterparty.distinctCounterpartyCount | 0.25 | 1.00 | 0.1000 |
| counterparty.uniqueCounterpartiesIn30d | 0.25 | 1.00 | 0.1000 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| user.login | 0.07 | 1.00 | 0.0350 |
| user.createdAt | 0.07 | 1.00 | 0.0350 |
| user.publicRepos |
pnpm add @veral/score
import { computeProfile } from '@veral/score';
const compute = computeProfile('project/v1.0.0');
const result = compute(evidence, { nowSeconds: Math.floor(Date.now() / 1000) });
// result.score === 37The same evidence always produces the same score — no AI, no per-visitor variation. The methodology document above is the canonical reference.
| castsCount |
| 0.17 |
| 1.00 |
| 0.1404 |
| verifiedAddressCount | 0.17 | 1.00 | 0.1404 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| ens.com.github | 0.02 | 1.00 | 0.0182 |
| ens.com.twitter | 0.02 | 1.00 | 0.0182 |
| ens.url | 0.02 | 1.00 | 0.0182 |
| ens.description | 0.02 | 1.00 | 0.0182 |
| ens.avatar | 0.02 | 1.00 | 0.0182 |
| ens.keywords | 0.02 | 1.00 | 0.0182 |
| ens.xyz.farcaster | 0.02 | 1.00 | 0.0182 |
| contractDeployedTimestamp |
| 0.13 |
| 0.78 |
| 0.0487 |
| recentEventCount· clean baseline, no adverse flag | 0.13 | 0.00 | 0.0487 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| chainPresence[].deployed | 0.25 | 0.25 | 0.1563 |
| chainPresence[].verified | 0.25 | 1.00 | 0.1563 |
| chainPresence[].isProxy· clean baseline, no adverse flag | 0.25 | 0.00 | 0.1563 |
| chainCount | 0.25 | 0.25 | 0.1563 |
| counterparty.uniqueCounterpartiesIn90d | 0.25 | 1.00 | 0.1000 |
| counterparty.washPatternFlag | 0.25 | 1.00 | 0.1000 |
| 0.07 |
| 0.51 |
| 0.0350 |
| repos[].fullName | 0.07 | 0.48 | 0.0350 |
| repos[].pushedAt | 0.07 | 0.51 | 0.0350 |
| repos[].stars· clean baseline, no adverse flag | 0.07 | 0.00 | 0.0350 |
| repos[].hasTestDir | 0.07 | 0.48 | 0.0350 |
| repos[].hasSubstantialReadme | 0.07 | 0.48 | 0.0350 |
| repos[].hasLicense | 0.07 | 0.48 | 0.0350 |
| repos[].ciRuns.successful | 0.07 | 0.22 | 0.0350 |
| repos[].ciRuns.total | 0.07 | 0.22 | 0.0350 |
| repos[].bugIssues.closed | 0.07 | 0.72 | 0.0350 |
| repos[].bugIssues.total | 0.07 | 0.72 | 0.0350 |
| repos[].releasesLast12m· clean baseline, no adverse flag | 0.07 | 0.00 | 0.0350 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| githubOwner | 0.08 | 1.00 | 0.0784 |
| npm.found | 0.08 | 1.00 | 0.0784 |
| npm.packageCount | 0.08 | 0.10 | 0.0784 |
| npm.oldestPackageAgeDays | 0.08 | 1.00 | 0.0784 |
| npm.downloadsLastWeek | 0.08 | 0.82 | 0.0784 |
| npm.vulnerabilityCount | 0.08 | 1.00 | 0.0784 |
| npm.criticalVulnerabilityCount | 0.08 | 1.00 | 0.0784 |
| pypi.found· clean baseline, no adverse flag | 0.08 | 0.00 | 0.0784 |
| pypi.packageCount· clean baseline, no adverse flag | 0.08 | 0.00 | 0.0784 |
| pypi.downloadsLastWeek | 0.08 | 0.82 | 0.0784 |
| Attribute | Weight | Raw | Contribution |
|---|---|---|---|
| contracts[].address | 0.25 | 1.00 | 0.1500 |
| contracts[].etherscanVerified | 0.25 | 1.00 | 0.1500 |
| contracts[].hasProxy· clean baseline, no adverse flag | 0.25 | 0.00 | 0.1500 |
| verifiedCount | 0.25 | 0.20 | 0.1500 |