Skip to content

feat: surface LIP-118 reward-caller activity - #758

Merged
rickstaa merged 3 commits into
mainfrom
feat/lip-118-reward-caller-history
Aug 5, 2026
Merged

feat: surface LIP-118 reward-caller activity#758
rickstaa merged 3 commits into
mainfrom
feat/lip-118-reward-caller-history

Conversation

@rickstaa

@rickstaa rickstaa commented Aug 5, 2026

Copy link
Copy Markdown
Member

Follow-up to #757, finishing LIP-118 (livepeer/protocol#648, livepeer/subgraph#253) support in the explorer. #757 handled the orchestrator's own history; this makes the reward caller show up everywhere else.

  • setRewardCaller renders on the home and transactions pages ("Authorized 0x1b0c…292f to call reward on their behalf") and as a card on the account history, including the unset case, which the protocol encodes as the zero address.
  • A nominated reward caller now sees the calls it submitted on its own history, as "Called reward for <orchestrator>" and without the LPT amount, which is minted for the orchestrator rather than for them. The reward query matches both sides: or: [{ delegate }, { transaction_: { from } }].
  • apollo/subgraph.ts is regenerated; it predated LIP-118.

Two choices worth flagging:

  • Shown for any address, not just registered orchestrators. setRewardCaller keys on msg.sender with no registration check, and filtering on the transcoder's current status would rewrite a historical event. ServiceURIUpdateEvent is already shown unfiltered on the same grounds.
  • No "called by …" on reward rows. Every row links to the transaction, so the sender is one click away on Arbiscan; it only changes a row's meaning on the caller's own page, which is covered above.

Verified against live data on /transactions and on the history tabs of 0x5bdeedca…7039 (orchestrator), 0x1b0c26fc…292f (its reward caller) and 0x8ad7bcac…e947 (a non-orchestrator that set and then removed one). pnpm typecheck, lint, format:check and test are green.

Out of scope: showing the current Transcoder.rewardCaller on the orchestrator profile, and the nomination itself on the caller's history.

setRewardCaller has no render case, so RewardCallerSetEvent fell through to the
default branch and the home and transactions pages showed "Error fetching event
information." for it; the account history rendered nothing at all. Add the
fragment and a card/row for both, including the unset variant, which the
protocol encodes as the zero address.

Not restricted to registered orchestrators: setRewardCaller keys on msg.sender
with no registration check, and filtering on the transcoder's current status
would apply present state to a historical event. ServiceURIUpdateEvent is
already shown unfiltered on the same grounds.

Also widen the reward query added in #757. Keying it on the delegate alone left
the nominated caller's own history without the reward calls it made, since #757
dropped RewardEvent from the transaction path. Match the sender as well and tag
which side the account is on: the caller gets "Called reward for <orchestrator>"
without the amount, which is minted for the orchestrator, not for them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@rickstaa
rickstaa requested a review from ECWireless as a code owner August 5, 2026 09:01
Copilot AI review requested due to automatic review settings August 5, 2026 09:01
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
explorer-arbitrum-one Ready Ready Preview Aug 5, 2026 9:27am

Request Review

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Explorer’s event querying and rendering to properly surface LIP-118 “reward caller” activity across global transactions views and account/orchestrator history, including both setRewardCaller events and reward calls submitted by nominated callers.

Changes:

  • Adds RewardCallerSetEvent support to the global events query and renders it in TransactionsList (account cell + descriptive copy, including the unset/zero-address case).
  • Expands account history reward coverage by widening the rewardEvents query to include both delegate: $account and transaction.from: $account, and adjusts history-row rendering to distinguish orchestrator vs. caller perspective.
  • Regenerates apollo/subgraph.ts so generated types and query documents include the new schema fields/events.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.

Show a summary per file
File Description
queries/transactions.graphql Widens rewardEvents filtering to cover orchestrator + caller sides; adds RewardCallerSetEvent selection for account history transactions.
queries/events.graphql Adds RewardCallerSetEvent fragment so global transaction/event lists can render it instead of falling through to an error/default.
components/TransactionsList/index.tsx Renders RewardCallerSetEvent rows (account cell + “authorized/removed” description), using EMPTY_ADDRESS for the unset case.
components/HistoryView/index.tsx Adds a RewardCallerSetEvent card in history and tags reward rows as caller-side vs orchestrator-side to adjust copy/amount display.
apollo/subgraph.ts Updates generated schema/types/documents to include RewardCallerSetEvent and rewardCaller fields.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

The address sat in the card's right-hand slot, which every other card uses for a
value - LPT, ETH, a round number - so it inherited amount styling and read like
one. Addresses go in the title in this component, as Delegated/Redelegated/
Undelegated already do.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

Suppressed comments (1)

components/HistoryView/index.tsx:22

  • There are two separate imports from "@utils/web3" here. Consolidating them avoids duplicate-import patterns and keeps the import section easier to maintain.
import { EMPTY_ADDRESS, formatAddress } from "@utils/web3";
import { PERCENTAGE_PRECISION_TEN_THOUSAND } from "@utils/web3";

Drop what the code already says - which query filter is used, why the tag is
computed in the memo - and keep only what it does not: that reward tokens are
minted for the orchestrator, so the amount stays off the caller's history.

Rename isCaller to isRewardCaller to match the protocol's term.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

@rickstaa
rickstaa merged commit cbe4ec6 into main Aug 5, 2026
9 checks passed
@rickstaa
rickstaa deleted the feat/lip-118-reward-caller-history branch August 5, 2026 09:29
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.

2 participants