# Jan. 12-Feb. 17, 2026 staking and lock-extension exposure record

## Result

During the period between Sovryn's Jan. 12 staking-reward promotion and Yago's
Feb. 17 payout-pause announcement, the Rootstock Staking contract recorded:

| On-chain action | Transactions | Events | Unique beneficiary wallets named in the event | SOV amount represented by the event |
| --- | ---: | ---: | ---: | ---: |
| `TokensStaked`, all calls | 30 | 132 | 21 | 171,633.991287965199009887 |
| `TokensStaked`, directly initiated by the beneficiary wallet | 24 | 24 | 15 | 111,068.401210397869611600 |
| `TokensStaked`, sent by another wallet and reported separately | 6 | 108 | 6 | 60,565.590077567329398287 |
| `ExtendedStakingDuration` | 27 | 27 | 20 | 9,962,956.414443993903912496 |

The 27 lock-extension transactions were all sent by the beneficiary wallet named in the event. The
extension amount represents the existing stake whose lock was lengthened, so
it is reported separately from the `TokensStaked` amount.

The structured JSON record contains every transaction hash, execution block,
block hash, UTC timestamp, caller, indexed staker, event count, event log
index, raw amount, decimal SOV amount, and direct Blockscout link.

## Time anchors and exact block range

Sovryn's official X account published status
[2010718709904703882](https://x.com/SovrynBTC/status/2010718709904703882),
stating:

> In a world where you receive staking rewards mostly in tokens, Sovryn stands
> out by giving you Bitcoin and stablecoins.
>
> Stake SOV right now to earn up to 21.37% APR
> BTC and USD

The status ID's X Snowflake timestamp is **2026-01-12 14:21:12.445 UTC**. The
calculation is `(status ID >> 22) + 1288834974657` milliseconds, following
[X's ID documentation](https://docs.x.com/fundamentals/x-ids). The preserved
official oEmbed response is
`evidence/source/x/2010718709904703882.oembed.json`, SHA-256
`42a2c6e1a0cd7c3a45639c4debb46a51d8a755c8bc7c1a999145573a1adc3917`.

Yago's forum announcement was created at **2026-02-17 14:10:17.288 UTC**,
according to the official [Discourse topic
JSON](https://forum.sovryn.com/t/3530.json). It stated: “After the next payout,
we will be temporarily pausing RBTC and ZUSD payouts to stakers.” The readable
post is [Staking Update: Temporary Adjustment to Staking
Rewards](https://forum.sovryn.com/t/staking-update-temporary-adjustment-to-staking-rewards/3530/1).

The inclusive audit range is **block 8,413,240 through block 8,538,144**:

| Boundary | Block | UTC | Block hash |
| --- | ---: | --- | --- |
| Previous block | 8,413,239 | 2026-01-12 14:19:51 | `0xfaedbd80d21547caf5cc1008028b7e00ebea7d2ed3a779089138400a2901edd6` |
| First included block | 8,413,240 | 2026-01-12 14:21:13 | `0xe2733abf859cff3e77631f1e1fc131cea52421766eb8c8359dd670098702b3de` |
| Last included block | 8,538,144 | 2026-02-17 14:10:15 | `0xea161d3c48d45775564ecc0e9ad10007a2c9de0d75ff80ef088425464ac18fe6` |
| Next block | 8,538,145 | 2026-02-17 14:11:21 | `0x277d18f66110971f75141c34d2bafe407edd960dace2d5d69ba214b93a1a6045` |

This selects the first Rootstock block after the X Snowflake timestamp through
the last Rootstock block at or before the forum post timestamp: 124,905 blocks
in total.

## Event and exclusion method

The audit scans the permanent address of the Rootstock Staking contract
[`0x5684…a40e`](https://rootstock.blockscout.com/address/0x5684a06cab22db16d901fee2a5c081b4c91ea40e)
whose code can be replaced while its address and stored records remain,
in chunks of no more than 5,000 blocks for these events from Sovryn's
[official `IStaking.sol`
interface](https://github.com/DistributedCollective/Sovryn-smart-contracts/blob/73d87088ef4fc30450bc6014e48f767f06823138/contracts/governance/Staking/interfaces/IStaking.sol):

- `TokensStaked(address indexed staker,uint256 amount,uint256 lockedUntil,uint256 totalStaked)`;
  topic `0x0fc5b1bac0416800b42a669229a346b6e5a15db3896339dbdc5fa376e1e4570a`.
- `ExtendedStakingDuration(address indexed staker,uint256 previousDate,uint256 newDate,uint256 amountStaked)`;
  topic `0x809d79c94c86576d61afef75495b8df415224bf885310fed7ea315039f8c5b4c`.

For the directly initiated count, a `TokensStaked` transaction is included
only when the transaction sender equals the sole beneficiary wallet named in
every event emitted by that transaction. Six transactions are reported
separately because the sender differed from the beneficiary. Those calls account
for 108 events and 60,565.590077567329398287 SOV. This rule removes
third-party stake-for and scheduled or vesting activity from the direct count without
having to infer the caller's purpose.

The same sender comparison is reported for every lock extension. All 27
extension senders equal the beneficiary wallet named in the event.

## Victim-file joinder

This record counts on-chain staking and lock-extension activity inside the
defined window. Individual victim files should join these transactions to
dated evidence of post exposure, purchase/staking decisions, and loss.
Natural-person key-control records should be joined separately where wallet
ownership is relevant.

## Reproduction

From the repository root, run against a Rootstock mainnet endpoint retaining
the historical logs, transactions, and blocks:

```bash
python3 scripts/audit-staking-exposure-window.py \
  --rpc http://127.0.0.1:4444 \
  --verify evidence/public/staking-exposure-window.json
```

The verified canonical JSON SHA-256 is
`ed6270a2f49fa9d9b5e66c991ef913b3e55bdc1a3e471fcce46a9ab87205964d`.
The pretty-printed artifact's file SHA-256 is
`0ddf86d0b4608f1e84ef46e4c6acb2fe43df66d0897ee1c166516e04f197ca04`.
