From 13c868505868158bd062189e1da6cf89f5345d3f Mon Sep 17 00:00:00 2001 From: Rick Staa Date: Wed, 5 Aug 2026 11:00:14 +0200 Subject: [PATCH 1/3] feat: surface LIP-118 reward-caller activity 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 " without the amount, which is minted for the orchestrator, not for them. Co-Authored-By: Claude Opus 5 (1M context) --- apollo/subgraph.ts | 256 +++++++++++++++++++++++++- components/HistoryView/index.tsx | 97 ++++++++-- components/TransactionsList/index.tsx | 14 ++ queries/events.graphql | 6 + queries/transactions.graphql | 21 ++- 5 files changed, 368 insertions(+), 26 deletions(-) diff --git a/apollo/subgraph.ts b/apollo/subgraph.ts index adfa80fc..a34f574d 100644 --- a/apollo/subgraph.ts +++ b/apollo/subgraph.ts @@ -239,6 +239,7 @@ export enum BondEvent_OrderBy { NewDelegateId = 'newDelegate__id', NewDelegateLastActiveStakeUpdateRound = 'newDelegate__lastActiveStakeUpdateRound', NewDelegateNinetyDayVolumeEth = 'newDelegate__ninetyDayVolumeETH', + NewDelegateRewardCaller = 'newDelegate__rewardCaller', NewDelegateRewardCut = 'newDelegate__rewardCut', NewDelegateRewardCutUpdateTimestamp = 'newDelegate__rewardCutUpdateTimestamp', NewDelegateServiceUri = 'newDelegate__serviceURI', @@ -258,6 +259,7 @@ export enum BondEvent_OrderBy { OldDelegateId = 'oldDelegate__id', OldDelegateLastActiveStakeUpdateRound = 'oldDelegate__lastActiveStakeUpdateRound', OldDelegateNinetyDayVolumeEth = 'oldDelegate__ninetyDayVolumeETH', + OldDelegateRewardCaller = 'oldDelegate__rewardCaller', OldDelegateRewardCut = 'oldDelegate__rewardCut', OldDelegateRewardCutUpdateTimestamp = 'oldDelegate__rewardCutUpdateTimestamp', OldDelegateServiceUri = 'oldDelegate__serviceURI', @@ -979,6 +981,7 @@ export enum Delegator_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -1362,6 +1365,7 @@ export enum EarningsClaimedEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -1626,6 +1630,7 @@ export enum LivepeerAccount_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -2876,6 +2881,7 @@ export enum Pool_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -3379,6 +3385,8 @@ export type Query = { reserveClaimedEvents: Array; reserveFundedEvent?: Maybe; reserveFundedEvents: Array; + rewardCallerSetEvent?: Maybe; + rewardCallerSetEvents: Array; rewardEvent?: Maybe; rewardEvents: Array; round?: Maybe; @@ -3855,6 +3863,24 @@ export type QueryReserveFundedEventsArgs = { }; +export type QueryRewardCallerSetEventArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryRewardCallerSetEventsArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type QueryRewardEventArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -4493,6 +4519,7 @@ export enum RebondEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -4689,6 +4716,7 @@ export enum ReserveClaimedEvent_OrderBy { ClaimantId = 'claimant__id', ClaimantLastActiveStakeUpdateRound = 'claimant__lastActiveStakeUpdateRound', ClaimantNinetyDayVolumeEth = 'claimant__ninetyDayVolumeETH', + ClaimantRewardCaller = 'claimant__rewardCaller', ClaimantRewardCut = 'claimant__rewardCut', ClaimantRewardCutUpdateTimestamp = 'claimant__rewardCutUpdateTimestamp', ClaimantServiceUri = 'claimant__serviceURI', @@ -4899,6 +4927,182 @@ export enum ReserveFundedEvent_OrderBy { TransactionTo = 'transaction__to' } +/** RewardCallerSetEvent entities are created for every emitted RewardCallerSet event. */ +export type RewardCallerSetEvent = Event & { + __typename: 'RewardCallerSetEvent'; + /** Reference to the transcoder that set the reward caller */ + delegate: Transcoder; + /** Ethereum transaction hash + event log index */ + id: Scalars['ID']; + /** Address authorized to call reward - the zero address when unset */ + rewardCaller: Scalars['String']; + /** Reference to the round the event occured in */ + round: Round; + /** Timestamp of the transaction the event was included in */ + timestamp: Scalars['Int']; + /** Reference to the transaction the event was included in */ + transaction: Transaction; +}; + +export type RewardCallerSetEvent_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + delegate?: InputMaybe; + delegate_?: InputMaybe; + delegate_contains?: InputMaybe; + delegate_contains_nocase?: InputMaybe; + delegate_ends_with?: InputMaybe; + delegate_ends_with_nocase?: InputMaybe; + delegate_gt?: InputMaybe; + delegate_gte?: InputMaybe; + delegate_in?: InputMaybe>; + delegate_lt?: InputMaybe; + delegate_lte?: InputMaybe; + delegate_not?: InputMaybe; + delegate_not_contains?: InputMaybe; + delegate_not_contains_nocase?: InputMaybe; + delegate_not_ends_with?: InputMaybe; + delegate_not_ends_with_nocase?: InputMaybe; + delegate_not_in?: InputMaybe>; + delegate_not_starts_with?: InputMaybe; + delegate_not_starts_with_nocase?: InputMaybe; + delegate_starts_with?: InputMaybe; + delegate_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; + rewardCaller?: InputMaybe; + rewardCaller_contains?: InputMaybe; + rewardCaller_contains_nocase?: InputMaybe; + rewardCaller_ends_with?: InputMaybe; + rewardCaller_ends_with_nocase?: InputMaybe; + rewardCaller_gt?: InputMaybe; + rewardCaller_gte?: InputMaybe; + rewardCaller_in?: InputMaybe>; + rewardCaller_lt?: InputMaybe; + rewardCaller_lte?: InputMaybe; + rewardCaller_not?: InputMaybe; + rewardCaller_not_contains?: InputMaybe; + rewardCaller_not_contains_nocase?: InputMaybe; + rewardCaller_not_ends_with?: InputMaybe; + rewardCaller_not_ends_with_nocase?: InputMaybe; + rewardCaller_not_in?: InputMaybe>; + rewardCaller_not_starts_with?: InputMaybe; + rewardCaller_not_starts_with_nocase?: InputMaybe; + rewardCaller_starts_with?: InputMaybe; + rewardCaller_starts_with_nocase?: InputMaybe; + round?: InputMaybe; + round_?: InputMaybe; + round_contains?: InputMaybe; + round_contains_nocase?: InputMaybe; + round_ends_with?: InputMaybe; + round_ends_with_nocase?: InputMaybe; + round_gt?: InputMaybe; + round_gte?: InputMaybe; + round_in?: InputMaybe>; + round_lt?: InputMaybe; + round_lte?: InputMaybe; + round_not?: InputMaybe; + round_not_contains?: InputMaybe; + round_not_contains_nocase?: InputMaybe; + round_not_ends_with?: InputMaybe; + round_not_ends_with_nocase?: InputMaybe; + round_not_in?: InputMaybe>; + round_not_starts_with?: InputMaybe; + round_not_starts_with_nocase?: InputMaybe; + round_starts_with?: InputMaybe; + round_starts_with_nocase?: InputMaybe; + timestamp?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_lt?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_not_in?: InputMaybe>; + transaction?: InputMaybe; + transaction_?: InputMaybe; + transaction_contains?: InputMaybe; + transaction_contains_nocase?: InputMaybe; + transaction_ends_with?: InputMaybe; + transaction_ends_with_nocase?: InputMaybe; + transaction_gt?: InputMaybe; + transaction_gte?: InputMaybe; + transaction_in?: InputMaybe>; + transaction_lt?: InputMaybe; + transaction_lte?: InputMaybe; + transaction_not?: InputMaybe; + transaction_not_contains?: InputMaybe; + transaction_not_contains_nocase?: InputMaybe; + transaction_not_ends_with?: InputMaybe; + transaction_not_ends_with_nocase?: InputMaybe; + transaction_not_in?: InputMaybe>; + transaction_not_starts_with?: InputMaybe; + transaction_not_starts_with_nocase?: InputMaybe; + transaction_starts_with?: InputMaybe; + transaction_starts_with_nocase?: InputMaybe; +}; + +export enum RewardCallerSetEvent_OrderBy { + Delegate = 'delegate', + DelegateActivationRound = 'delegate__activationRound', + DelegateActivationTimestamp = 'delegate__activationTimestamp', + DelegateActive = 'delegate__active', + DelegateDeactivationRound = 'delegate__deactivationRound', + DelegateFeeShare = 'delegate__feeShare', + DelegateFeeShareUpdateTimestamp = 'delegate__feeShareUpdateTimestamp', + DelegateId = 'delegate__id', + DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', + DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', + DelegateRewardCut = 'delegate__rewardCut', + DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', + DelegateServiceUri = 'delegate__serviceURI', + DelegateSixtyDayVolumeEth = 'delegate__sixtyDayVolumeETH', + DelegateStatus = 'delegate__status', + DelegateThirtyDayVolumeEth = 'delegate__thirtyDayVolumeETH', + DelegateTotalStake = 'delegate__totalStake', + DelegateTotalVolumeEth = 'delegate__totalVolumeETH', + DelegateTotalVolumeUsd = 'delegate__totalVolumeUSD', + Id = 'id', + RewardCaller = 'rewardCaller', + Round = 'round', + RoundActiveTranscoderCount = 'round__activeTranscoderCount', + RoundDelegatorsCount = 'round__delegatorsCount', + RoundEndBlock = 'round__endBlock', + RoundId = 'round__id', + RoundInflation = 'round__inflation', + RoundInitialized = 'round__initialized', + RoundLength = 'round__length', + RoundMintableTokens = 'round__mintableTokens', + RoundMovedStake = 'round__movedStake', + RoundNewStake = 'round__newStake', + RoundNumActiveTranscoders = 'round__numActiveTranscoders', + RoundParticipationRate = 'round__participationRate', + RoundStartBlock = 'round__startBlock', + RoundStartTimestamp = 'round__startTimestamp', + RoundTotalActiveStake = 'round__totalActiveStake', + RoundTotalSupply = 'round__totalSupply', + RoundVolumeEth = 'round__volumeETH', + RoundVolumeUsd = 'round__volumeUSD', + Timestamp = 'timestamp', + Transaction = 'transaction', + TransactionBlockNumber = 'transaction__blockNumber', + TransactionFrom = 'transaction__from', + TransactionGasPrice = 'transaction__gasPrice', + TransactionGasUsed = 'transaction__gasUsed', + TransactionId = 'transaction__id', + TransactionTimestamp = 'transaction__timestamp', + TransactionTo = 'transaction__to' +} + /** RewardEvent entities are created for every emitted Reward event. */ export type RewardEvent = Event & { __typename: 'RewardEvent'; @@ -5021,6 +5225,7 @@ export enum RewardEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -5906,6 +6111,8 @@ export type Transcoder = { ninetyDayVolumeETH: Scalars['BigDecimal']; /** Pools associated with the transcoder */ pools?: Maybe>; + /** Address delegated to call reward on the transcoder's behalf - null if unset */ + rewardCaller?: Maybe; /** % of block reward cut paid to transcoder by a delegator */ rewardCut: Scalars['BigInt']; /** The last timestamped update to reward cut, beginning at 12:00am UTC */ @@ -6081,6 +6288,7 @@ export enum TranscoderActivatedEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -6209,6 +6417,7 @@ export enum TranscoderDay_OrderBy { TranscoderId = 'transcoder__id', TranscoderLastActiveStakeUpdateRound = 'transcoder__lastActiveStakeUpdateRound', TranscoderNinetyDayVolumeEth = 'transcoder__ninetyDayVolumeETH', + TranscoderRewardCaller = 'transcoder__rewardCaller', TranscoderRewardCut = 'transcoder__rewardCut', TranscoderRewardCutUpdateTimestamp = 'transcoder__rewardCutUpdateTimestamp', TranscoderServiceUri = 'transcoder__serviceURI', @@ -6345,6 +6554,7 @@ export enum TranscoderDeactivatedEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -6497,6 +6707,7 @@ export enum TranscoderEvictedEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -6649,6 +6860,7 @@ export enum TranscoderResignedEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -6833,6 +7045,7 @@ export enum TranscoderSlashedEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -7013,6 +7226,7 @@ export enum TranscoderUpdateEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -7172,6 +7386,26 @@ export type Transcoder_Filter = { ninetyDayVolumeETH_not_in?: InputMaybe>; or?: InputMaybe>>; pools_?: InputMaybe; + rewardCaller?: InputMaybe; + rewardCaller_contains?: InputMaybe; + rewardCaller_contains_nocase?: InputMaybe; + rewardCaller_ends_with?: InputMaybe; + rewardCaller_ends_with_nocase?: InputMaybe; + rewardCaller_gt?: InputMaybe; + rewardCaller_gte?: InputMaybe; + rewardCaller_in?: InputMaybe>; + rewardCaller_lt?: InputMaybe; + rewardCaller_lte?: InputMaybe; + rewardCaller_not?: InputMaybe; + rewardCaller_not_contains?: InputMaybe; + rewardCaller_not_contains_nocase?: InputMaybe; + rewardCaller_not_ends_with?: InputMaybe; + rewardCaller_not_ends_with_nocase?: InputMaybe; + rewardCaller_not_in?: InputMaybe>; + rewardCaller_not_starts_with?: InputMaybe; + rewardCaller_not_starts_with_nocase?: InputMaybe; + rewardCaller_starts_with?: InputMaybe; + rewardCaller_starts_with_nocase?: InputMaybe; rewardCut?: InputMaybe; rewardCutUpdateTimestamp?: InputMaybe; rewardCutUpdateTimestamp_gt?: InputMaybe; @@ -7301,6 +7535,7 @@ export enum Transcoder_OrderBy { LastRewardRoundVolumeUsd = 'lastRewardRound__volumeUSD', NinetyDayVolumeEth = 'ninetyDayVolumeETH', Pools = 'pools', + RewardCaller = 'rewardCaller', RewardCut = 'rewardCut', RewardCutUpdateTimestamp = 'rewardCutUpdateTimestamp', ServiceUri = 'serviceURI', @@ -8199,6 +8434,7 @@ export enum UnbondEvent_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -8382,6 +8618,7 @@ export enum UnbondingLock_OrderBy { DelegateId = 'delegate__id', DelegateLastActiveStakeUpdateRound = 'delegate__lastActiveStakeUpdateRound', DelegateNinetyDayVolumeEth = 'delegate__ninetyDayVolumeETH', + DelegateRewardCaller = 'delegate__rewardCaller', DelegateRewardCut = 'delegate__rewardCut', DelegateRewardCutUpdateTimestamp = 'delegate__rewardCutUpdateTimestamp', DelegateServiceUri = 'delegate__serviceURI', @@ -9005,6 +9242,7 @@ export enum WinningTicketRedeemedEvent_OrderBy { RecipientId = 'recipient__id', RecipientLastActiveStakeUpdateRound = 'recipient__lastActiveStakeUpdateRound', RecipientNinetyDayVolumeEth = 'recipient__ninetyDayVolumeETH', + RecipientRewardCaller = 'recipient__rewardCaller', RecipientRewardCut = 'recipient__rewardCut', RecipientRewardCutUpdateTimestamp = 'recipient__rewardCutUpdateTimestamp', RecipientServiceUri = 'recipient__serviceURI', @@ -9635,7 +9873,7 @@ export type EventsQueryVariables = Exact<{ }>; -export type EventsQuery = { __typename: 'Query', transactions: Array<{ __typename: 'Transaction', events?: Array<{ __typename: 'BondEvent', additionalAmount: string, delegator: { __typename: 'Delegator', id: string }, newDelegate: { __typename: 'Transcoder', id: string }, oldDelegate?: { __typename: 'Transcoder', id: string } | null, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'BurnEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'DepositFundedEvent', amount: string, sender: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'EarningsClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'MigrateDelegatorFinalizedEvent', l1Addr: string, l2Addr: string, stake: string, delegatedStake: string, fees: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'MintEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'NewRoundEvent', transaction: { __typename: 'Transaction', from: string, id: string, timestamp: number }, round: { __typename: 'Round', id: string } } | { __typename: 'ParameterUpdateEvent', param: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'PauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'PollCreatedEvent', endBlock: string, poll: { __typename: 'Poll', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'RebondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'ReserveClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'ReserveFundedEvent', amount: string, reserveHolder: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'RewardEvent', rewardTokens: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'ServiceURIUpdateEvent', addr: string, serviceURI: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'SetCurrentRewardTokensEvent', currentInflation: string, currentMintableTokens: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'StakeClaimedEvent', stake: string, fees: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderActivatedEvent', activationRound: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderDeactivatedEvent', deactivationRound: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderEvictedEvent', delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderResignedEvent', delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderSlashedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderUpdateEvent', rewardCut: string, feeShare: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TransferBondEvent', amount: string, newDelegator: { __typename: 'Delegator', id: string }, oldDelegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TreasuryVoteEvent', support: TreasuryVoteSupport, proposal: { __typename: 'TreasuryProposal', id: string, description: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'UnbondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'UnpauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'VoteEvent', voter: string, choiceID: string, poll: { __typename: 'Poll', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WinningTicketRedeemedEvent', faceValue: string, recipient: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WithdrawFeesEvent', amount: string, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WithdrawStakeEvent', amount: string, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WithdrawalEvent', deposit: string, reserve: string, sender: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } }> | null }>, transcoders: Array<{ __typename: 'Transcoder', id: string }> }; +export type EventsQuery = { __typename: 'Query', transactions: Array<{ __typename: 'Transaction', events?: Array<{ __typename: 'BondEvent', additionalAmount: string, delegator: { __typename: 'Delegator', id: string }, newDelegate: { __typename: 'Transcoder', id: string }, oldDelegate?: { __typename: 'Transcoder', id: string } | null, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'BurnEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'DepositFundedEvent', amount: string, sender: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'EarningsClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'MigrateDelegatorFinalizedEvent', l1Addr: string, l2Addr: string, stake: string, delegatedStake: string, fees: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'MintEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'NewRoundEvent', transaction: { __typename: 'Transaction', from: string, id: string, timestamp: number }, round: { __typename: 'Round', id: string } } | { __typename: 'ParameterUpdateEvent', param: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'PauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'PollCreatedEvent', endBlock: string, poll: { __typename: 'Poll', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'RebondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'ReserveClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'ReserveFundedEvent', amount: string, reserveHolder: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'RewardCallerSetEvent', rewardCaller: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'RewardEvent', rewardTokens: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'ServiceURIUpdateEvent', addr: string, serviceURI: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'SetCurrentRewardTokensEvent', currentInflation: string, currentMintableTokens: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'StakeClaimedEvent', stake: string, fees: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderActivatedEvent', activationRound: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderDeactivatedEvent', deactivationRound: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderEvictedEvent', delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderResignedEvent', delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderSlashedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TranscoderUpdateEvent', rewardCut: string, feeShare: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TransferBondEvent', amount: string, newDelegator: { __typename: 'Delegator', id: string }, oldDelegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'TreasuryVoteEvent', support: TreasuryVoteSupport, proposal: { __typename: 'TreasuryProposal', id: string, description: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'UnbondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'UnpauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'VoteEvent', voter: string, choiceID: string, poll: { __typename: 'Poll', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WinningTicketRedeemedEvent', faceValue: string, recipient: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WithdrawFeesEvent', amount: string, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WithdrawStakeEvent', amount: string, delegator: { __typename: 'Delegator', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } } | { __typename: 'WithdrawalEvent', deposit: string, reserve: string, sender: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number, from: string } }> | null }>, transcoders: Array<{ __typename: 'Transcoder', id: string }> }; export type GatewaySelfRedeemQueryVariables = Exact<{ account: Scalars['String']; @@ -9707,7 +9945,7 @@ export type TransactionsQueryVariables = Exact<{ }>; -export type TransactionsQuery = { __typename: 'Query', transactions: Array<{ __typename: 'Transaction', events?: Array<{ __typename: 'BondEvent', additionalAmount: string, delegator: { __typename: 'Delegator', id: string }, newDelegate: { __typename: 'Transcoder', id: string }, oldDelegate?: { __typename: 'Transcoder', id: string } | null, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'BurnEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'DepositFundedEvent', amount: string, sender: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'EarningsClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'MigrateDelegatorFinalizedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'MintEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'NewRoundEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ParameterUpdateEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'PauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'PollCreatedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'RebondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ReserveClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ReserveFundedEvent', amount: string, reserveHolder: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'RewardEvent', rewardTokens: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ServiceURIUpdateEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'SetCurrentRewardTokensEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'StakeClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderActivatedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderDeactivatedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderEvictedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderResignedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderSlashedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderUpdateEvent', rewardCut: string, feeShare: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TransferBondEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TreasuryVoteEvent', id: string, reason?: string | null, support: TreasuryVoteSupport, timestamp: number, weight: string, proposal: { __typename: 'TreasuryProposal', id: string, targets: Array, description: string }, treasuryVoter: { __typename: 'LivepeerAccount', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'UnbondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'UnpauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'VoteEvent', voter: string, choiceID: string, id: string, timestamp: number, poll: { __typename: 'Poll', id: string, proposal: string, endBlock: string, quorum: string, quota: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number }, round: { __typename: 'Round', id: string } } | { __typename: 'WinningTicketRedeemedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'WithdrawFeesEvent', amount: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'WithdrawStakeEvent', amount: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'WithdrawalEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } }> | null }>, winningTicketRedeemedEvents: Array<{ __typename: 'WinningTicketRedeemedEvent', id: string, faceValue: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number }, sender: { __typename: 'Broadcaster', id: string }, recipient: { __typename: 'Transcoder', id: string } }>, rewardEvents: Array<{ __typename: 'RewardEvent', id: string, rewardTokens: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } }> }; +export type TransactionsQuery = { __typename: 'Query', transactions: Array<{ __typename: 'Transaction', events?: Array<{ __typename: 'BondEvent', additionalAmount: string, delegator: { __typename: 'Delegator', id: string }, newDelegate: { __typename: 'Transcoder', id: string }, oldDelegate?: { __typename: 'Transcoder', id: string } | null, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'BurnEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'DepositFundedEvent', amount: string, sender: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'EarningsClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'MigrateDelegatorFinalizedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'MintEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'NewRoundEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ParameterUpdateEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'PauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'PollCreatedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'RebondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ReserveClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ReserveFundedEvent', amount: string, reserveHolder: { __typename: 'Broadcaster', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'RewardCallerSetEvent', rewardCaller: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'RewardEvent', rewardTokens: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'ServiceURIUpdateEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'SetCurrentRewardTokensEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'StakeClaimedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderActivatedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderDeactivatedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderEvictedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderResignedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderSlashedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TranscoderUpdateEvent', rewardCut: string, feeShare: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TransferBondEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'TreasuryVoteEvent', id: string, reason?: string | null, support: TreasuryVoteSupport, timestamp: number, weight: string, proposal: { __typename: 'TreasuryProposal', id: string, targets: Array, description: string }, treasuryVoter: { __typename: 'LivepeerAccount', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'UnbondEvent', amount: string, delegate: { __typename: 'Transcoder', id: string }, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'UnpauseEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'VoteEvent', voter: string, choiceID: string, id: string, timestamp: number, poll: { __typename: 'Poll', id: string, proposal: string, endBlock: string, quorum: string, quota: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number }, round: { __typename: 'Round', id: string } } | { __typename: 'WinningTicketRedeemedEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'WithdrawFeesEvent', amount: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'WithdrawStakeEvent', amount: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } } | { __typename: 'WithdrawalEvent', round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number } }> | null }>, winningTicketRedeemedEvents: Array<{ __typename: 'WinningTicketRedeemedEvent', id: string, faceValue: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number }, sender: { __typename: 'Broadcaster', id: string }, recipient: { __typename: 'Transcoder', id: string } }>, rewardEvents: Array<{ __typename: 'RewardEvent', id: string, rewardTokens: string, round: { __typename: 'Round', id: string }, transaction: { __typename: 'Transaction', id: string, timestamp: number }, delegate: { __typename: 'Transcoder', id: string } }> }; export type TranscoderActivatedEventsQueryVariables = Exact<{ where?: InputMaybe; @@ -10066,6 +10304,12 @@ export const EventsDocument = gql` } rewardTokens } + ... on RewardCallerSetEvent { + delegate { + id + } + rewardCaller + } ... on WithdrawStakeEvent { delegator { id @@ -10695,6 +10939,9 @@ export const TransactionsDocument = gql` ... on RewardEvent { rewardTokens } + ... on RewardCallerSetEvent { + rewardCaller + } ... on WithdrawStakeEvent { amount } @@ -10784,7 +11031,7 @@ export const TransactionsDocument = gql` rewardEvents( orderBy: timestamp orderDirection: desc - where: {delegate: $account} + where: {or: [{delegate: $account}, {transaction_: {from: $account}}]} first: $first skip: $skip ) { @@ -10798,6 +11045,9 @@ export const TransactionsDocument = gql` timestamp } rewardTokens + delegate { + id + } } } `; diff --git a/components/HistoryView/index.tsx b/components/HistoryView/index.tsx index 4a1c4535..1efe1f3a 100644 --- a/components/HistoryView/index.tsx +++ b/components/HistoryView/index.tsx @@ -18,7 +18,7 @@ import { formatPercent, formatRound, } from "@utils/numberFormatters"; -import { formatAddress } from "@utils/web3"; +import { EMPTY_ADDRESS, formatAddress } from "@utils/web3"; import { PERCENTAGE_PRECISION_TEN_THOUSAND } from "@utils/web3"; import { TransactionsQuery, @@ -172,15 +172,20 @@ const Index = () => { })); }, [data?.winningTicketRedeemedEvents, account, lastEventTimestamp]); - // Orchestrator-keyed so delegated reward calls, whose transaction is sent by - // the reward caller, are included too. - const rewardEvents = useMemo( - () => - data?.rewardEvents?.filter( - (e) => (e?.transaction?.timestamp ?? 0) > lastEventTimestamp - ) ?? [], - [data?.rewardEvents, lastEventTimestamp] - ); + // Covers both sides of a delegated reward call: the orchestrator it was made + // for, and the reward caller that made it. Tagged here because renderSwitch + // has no access to the account. + const rewardEvents = useMemo(() => { + const accountLower = account.toLowerCase(); + return ( + data?.rewardEvents + ?.filter((e) => (e?.transaction?.timestamp ?? 0) > lastEventTimestamp) + .map((e) => ({ + ...e, + isCaller: e?.delegate?.id?.toLowerCase() !== accountLower, + })) ?? [] + ); + }, [data?.rewardEvents, account, lastEventTimestamp]); const mergedEvents = useMemo( () => @@ -554,7 +559,9 @@ function renderSwitch(event, i: number) { > - Claimed inflationary token reward + {event.isCaller + ? `Called reward for ${formatAddress(event.delegate.id)}` + : "Claimed inflationary token reward"} - - {" "} - - {formatLPT(event.rewardTokens, { - precision: 2, - forceSign: true, - })} + {/* The reward is minted for the orchestrator, so the amount is only + shown on its own history - never on the reward caller's. */} + {!event.isCaller && ( + + {" "} + + {formatLPT(event.rewardTokens, { + precision: 2, + forceSign: true, + })} + + + )} + + + ); + case "RewardCallerSetEvent": { + const isUnset = event.rewardCaller === EMPTY_ADDRESS; + return ( + + + + + {isUnset ? "Removed reward caller" : "Set reward caller"} + + + {dayjs + .unix(event.transaction.timestamp) + .format("MM/DD/YYYY h:mm:ss a")}{" "} + - Round {formatRound(event.round.id)} + + + + {!isUnset && ( + + + {formatAddress(event.rewardCaller)} + + + )} ); + } case "TranscoderUpdateEvent": return ( ; + case "RewardCallerSetEvent": + return ; + case "WithdrawStakeEvent": return ; @@ -257,6 +261,16 @@ const TransactionsList = ({ {renderEmoji("🌿")} ); + case "RewardCallerSetEvent": + return event?.rewardCaller === EMPTY_ADDRESS ? ( + {`Removed their reward caller`} + ) : ( + + {`Authorized `} + + {` to call reward on their behalf`} + + ); case "WithdrawStakeEvent": return ( diff --git a/queries/events.graphql b/queries/events.graphql index 0eb81c09..8cfb68b5 100644 --- a/queries/events.graphql +++ b/queries/events.graphql @@ -53,6 +53,12 @@ query events($first: Int) { } rewardTokens } + ... on RewardCallerSetEvent { + delegate { + id + } + rewardCaller + } ... on WithdrawStakeEvent { delegator { id diff --git a/queries/transactions.graphql b/queries/transactions.graphql index 27644b88..1b999ebd 100644 --- a/queries/transactions.graphql +++ b/queries/transactions.graphql @@ -46,6 +46,11 @@ query transactions($account: String!, $first: Int!, $skip: Int!) { ... on RewardEvent { rewardTokens } + # Sent by the orchestrator itself (setRewardCaller uses msg.sender), so + # the `from`-keyed query above already carries it. + ... on RewardCallerSetEvent { + rewardCaller + } ... on WithdrawStakeEvent { amount } @@ -132,14 +137,17 @@ query transactions($account: String!, $first: Int!, $skip: Int!) { id } } - # Keyed on the orchestrator (RewardEvent.delegate), not the transaction sender. - # Since LIP-118 a delegated reward caller may submit reward() on the - # orchestrator's behalf, so those calls are absent from the transactions query - # above, which filters on `from`. + # Since LIP-118 the reward() sender and the orchestrator being rewarded can be + # two different addresses, and neither side is covered by the `from`-keyed + # transactions query above: match the orchestrator (delegate) so its delegated + # calls are listed, and the sender so a nominated reward caller sees the calls + # it made. `or` returns distinct entities, so a self-call is listed once. rewardEvents( orderBy: timestamp orderDirection: desc - where: { delegate: $account } + where: { + or: [{ delegate: $account }, { transaction_: { from: $account } }] + } first: $first skip: $skip ) { @@ -153,5 +161,8 @@ query transactions($account: String!, $first: Int!, $skip: Int!) { timestamp } rewardTokens + delegate { + id + } } } From 40153ec00838c09daa5bf49c7b64f30c16113196 Mon Sep 17 00:00:00 2001 From: Rick Staa Date: Wed, 5 Aug 2026 11:04:55 +0200 Subject: [PATCH 2/3] style: render reward caller inline in the history card title 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) --- components/HistoryView/index.tsx | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/components/HistoryView/index.tsx b/components/HistoryView/index.tsx index 1efe1f3a..d8016d94 100644 --- a/components/HistoryView/index.tsx +++ b/components/HistoryView/index.tsx @@ -591,8 +591,7 @@ function renderSwitch(event, i: number) { ); - case "RewardCallerSetEvent": { - const isUnset = event.rewardCaller === EMPTY_ADDRESS; + case "RewardCallerSetEvent": return ( - {isUnset ? "Removed reward caller" : "Set reward caller"} + {event.rewardCaller === EMPTY_ADDRESS + ? "Removed reward caller" + : `Set reward caller ${formatAddress(event.rewardCaller)}`} - {!isUnset && ( - - - {formatAddress(event.rewardCaller)} - - - )} ); - } case "TranscoderUpdateEvent": return ( Date: Wed, 5 Aug 2026 11:24:49 +0200 Subject: [PATCH 3/3] docs: trim reward-caller comments 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) --- components/HistoryView/index.tsx | 14 ++++++-------- queries/transactions.graphql | 7 ------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/components/HistoryView/index.tsx b/components/HistoryView/index.tsx index d8016d94..60c62ffc 100644 --- a/components/HistoryView/index.tsx +++ b/components/HistoryView/index.tsx @@ -172,9 +172,8 @@ const Index = () => { })); }, [data?.winningTicketRedeemedEvents, account, lastEventTimestamp]); - // Covers both sides of a delegated reward call: the orchestrator it was made - // for, and the reward caller that made it. Tagged here because renderSwitch - // has no access to the account. + // Covers both sides of a reward call: the orchestrator it was made for, and + // the reward caller that made it. const rewardEvents = useMemo(() => { const accountLower = account.toLowerCase(); return ( @@ -182,7 +181,7 @@ const Index = () => { ?.filter((e) => (e?.transaction?.timestamp ?? 0) > lastEventTimestamp) .map((e) => ({ ...e, - isCaller: e?.delegate?.id?.toLowerCase() !== accountLower, + isRewardCaller: e?.delegate?.id?.toLowerCase() !== accountLower, })) ?? [] ); }, [data?.rewardEvents, account, lastEventTimestamp]); @@ -559,7 +558,7 @@ function renderSwitch(event, i: number) { > - {event.isCaller + {event.isRewardCaller ? `Called reward for ${formatAddress(event.delegate.id)}` : "Claimed inflationary token reward"} @@ -575,9 +574,8 @@ function renderSwitch(event, i: number) { - {/* The reward is minted for the orchestrator, so the amount is only - shown on its own history - never on the reward caller's. */} - {!event.isCaller && ( + {/* Minted for the orchestrator, never earned by the reward caller. */} + {!event.isRewardCaller && ( {" "} diff --git a/queries/transactions.graphql b/queries/transactions.graphql index 1b999ebd..2d74a04f 100644 --- a/queries/transactions.graphql +++ b/queries/transactions.graphql @@ -46,8 +46,6 @@ query transactions($account: String!, $first: Int!, $skip: Int!) { ... on RewardEvent { rewardTokens } - # Sent by the orchestrator itself (setRewardCaller uses msg.sender), so - # the `from`-keyed query above already carries it. ... on RewardCallerSetEvent { rewardCaller } @@ -137,11 +135,6 @@ query transactions($account: String!, $first: Int!, $skip: Int!) { id } } - # Since LIP-118 the reward() sender and the orchestrator being rewarded can be - # two different addresses, and neither side is covered by the `from`-keyed - # transactions query above: match the orchestrator (delegate) so its delegated - # calls are listed, and the sender so a nominated reward caller sees the calls - # it made. `or` returns distinct entities, so a self-call is listed once. rewardEvents( orderBy: timestamp orderDirection: desc