Skip to content

Fork sync - #36

Open
mateumiralles wants to merge 1107 commits into
dappnode:developfrom
lidofinance:develop
Open

Fork sync#36
mateumiralles wants to merge 1107 commits into
dappnode:developfrom
lidofinance:develop

Conversation

@mateumiralles

Copy link
Copy Markdown

Fork sync

exromany and others added 30 commits May 5, 2026 12:43
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](docker/build-push-action@v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
- restore curatedOperatorForm testid
- drop extra <div> wrapper in token-select, pass data-testid to <Note>
- widen Note props to allow data-testid override
- widen WeightChip, KeysItem, ParamSection, SummaryRow types
  so data-testid is exposed in the public prop contract
- move default data-testid before {...props} in owner-chip
  and icon-tooltip so callers can override
- use plain string literals (no template) in gate-card
- drop leftover fieldName arg in token-amount-input-hook-form
  to match updated testableError signature
feat: added data attr for elements
exromany and others added 30 commits August 28, 2026 11:03
Create eligibility is computed per module: a wallet that already runs a CSM
operator can still create a CSM_02 one. The operator-type modal offers CSM_02 as
a plain permissionless choice alongside the 0x01 entries, reworked per Figma.

The submit-keys form resolves its target module from the requested operator type
and routes every module-scoped read — curve, bond, share limit, status,
deposit-data config — through that module rather than the active operator's.
CSM_02 has no gates, so it always uses the module's single default curve.
CSM_02 keys carry both strikes (StrikesSDK is on the module) and a variable
effective balance, so the table now derives column visibility from the active
module instead of the IS_CSM/IS_CM gates. Comment-cell CSS re-anchored to
:last-child so it survives a variable column count.
Deposit queue is now CSM-family-wide, not CSM-only: the graph takes an
optional target module and falls back to the active operator's module.
Data hooks (share limit, queue batches, curve id) are keyed by that
module, so /create can render the queue for CSM_02 before any operator
exists — with no active operator id leaking across modules.

Adds a CSM_02 description covering the two-stage 32 ETH / 2048 ETH
deposit flow.
Adds a secondary line under each key row in the View keys table reading
"Top up in queue #N/total", gated to modules with a top-up queue (CSM_02).

Position and total both come from a single getOperatorTopUpQueue call
rather than pairing KeyWithStatus.topUpPosition with a separate queue-size
read: reading them apart can straddle an allocateDeposits and render #13/12.

The status-comment cell keeps its original DOM shape when a key has no
queue position, so the existing `td:has(> span:empty)` row-collapse rule
in styles.tsx keeps matching without a wrapper-aware selector.

Bumps @lidofinance/lido-csm-sdk to 2.3.0-alpha.4 for the top-up queue API.
In CSM 0x02 an exhausted share limit starves the separate top-up queue
rather than blocking initial activation, so the CSM wording no longer
fits. Reuses the existing EXHAUSTED status until the SDK exposes top-up
stake demand.
Depositable keys have no CL balance yet, so their stake is derived as
count x MIN_EFFECTIVE_BALANCE rather than summed from effectiveBalance.
Aggregates come from the SDK's wei share-limit fields; key counts are scaled
to wei once, in calculateAndSelectByOperator, so the graph geometry stays
unit-agnostic and CSM keeps rendering key counts unchanged.

Renames keysCount to amount across the graph data types: every value is a
bigint, so the field name is the only guard against mixing denominations.
- SM Sentinel link shown for all modules, not CSM only
- "View keys" action after key submit, switching operator when needed
- navigate home after create in every branch
- outlined Switch button in operator switch modal
* fix: stop CM widget from querying the surveys API

useSurveysFilled resolved its id through useOperatorKey, which treats the
argument as an override and falls back to the connected operator. Passing
undefined therefore did not disable the query, so the IS_SURVEYS_ACTIVE
gate in useSurveyEnabled (CSM-only) had no effect and CM requested
/open/cm-0. Build the key from the explicit id instead.

* fix: enable Reset Manager Address button

The manager-reset flow prefills the address input with the connected
wallet and locks it, so the form is never dirty and disableIfClean kept
the submit button permanently disabled.

* fix: no signature prompt on background survey reads

Expired SIWE token surfaced during a render-driven GET re-ran the whole
handshake, popping a signature modal on plain page visits. handleAuthError
now takes an interactive flag: queries clear the stale token silently,
mutations keep re-signing.

* fix: reset change role form on form reset
Chip resolved to undefined in the switchers: shared/components is re-entered
mid-initialization through shared/navigate, so the module-scope JSX ran before
the chip re-export. Import it from its own module instead.

ToastContainer: react-toastify@7 (pinned by lido-ui) declares static
defaultProps, which React 18.3 warns about on mount.
…621)

