ABX
ReferenceThird-party audits

LeftClaw Services #1106

Maintainer assessment and response to the October 2026 SeriesCode report.

Report and scope

  • Published: October 30, 2026.
  • Report: LeftClaw Services #1106, the third-party "one dollar audit" of SeriesCode.sol.
  • Canonical report: IPFS copy, identified by the publisher as authoritative.
  • Reviewed commit: 1e3061e945a9c32b4d14af51a49448ee6f9b4837, also the latest main when maintainers evaluated the report.
  • Scope and method: The report describes a manual review of one token contract, with its mixins and dependencies read for context. It states that no code was executed and no Foundry coverage was run. It reports one medium, four low, and four informational findings, with no high or critical findings.

Quality assessment: low

The report is useful as a checklist of owner powers and integration risks, but its quality as an actionable security audit is low. Its principal finding omits existing controls and incorrectly states that a transfer validator cannot be removed. Several other findings restate documented design choices without identifying a failure of their intended guarantees. The report supplies no executed reproductions.

In particular, the existing code already supports a permanent no-transfer-hook commitment, immutable plain-token enrollment status, validator suspension, and a permissionless suspension path after ownership is renounced. Those controls materially change the principal finding's impact and response. The documented weakness of the default pseudorandom seed source is real; it is not a newly discovered randomness guarantee violation.

Findings and maintainer response

FindingAssessmentAction or response
M-1: Transfer hooks and validators can block transfers; hooks can block mintingA live transfer hook intentionally has veto power over mints, transfers, and burns. The report overlooks the ability to lock a zero transfer-hook address forever. Its validator claim confuses permanent enrollment with active enforcement: an enrolled validator can be suspended, anyone can suspend it after renunciation, and a plain token can never gain one.Keep veto semantics so required hook state updates remain atomic with token movement. Clarify the existing hook lock in the owner-powers guide. Evaluate finer-grained commitments only as potential future work.
L-1: Seed source can change for future mintsCorrect. Settled seeds and the source for future seeds are separate commitments. There is currently no seed-source lock.Record an optional source-address lock for evaluation in #43. Any design must account for source failure, mutable source contracts, curated seeds, and seed schemas; it must not imply fair randomness.
L-2: Default randomness permits selective acceptanceCorrect and already explicitly documented. A buyer can inspect the outcome within a transaction and revert.Retain the existing warning. Projects requiring unpredictable outcomes need a separately designed commitment or oracle lifecycle. No immediate source change.
L-3: Raw ERC-721 mint can deliver to an unsuitable contractAn intentional tradeoff: minting does not call the receiver hook. The buyer must choose a recipient that can manage the token.Keep the existing behavior. Absence of onERC721Received alone is not proof that a contract cannot hold or transfer NFTs.
L-4: Authorized minter can issue remaining supplyCorrect authority boundary. Restricting mintMany would not contain a compromised minter that can repeatedly call mint. The shared minter enforces its own sale allocation and pricing.Clarify that the token enforces caps while pricing and allocation controls belong to the minter. Review custom minter logic and upgrade authority.
I-1: Owner bypasses pause; renouncing while paused ends issuanceIntentional owner reserve authority with an operational footgun at renunciation. Ending issuance may itself be intended.Add an explicit warning to check the pause state and intended end of issuance before renouncing.
I-2: Permissionless deterministic salts permit front-runningCorrect for deliberately permissionless salts. CLI defaults already use deployer-bound salts; the SDK documents the permissionless helper's risk.Keep the guarded defaults and existing guidance. No contract change.
I-3: A separately deployed, uninitialized clone can be taken overThe supported factories initialize clones atomically. The implementation itself has initialization disabled.No change to the supported deployment path. Custom clone deployers must initialize atomically.
I-4: Zero seed is treated as assignedZero is a valid value. Assignment is represented independently by isSet; zero is not an unset sentinel.Decline a protocol-wide nonzero requirement. Custom seed sources must enforce their own sentinel conventions.

The relevant implementation and existing regression tests are available at the reviewed commit:

Actions and status

Maintainers ran the existing SeriesCode, SeriesCodeFactory, SeedAndCapInvariants, SecurityProperties, and CreatorToken Foundry suites at the reviewed commit: 117 tests passed, zero failed. These tests verify relevant existing safeguards; they are not an exhaustive independent audit.

The response updates the owner-powers guide with the correct getTransferValidator() getter, the existing permanent no-transfer-hook path, and the consequences of renouncing while paused. The minting guide clarifies minter authority.

Issue #43 now separately records three potential changes requiring merit evaluation before acceptance: an optional seed-source lock, an independent permanent no-transfer-hook commitment, and permanent validator suspension for enrolled projects. None is accepted for implementation or schedules a new generation. No contract source, deployed contract, or runtime behavior changes as part of this response.

On this page