chore(abi): sync tnt-core v0.15.0 (Round 4 audit consolidation)#3199
Merged
Conversation
Regenerate ABIs from tnt-core@v0.15.0 (PRs #126, #127, #129) and fix the two callsites in this dapp that the v0.14/v0.15 breaking changes actually touched. Everything else either landed as additive surface or was outside our consumer set. ABI changes (auto-generated): - ITangleFull: + claimDisputeBond(), + pendingDisputeBondRefund(address); ServiceEscrow struct gains trailing __reservedAggregateCursor + subscriptionBaselineStake fields (positional reads at the old offsets are unchanged, named decoders ignore the new fields). - IMultiAssetDelegation: + getCumStakeSeconds(operator, asset) view, + AdapterChangeWhileDepositsExist error. - ValidatorPodManager (hand-maintained ABI under tangle-dapp/src/abi): drop removed `podOwnerShares`, retype `totalShares` int256 -> uint256, add `getSharesUint`, `recordBeaconChainDeposit`, `recordBeaconChainRebase`, and the new `BeaconRebase` event. Extend `SharesUpdated` / `WithdrawalQueued` / `WithdrawalCompleted` with their newly-appended fields (`newShares` retyped to uint256 to match share-pool semantics; trailing `assets` on the withdrawal events). Consumer fixes: - features/native-staking/useValidatorPodManager.ts: `usePodOwnerShares` now calls `getShares` instead of the removed `podOwnerShares` view. `getShares` returns int256, but the bigint shape used by PodOwnerInfo / DelegationCard / WithdrawalCard is preserved and the downstream renderers already clamp negative values for display. - operators/manage/components/modals/DisputeSlashModal.tsx: the bond hint text used to claim the bond was "refunded if dispute upheld"; v0.14.0 switched dispute-bond refunds to a pull pattern (cancelSlash no longer pushes), so reword to "claimable via claimDisputeBond if dispute upheld" to set the right expectation. - data/graphql/useSlashing.ts: add an inline NOTE on `useCancelSlashTx` documenting the pull-pattern + a TODO(v0.15.0) for the follow-up `useClaimDisputeBondTx` hook and disputer-side UI affordance. Out-of-scope deferred items (left as TODOs / not surfaced in UI yet): - claimDisputeBond() / pendingDisputeBondRefund(address) hooks + UI for the disputer-side refund claim flow. Tracked in the inline TODO above. - TangleToken.burn / burnFrom now revert with BurnDisabled(); no dapp callsite exposes a burn action today, so nothing to gate. - L2SlashingReceiver bridge deploy flow (proxy + initialize) is not invoked from the dapp; deploys live in tnt-core scripts. - billSubscription semantics shifted to TWAP-fair but the ABI signature is unchanged and we don't call it from the dapp. Verification: - yarn typecheck (tangle-dapp, tangle-cloud) -> clean - yarn lint (tangle-dapp, tangle-cloud, tangle-shared-ui) -> clean - prettier --check on every touched file -> clean Refs: tangle-network/tnt-core#126, #127, #129
✅ Deploy Preview for tangle-cloud ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for tangle-dapp ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for tangle-leaderboard ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This was referenced May 14, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Sync ABIs from tnt-core@v0.15.0 (PRs #126, #127, #129) covering the v0.14.0 + v0.15.0 audit-hardening cycle. Two consumer-side fixes accompany the regen for the only breaking changes whose callsites live in this dapp.
Previous sync was v0.13.0 in #3198.
ABI changes (auto-generated via
yarn sync:tnt-core-assets)ITangleFull(libs/tangle-shared-ui/src/abi/tangle.ts)claimDisputeBond()(v0.14.0 pull-pattern dispute refunds)pendingDisputeBondRefund(address) -> uint256viewPaymentLib.ServiceEscrowstruct: trailing__reservedAggregateCursor+subscriptionBaselineStakeappended. Named decoders (e.g.useServiceEscrow) ignore the new fields; positional reads at the old offsets are preserved.IMultiAssetDelegation(libs/tangle-shared-ui/src/abi/multiAssetDelegation.ts)getCumStakeSeconds(operator, asset)view (live TWAP stake-seconds)AdapterChangeWhileDepositsExist(token, currentDeposits)errorValidatorPodManager(hand-maintained ABI underapps/tangle-dapp/src/abi/validatorPodManager.ts)podOwnerShares(removed in the v0.15.0 share-pool refactor)totalSharesretypedint256 -> uint256getSharesUint(address) -> uint256companion togetSharesrecordBeaconChainDeposit(address, uint256)(replaces removedrecordBeaconChainEthBalanceUpdate)recordBeaconChainRebase(address, int256)BeaconRebase(owner, assetsDelta, newTotalAssets, totalSharesPool)eventSharesUpdatedsignature expanded to(owner, sharesDelta, newShares uint256, totalAssets, totalSharesPool)(was 3 args,newShareswas int256)WithdrawalQueued/WithdrawalCompletedgained trailinguint256 assetsConsumer fixes (the only breaking changes whose callsites exist in this dapp)
apps/tangle-dapp/src/features/native-staking/hooks/useValidatorPodManager.tsusePodOwnerSharesnow readsgetShares(legacypodOwnerShareswas removed in v0.15.0).getSharesreturnsint256so values can transiently be negative after a beacon rebase; downstream renderers (DelegationCard,WithdrawalCard,PodOverviewCard) already clamp at zero for display.apps/tangle-cloud/src/pages/operators/manage/components/modals/DisputeSlashModal.tsx"refunded if dispute upheld"to"claimable via claimDisputeBond if dispute upheld"— v0.14.0 switched dispute refunds to pull-pattern so the previous text overpromised.libs/tangle-shared-ui/src/data/graphql/useSlashing.tsuseCancelSlashTxdocumenting the pull-pattern change, plus aTODO(v0.15.0)for the follow-upuseClaimDisputeBondTxhook + disputer-side claim affordance (see deferred items below).Breaking changes intentionally NOT actioned in this PR
These are real v0.14/v0.15 contract-side breaks but have zero consumer code in the dapp, so the regen alone is enough:
TangleToken.burn/burnFromrevert withBurnDisabled()— no dapp surface exposes a TNT burn action.TangleGovernor.MAX_PROPOSAL_ACTIONS50 -> 10,MAX_ACTION_VALUE100k -> 10k ETH — the dapp doesn't construct governor proposals from user UI.ArbitrumCrossChainMessenger.setL2RefundAddress— not invoked from dapp UI.Tangle.billSubscription(uint64)TWAP-fair semantics — signature unchanged, dapp does not call.Deferred follow-up (TODOs in code)
claimDisputeBond()+pendingDisputeBondRefund(address)UI affordance for disputers after their bond becomes claimable. Tracked asTODO(v0.15.0)insidelibs/tangle-shared-ui/src/data/graphql/useSlashing.tsonuseCancelSlashTx. Recommend a follow-upuseClaimDisputeBondTxhook + a "Claim refund" button on the disputer-side slash detail view, gated on a non-zeropendingDisputeBondRefundread.Verification
yarn nx typecheck tangle-dapp— cleanyarn nx typecheck tangle-cloud— cleanyarn nx lint tangle-dapp— cleanyarn nx lint tangle-cloud— cleanyarn nx lint tangle-shared-ui— cleanprettier --checkon every touched file — cleanTest plan
getSharespath)