* feat: remove tag performTx and added tests for reset manager address

* feat: add pending role method

* refactor: improve IPFS path extraction logic in IpfsGatewayProxyService

* test: mark reset manager address test as failed due to known issue CS-1205
Badges used --lido-color-foreground as a stand-in for white, but lido-ui
overrides it per theme (#fff light, #34343d dark), so labels on the fixed
gradients were near-invisible in dark mode. Use primaryContrast, which is
theme-invariant #fff.

CM variants painted --lido-color-text, which also flips, so they move to
textDark to keep white text legible. Counter branches on the variant since
its non-curve backgrounds are theme-reactive.
Cards get a 220px minimum width and wrap into balanced rows, so four
types show as 4-across on wide screens and 2+2 instead of 3+1 when
there is no room for a full row.
Validate the resolved gateway URL instead of the raw template, so {cid} in the host (https://{cid}.ipfs.dweb.link) passes — the is-url host char class has no '{'. Path-style templates only passed before because the regex is unanchored.
Proofs resolve against the pinned CSM SDK, so a CSM_02 active operator
could be reported as eligible to claim.
The graph read depositData via getValues, a one-shot read with no
subscription, so the submitting-keys legend only appeared once an
unrelated re-render happened (hovering a legend). Bind useWatch to a
detached control when no form is above, keeping the hook unconditional.
useSmSDK(m) returns undefined unless m is active, so the CSM default curve id
went missing on /create while a CSM_02 operator was selected. Same reason the
DKG section must classify curveId against targetModule: per-module curve maps
do not overlap, so the active module would hide the field the flow expects.
Shown on non-production stands, gated by IS_TEST_ENV. Ports
lidofinance/ethereum-staking-widget#1182.

Restrict the webpack svg rule with `issuer` so svgr does not intercept the
banner's CSS url() background, and offset LayoutStyle's min-height by the
banner height to avoid a permanent 60px scroll on every page.

Also fixes two pre-existing header issues the banner exposed: the banner was
caught in the mobile nav overlay's backdrop-filter, and the header's opaque
background sat on the inset HeaderStyle rather than the bleeding HeaderWrapper,
leaking page content through ~20px side gutters on narrow viewports.
The create page treated the `?type=` query param as authorization rather
than a preselection, so /create?type=0x02 bypassed the hasOperatorIn check
and allowed duplicate operators. useRequestedOperatorType now validates
against a new creatableTypes set and ignores anything not currently
creatable, falling back to plain /create behaviour.
useInvites resolved its SDK through useSmSDK(), which follows the active
module. A wallet with no operator falls back to the primary module, so
invites belonging to a secondary one were never fetched — on the
semi-unified CSM build a CSM_02 invite left the inbox empty, the nav
counter at zero and HAS_INVITES false. It now fans out over
deployedModules the way operator discovery already does.

Invites are module-qualified as a consequence: getInviteId carries the
module (the radio value must be unique, or onChange resolves the wrong
invite), the row gained a CurveBadge so the modules are told apart, and
accepting resolves confirmAddress against the invite own module instead
of the active one. The e2e inbox locators match the value by suffix.

useAppendOperator now takes the module on the payload — it varies per
event, not per render.
Type-scoped curve ids only exist in the module that owns the type, but
useCurveParameters/useCurveMetadata defaulted to the active operator's
SDK — so ICS/IDVTC parameters never resolved for a CSM_02 operator, and
cross-module curve id comparison could report a type as already claimed.
- share one fetchAcrossModules helper between operator and invite discovery
- collapse the no-op target/active SDK ternary into useTargetSmSDK
- parameterize useDefaultCurveId and drop the CSM_02 clone
- use the SDK's module capability sets instead of hand-rolled family checks
- memoize useCanCreateNodeOperator, precompute the parameters table
…gets

feat: one CSM widget serving two modules — CSM and CSM 0x02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants